Arduino Uno con ¿javascript?
Este artículo tiene más de un año de antigüedad, el contenido pudiera estar obsoleto.
Si, podemos controlar un arduino con javascript usando johnny-five (aunque hay otras herramientas disponibles). Johnny Five es una gran herramienta que nos permite hacer cosas interesantes con nuestro arduino usando javascript de una forma muy sencilla y entretenida.
Hace unos días tengo un arduino uno (después de mucho tiempo queriendo tenerlo xD) y bueno, he pasado el tiempo probando los sensores y recordando mi época de la universidad con los micro controladores xD
El "combo" arduino que tengo:
- ARDUINO UNO R3
- Sensor Infrarrojo Para Obstáculos Arduino Fc 51
- Zumbador Buzzer Arduino 5v
- Llave Interruptor Basculante
- Tcrt 5000 Sensor Reflectivo Infrarrojo
- Sensor Ultrasonido Hysrf04
- Arduino, Puente HL293D
- MicroServo Sg 90 180°
- Sensor De Temperatura Y Humedad Dht11
- Modulo Rele Arduino 10a Ky-019 5 V 1 Canal
- Sensor De Humedad
- Fotoresistor Ldr 5528 5mm
Después de hacer algunas pruebas con los sensores se me ocurrió buscar si existía algo para node js que permitiera controlar el arduino.
Johnny-Five es un proyecto para aficionados al desarrollo web que empiezan a jugar con Arduino o para los que ya lo hacen y buscan integrar algún prototipo a una aplicación web, corre bajo un servidor Nodejs y esta pensado para programar Arduino en Javascript con ayuda del ya famosa “Firmata”.
Hola mundo
Para este ejemplo necesitaremos:
- Arduino pre cargado con Firmata y para esto tenemos que tener Arduino IDE instalado, la ruta para hacerlo es:
File > Examples > Firmata > StandardFirmata / StandardFirmataPlus
. - Nodejs con npm o yarn
- johnny-five
El ejemplo de la documentación de johnny-five es con un led
1const {Board, Led} = require("johnny-five");2const board = new Board();3 4board.on("ready", () => {5 const led = new Led(13);6 led.blink(500);7});
El resultado es el siguiente:
En mi caso, no tengo un led (olvidé comprar xD) entonces lo que hice fue cambiar el led por un console.log
1const {Board} = require("johnny-five");2const board = new Board();3 4board.on("ready", () => {5 console.log('Hello world from arduino uno')6});
Eso me retorna lo siguiente:
1→ node hello2>> Hello world from arduino uno
Entonces, como ven esta funcionando... Ahora se me ocurre que podemos hacer algunas otras cosas quizás no tan complejas pero podemos aprovechar que estamos usando node para hacer algunas cosas como una petición http (por ejemplo)
Para esta segunda parte del ejemplo vamos a necesitar https
y nuestro script pasa a ser lo siguiente:
1const { Board } = require('johnny-five') 2const https = require('https') 3const board = new Board({ 4 port: '/dev/ttyUSB0' 5}) 6 7const options = { 8 hostname: 'api.chucknorris.io', 9 port: 443,10 path: '/jokes/random',11 method: 'GET'12}13 14board.on('ready', () => {15 16 const req = https.request(options, (res) => {17 console.log(`statusCode: ${res.statusCode}`)18 19 res.on('data', (d) => {20 let response = JSON.parse(d)21 console.log(response.value)22 })23 })24 25 req.on('error', (error) => {26 console.error(error)27 })28 29 req.end()30})
En esta oportunidad haremos una petición al api de chucknorris.io para obtener un fact sobre Chuck Norris, si ejecutamos nuevamente nuestro archivo vamos a obtener algo como esto:
1→ node hello2>> statusCode: 2003Chuck Norris can cremate you instantly with a mean-ass death stare.
¡Funciona!
Visita la web de johnny-five.io para conocer más.