Comunicación serial entre processing/arduino y node.js

@NodeBotsMX

@_JuraseC

Julio César Rodríguez

Nodebots enthusiast

¿Qué es la comunicacíon serial?

Un bit de información a la vez.

IDE de arduino lo usa para cargar los sketches.

El puerto serial de Arduino ó UART (universal asynchronous receiver transmitter)

  • Receptor RX     => pin 0
  • Transmisor TX => pin 1
  • Los leds RX y TX, parpadean cuando el puerto serial esta siendo usado.

¿Cómo Enviar/recibir datos al puerto serial con el IDE de arduino?

¿Cómo enviar datos al puerto serial desde processing/arduino?

¿Cómo recibir datos al puerto serial desde processing/arduino?

Y ahora como lo integro con node.js .... ?

var serialport = require("serialport");

var SerialPort = serialport.SerialPort

var serialport = new SerialPort("/dev/tty.usbmodem1451",{
  baudrate: 9600,
});
$ npm install serialport
  • Necesitamos instalar serialport:
  • Para usarlo, hacemos:
  • Siempre debemos espera que este listo el puerto serial, para leer/escribir en el.
serialPort.on("open", function () {
  console.log('open');
  serialPort.on('data', function(data) {
    console.log('data received: ' + data);
  });
  serialPort.write("ls\n", function(err, results) {
    console.log('err ' + err);
    console.log('results ' + results);
  });
});

Ejemplos

  • Desde processing a node
  • Desde node a processing
  • Matris de led RGB 
  • Arbol de navidad con strip led rgb

Ejemplo 1: Lectura de sensor de fuego

/**
 * Este ejemplo muestra como leer datos del puerto serial, 
 * los cuales estan siendo enviados desde código de arduino
 * nativo.
 * @_JuraseC
 */
var serialport = require("serialport");
var SerialPort = serialport.SerialPort
var serialport = new SerialPort("/dev/tty.usbmodem1451",{
  baudrate: 9600,
  parser: serialport.parsers.readline("\n")
});

serialport.on('open', function(){
  console.log('Serial port ready!!!');
  var barra = "◼";
  serialport.on('data', function(data){
      // console.log(data);
      barra = "◼";
      for(i=0;i<=scale(0, 100, data);i++)
        barra = barra + "◼";
      console.log(barra);
  });  
});

function scale(newMinValue, newMaxValue, currentValue){
  var oldMinValue = 0;
  var oldMaxValue = 1023;
  return parseInt((currentValue / ((oldMaxValue - oldMinValue) / (newMaxValue - newMinValue))) + newMinValue);
};

Ejemplo 2: Control de 6 leds

/**
 * En este ejemplo se muestra como enviar datos a
 * nuestro arduino el cual esta ejecutando código
 * nativo, este sketch esta escuchando en el
 * puerto Serial.begin(14400);
 */

var serialport = require("serialport");
var Repl = require("./repl");
var SerialPort = serialport.SerialPort
var serialport = new SerialPort("/dev/tty.usbmodem1451",{
  baudrate: 14400,
  parser: serialport.parsers.readline("\n")
});

// Se agrega el objeto serialport al contexto del Repl
this.repl = new Repl({sp: serialport});

function sendCommnad(){;
  console.log("Enviando comando >>> ", (process.argv[2] || "t1"));
  serialport.write( new Buffer( process.argv[2] || "t1") );
}

serialport.on('open', function(){
  console.log('Serial Port Opened');  
  
  setTimeout( function(){ sendCommnad(); }, 2000);
});

Ejemplo 3 y 4: Control de matris RGB y Strip led RGB

/**
 * Con este ejemplo, podemos manipular el texto mostrado en 
 * la matris rgb. Tambien nos servirá para contrlar la tira
 * de led rgb.
 */

var serialport = require("serialport");
var Repl = require("./repl");
var SerialPort = serialport.SerialPort
var serialport = new SerialPort("/dev/tty.usbmodem1451",{
  baudrate: 14400,
  parser: serialport.parsers.readline("\n")
});

this.repl = new Repl({sp: serialport});

function sendCommnad(){;
  console.log("Enviando comando >>> ", (process.argv[2] || "???"));
  serialport.write( new Buffer( process.argv[2] || "???") );
}

serialport.on('open', function(){
  console.log('Serial Port Opened');  
  
  setTimeout( function(){ sendCommnad(); }, 2000);
});

Recuerda que tu eres parte de la comunidad de @NodeBotsMX y también de @javascriptmx, suscrbete al boletín semanal!!!

javascriptmx.com

Happy hacking!

Gracias!

@_JuraseC

Processing_node_serialport

By Julio César

Processing_node_serialport

  • 1,504