SerialPort on Nodejs :)

He andado pegandome un cierre con nodejs y su modulito de serialport, y al final gano el modulo jaja, el problema era del aparato de donde andaba queriendo sacar la informacion le enviaba un salto de linea segun yo era «\n» pero ni madres es «\r» 3 dias queriendo encontrar una explicacion de por que dicha maquinita si jalaba bien con minicom y con el serialport de nodejs no y pues era por eso por la \r.

Bueno para instalar el serialport del node ocupan tener instalado el npm (Node Package Manager), y el serialport los instalan bien facil asi en la consola:

npm install serialport

y listo que facil, es instalar con el npm, luego si queremos enviar comandos al puerto solo tenemos que comandos enviar y como enviarlos, pero mi ejemplo tenia que enviar una «W» y un salto de linea entonces lo que hago es lo siguiente:

//creo una objeto tipo serialport
var sp = new SerialPor(DEV,{baudrate:BAUDRATE,buffersize:BUFFER,parser:serialport.parsers.readline('\n')});
sp.write("W\r");

En el codigo ese incializo el serialport y luego le envio el comando W\r lo que viene siendo algo asi como devuelveme el peso y un enter la \r es el enter por codigo ascii, despues de eso el programa de la pesa regresa el peso a la computadora y luego lo proceso.

para esto tengo un listener que es propio del serial port es un metodo que ya viene definido en las librerias del serial port que esta a la espera de que el puerto le envie algun dato entonces para saber si nos regresa datos ponemos el siguiente codigo:


sp.on("data",function(data){
readData = data.toString();
if(readData.indexOf('S') == -1){
socket.emit('some',{data:readData});
}
});

Lo que hago ahi es simple, si los datos que me regresa la pesa existe una S creo una notificacion para los clientes conectados al socket y lo envio al metodo «some» con un json que contiene los datos, en el parametro «data», para luego procesarlo en el cliente conectado.

Tambien el serialport tiene listeners para saber si ocurrio un error, si cerro el puerto, si se abrio.
Aqui estan las formas de generar los listeners es igual que con el listener de «data»:

sp.on(«error»,function(err){});
sp.on(«end»,function(){});
sp.on(«close»,function(){});
sp.on(«open»,function(){});

Dependiendo de como lo ocupes, los ejemplos que vienen en la documentacion oficial son con arduino pero se puede manipular cualquier aparato que genere un puerto serial, una impresora, una pesa, un modem de telcel, el unico asi inconveniente que habria es crear las librerias o drivers pero si te animas aprenderas mas.

No se si queda claro este post hace como 5 meses que lo iba a publicar pero por falta de tiempo no pude asi que si no se entiende pueden preguntarme a ver si se que ondas, ocurrieron muchos errores al querer utilizarlo no recuerdo bien cueles fueron pero los fui resolviendo asi que tengo algo de esa experiencia.

4 comments
  1. Bitacoras.com
    febrero 17, 2013 at 12:06 pm

    Información Bitacoras.com…

    Valora en Bitacoras.com: He andado pegandome un cierre con nodejs y su modulito de serialport, y al final gano el modulo jaja, el problema era del aparato de donde andaba queriendo sacar la informacion le enviaba un salto de linea segun yo era “\nâ….

    Reply
  2. Alejandro
    Alejandro
    octubre 3, 2015 at 7:34 am

    Hola Godie,

    Estoy muy interesado en este tema de comunicación puerto serial, y estoy haciendo pruebas de concepto con algunas herramientas, todavía no sé nada sobre node.js pero he leído y me parece interesante. Mi programa «hola mundo» es validarlo contra un terminal server. Tienes algún ejemplo para lograr esto.

    De antemano muchas gracias por tu colaboración.

    Saludos.

    Reply
    • godie
      godie • Post Author •
      octubre 7, 2015 at 1:44 pm

      No entiendo, pero si se ha de poder, no tengo ejemplo manco

      Reply
  3. Alejandro
    Alejandro
    marzo 17, 2016 at 9:53 am

    Que pena me equivoqué. Quise decir contra un hyperterminal. Porque todos los ejemplos que encuentro es contra un arduino.

    Gracias.

    Reply
Responder a AlejandroCancel

Your email address will not be published. Required fields are marked *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.