119 lines
4.0 KiB
Markdown
119 lines
4.0 KiB
Markdown
# CanSat
|
|
|
|
Este proyecto se encarga de leer datos desde un dispositivo CanSat vía puerto serie, procesarlos y enviarlos a ThingSpeak para visualizarlos en un dashboard.
|
|
|
|
---
|
|
|
|
## 📋 Requisitos previos
|
|
|
|
1. **Node.js**:
|
|
- Versión recomendada: LTS (Long Term Support).
|
|
- Descárgala de https://nodejs.org/
|
|
|
|
2. **Acceso al dispositivo CanSat** conectado al puerto USB de tu ordenador.
|
|
|
|
---
|
|
|
|
## 🚀 Instalación
|
|
|
|
1. Abre una terminal.
|
|
2. Clona o descarga el proyecto y accede a su carpeta:
|
|
```bash
|
|
# El git es para clonar, pero puedes descargar el código en ZIP si no tienes Git
|
|
git clone https://git.h4ckdata.es/h4ckx0r/CanSat.git
|
|
cd CanSat
|
|
```
|
|
3. Instala las dependencias:
|
|
```bash
|
|
npm install
|
|
```
|
|
|
|
---
|
|
|
|
## ⚙️ Configuración
|
|
|
|
Antes de ejecutar el proyecto, edita el archivo `config.js` y ajusta estos valores:
|
|
|
|
```js
|
|
export default {
|
|
// Identificadores de tu canal ThingSpeak
|
|
thingSpeak: {
|
|
channelId: "<TU_CHANNEL_ID>",
|
|
writeKey: "<TU_WRITE_KEY>"
|
|
},
|
|
// Opciones del puerto serial donde está conectado el CanSat
|
|
serial: {
|
|
path: "/dev/ttyUSB0", // Cambia al puerto correcto de tu sistema
|
|
baudRate: 9600 // Ajusta si tu dispositivo usa otra velocidad
|
|
}
|
|
}
|
|
```
|
|
|
|
- **thingSpeak.channelId**: ID del canal dónde se mostrarán los datos.
|
|
- **thingSpeak.writeKey**: Clave de escritura para enviar datos a ThingSpeak.
|
|
- **serial.path**: Ruta del dispositivo serie (por ejemplo `/dev/ttyUSB0` en Linux, `COM3` en Windows, o `/dev/tty.usbserial-XXXX` en macOS).
|
|
- **serial.baudRate**: Velocidad en baudios, normalmente `9600`.
|
|
|
|
---
|
|
|
|
## 📂 Estructura de archivos
|
|
|
|
- **`main.js`**
|
|
Punto de entrada:
|
|
- Abre el puerto serie.
|
|
- Procesa cada línea recibida con `ReadlineParser`.
|
|
- Convierte la línea a objeto y llama a la función de envío.
|
|
|
|
- **`config.js`**
|
|
Contiene toda la configuración del proyecto (ThingSpeak y serial).
|
|
|
|
- **`utils.js`** (en `libs/`)
|
|
- `dataLineToObject(line)`: convierte una línea CSV (`;` separado) en un objeto con propiedades claras.
|
|
- Funciones de guardado en `logs/` (JSON, CSV y GeoJSON).
|
|
|
|
- **`api.js`** (en `libs/`)
|
|
- `subirDato(datos)`: prepara y acumula peticiones para ThingSpeak.
|
|
- Bucle que envía datos en bloques cada 20 segundos.
|
|
|
|
- **`package.json`**
|
|
- Define dependencias y scripts disponibles.
|
|
|
|
---
|
|
|
|
## ▶️ Uso
|
|
|
|
1. Asegúrate de haber configurado `config.js`.
|
|
2. En la terminal, ejecuta:
|
|
```bash
|
|
npm start
|
|
```
|
|
Esto lanza `main.js` y comienza a leer y enviar datos.
|
|
|
|
---
|
|
|
|
## 🔧 Scripts disponibles
|
|
|
|
- **`npm start`**
|
|
Ejecuta el programa principal: `node main.js`.
|
|
|
|
Si da error al comunicarse con el puerto serie, cierre el monitor serie de Arduino IDE o cierre completamente el Arduino IDE y compruebe que en la configuración ha escrito correctamente el puerto serial del equipo.
|
|
|
|
En el caso de que necesite cancelar la ejecución del script, pulse `Ctrl + C` 2 veces seguidas.
|
|
|
|
- **`npm run csv2json -- nombreArchivoCSVAConvertir.csv`**
|
|
Convierte un registro de los datos CSV a JSON y GeoJSON.
|
|
|
|
Es importante que ejecute este comando en la raiz del proyecto y que el archivo CSV a convertir esté en la raiz del proyecto también. El script generará los dos archivos en la misma raiz con el mismo nombre, sólo cambiando la extensión.
|
|
|
|
Y el CSV debe contener sólo los datos, no puede contener los títulos de las columnas.
|
|
|
|
- **`npm run uploadcsv -- nombreArchivoCSVAConvertir.csv`**
|
|
Convierte el CSV de datos a un CSV listo para subir a ThingSpeak.
|
|
|
|
El comando es igual al de convertir a JSON y GeoJSON, pero esta vez generará un CSV que se llama csvParaSubir.csv y este lo importamos en ThingSpeak.
|
|
|
|
Es posible que ThingSpeak se pille, yo he tenido que recargar y borrar los datos del canal varias veces para que lo pille bien y pille todos los datos. Igualmente, esperad unos minutos a que cargue los datos.
|
|
|
|
---
|
|
|
|
¡Y ya está! Con esto tendrás tu CanSat enviando datos en tiempo real a ThingSpeak. Si tienes dudas, consulta la documentación de [Node.js](https://nodejs.org/) o busca ayuda en la comunidad. |