Files
CanSat/README.md
2025-04-24 01:18:40 +02:00

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.