- Published on
Leer datos de una bascula por puerto serial
- Authors
- Name
- Pablo Solana
- @iLinKN95
Necesito leer los datos de un dispositivo desde el puerto serial y ponerlos en una API
En la actualización de las aplicaciones me encontré con este nuevo reto
Decidí utilizar NodeJS y las dependencias:
- express
- cors
- serialport
El hardware que estoy utilizando es el siguiente:
Es un proyecto relativamente pequeño en código pero no por eso menos importante
const express = require("express");const cors = require('cors')const app = express();const SerialPort = require('serialport')const Delimiter = require('@serialport/parser-delimiter');const port = new SerialPort('/dev/ttyUSB0', { baudRate: 2400})let bascula = []app.use(cors())
La parte extraña es la constante port, le estoy pasando la interface del dispositivo y la frecuencia con la que trabaja (cada dispositivo tiene su propia configuración por lo que es necesario leer los manuales)
const parser = port.pipe(new Delimiter({ delimiter: '\n' }))parser.on('data', function (data) { // La conexión con el puerto siempre está abierta por lo que solo guardo los valores que cambian data.toString() !== bascula[bascula.length - 1]? bascula.push(data.toString()): null console.log(bascula[bascula.length - 1])})
Al inicio declaré un arreglo, la idea es guardar en el los cambios de los valores, pero solo si es diferente al anterior para no tener valores repetidos infinitos.
app.get("/API/v1/bascula", (req, res) => { res.status(200).json({ bascula: bascula[bascula.length - 1] }) //limpio el arreglo para mejorar el rendimiento bascula.length=0})
La ruta donde se van a consultar es /API/v1/bascula donde aparecerán los datos del json con el último valor almacenado
const PORT = process.env.PORT || 3000;app.listen(PORT, (err) => { if (err) throw err; console.log("server corriendo en el puerto", PORT);});
Los clásicos parametros para iniciar el server y el resultado es el siguiente
Te dejo el repositorio por si gustas ver a detalle el código y la API funcionado.
Saludos.