En esta guía aprenderemos a usar Node.js para comunicarnos con Arduino usando johnny-five un Framework JavaScript para robótica. A continuación una lista de requerimientos para poder seguir este tutorial:
- Node.js y NPM instalados y corriendo en nuestro ordenador, (Ver como instalar Node)
- Arduino IDE
- Placa Arduino UNO (o compatibles)
- 1 o más Leds
Preparando el Arduino
Node.js no puede comunicarse con arduino por si solo pues arduino por defecto se programa en lenguaje C, pero existe otra manera de controlar Arduino desde un software host en el ordenador sin necesidad de programar en el lenguaje nativo de la placa. Esto es posible a través de la librería Firmata. Firmata es un firmware que establece un protocolo de comunicación entre un programa en el ordenador y el Arduino.
Dicho lo anterior, necesitamos instalar el firmware Firmata en el Arduino, esto es muy simple, el Arduino IDE trae una serie de ejemplos listos para ser cargados en la placa Arduino, entre estos ejemplos tenemos el “StandardFirmata” el cual usaremos en este turorial. Para cargar firmata al arduino seguimos los siguientes pasos:
En el menu seleccionar: File > Examples > Firmata -> StandardFirmata
Cargar firmata a la placa arduino:
Hacer click en el botón “Upload”, una vez cargado el firmware puedes cerrar el Arduino IDE.
Solucionando problemas
En GNU/Linux es posible que el Arduino IDE tenga deshabilitado la opción para seleccionar el puerto serial y por lo tanto no poder manipular la placa Arduino conectada al ordenador. La siguiente imagen ilustra este problema:
Para solucionar este problema ejecuta lo siguiente en una terminal:
1 | $ sudo usermod -a -G dialout <usuario> |
Cierra e inicia sesión con tu usuario, el problema deberá estar solucionado!
‘Hola Mundo!’ con Arduino + Node.js
Vamos a construir el siguiente ejemplo:
Para comenzar vamos crear una carpeta e instalar el modulo johnny-five para comunicarnos con Arduino. Sigue los pasos a continuación:
1 | $ mkdir nodebots && cd $_ |
Dentro de la carpeta nodebots, crea un archivo llamado hello-world.js y agrega el siguiente código:
1 | var five = require(“johnny-five”), |
Conecta tu arduino a una fuente de energía y ejecuta lo siguiente:
1 | $ node hello-world.js |
El led comenzará a parpadear además en la terminal veras unos logs y la consola se volverá interactiva a la espera que teclees algun comando. Procedemos a detener el programa escribiendo .exit.
Felicidades!!! acabas de crear tu primer script con Node.js capaz de comunicarse con tu Arduino :)
Recapitulemos lo que hemos hecho:
Primero, hemos incluido el modulo johnny-five, con la palabra reservada require, que nos permite interactuar con arduino:
1 | var five = require(‘johnny-five’) |
Luego instanciamos la clase constructora five.Board que es parte del API de johnny-five, ver Board API
1 | var board = new five.Board(); |
Luego, agregamos un listener al evento ‘ready’, el listener es una función callback que se ejecuta cuando el evento ready sea emitido, esto será luego del evento ‘connect’ y cuando la instancia del objecto Board haya completado la inicialización del hardware.
1 | board.on(“ready”, function() { |
Dentro del callback, creamos un objeto que representa un led usando la clase constructora five.Led, ver Led API
1 | var led = new five.Led(13); |
Por último ejecutamos la función blink que hace parpadear nuestro led en el pin 13. A la función le pasamos como parámetro el intervalo de tiempo de parpadeo (milisegundos)
1 | led.blink(1000); |
Listo! hemos creado nuestro primer script usando Node.js y Arduino, ¿verdad que fue sencillo?
Compartimos acá el código fuente de este ejemplo que esta en nuestra pagina de github + un par de ejemplos básicos para que puedas probar en tu casa:
https://github.com/nodebots-sv/ejemplos-basicos
Si deseas estudiar más ejemplos, ve a la pagina oficial del proyecto johnny-five ahí encontraras mucha más información.
Si te gusto este sencillo tutorial, comparte este post y deja tus comentarios abajo, cualquier duda escríbenos.
¿Quieres unirte a la comunidad?
Encantados, síguenos en twitter @NodebotsSV, escríbenos a nodebots.sv@gmail.com y con gusto te responderemos.