# 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: "", writeKey: "" }, // 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.