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
-
Node.js:
- Versión recomendada: LTS (Long Term Support).
- Descárgala de https://nodejs.org/
-
Acceso al dispositivo CanSat conectado al puerto USB de tu ordenador.
🚀 Instalación
- Abre una terminal.
- Clona o descarga el proyecto y accede a su carpeta:
# 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 - Instala las dependencias:
npm install
⚙️ Configuración
Antes de ejecutar el proyecto, edita el archivo config.js y ajusta estos valores:
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/ttyUSB0en Linux,COM3en Windows, o/dev/tty.usbserial-XXXXen 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(enlibs/)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(enlibs/)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
- Asegúrate de haber configurado
config.js. - En la terminal, ejecuta:
Esto lanza
npm startmain.jsy 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 + C2 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.csvConvierte 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 o busca ayuda en la comunidad.