Files
CanSat/main.js
2025-04-24 01:18:40 +02:00

57 lines
2.0 KiB
JavaScript

// Importamos las librerias necesarias
import { SerialPort } from 'serialport';
import { ReadlineParser } from '@serialport/parser-readline';
// Importamos las funciones de utilidad que vayamos a usar
import { dataLineToObject } from './libs/utils.js';
// Importamos las funciones de la API
import { subirDato } from './libs/api.js';
// Importamos toda la configuración
import config from './config.js';
// Creamos una conexión con el puerto serial
const port = new SerialPort({
path: config.serial.path,
baudRate: config.serial.baudRate,
autoOpen: false
});
// Le establecemos que procese los datos recibidos con el parser de readline y le decimos que diferencie las líneas por saltos de línea
const parser = port.pipe(new ReadlineParser({ delimiter: '\n' }));
// Función para (re)conectar al puerto serie con reintentos cada 1 segundo
function connectPort() {
port.open(err => {
if (err) {
console.error(`Error al conectar al puerto ${config.serial.path}:`, err.message);
setTimeout(connectPort, 1000);
}
});
}
// Iniciar primer intento de conexión
connectPort();
// Esperamos a que se abra el puerto y cuando lo haga ejecutamos un console log para indicar que se ha abierto correctamente
port.on('open', () => {
console.log(`Puerto ${config.serial.path} conectado correctamente.`);
});
// Cada vez que recibamos un dato, le decimos al programa que lo procese sin bloquear la ejecución principal
parser.on('data', async (data) => {
// Convertimos la línea recibida en un objeto y lo mandamos a la api para que se encargue de la subida
subirDato(dataLineToObject(data));
});
// Si hay un error en el puerto, lo mostramos en la consola
port.on('error', (err) => {
console.error('Error en el puerto:', err.message);
});
// Si el puerto se cierra, reintentamos después de 1 segundo
port.on('close', () => {
console.warn(`Puerto ${config.serial.path} cerrado. Reintentando en 1 segundo...`);
setTimeout(connectPort, 1000);
});