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 (despues 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 Infrarojo
  • 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

Despues de hacer algunas pruebas con los sensores se me ocurrió buscar si existia 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

const {Board, Led} = require("johnny-five");
const board = new Board();

board.on("ready", () => {
  const led = new Led(13);
  led.blink(500);
});

El resultado es el siguiente:

johnny-five led scene

En mi caso, no tengo un led (olvidé comprar xD) entonces lo que hice fue cambiar el led por un console.log

const {Board} = require("johnny-five");
const board = new Board();

board.on("ready", () => {
    console.log('Hello world from arduino uno')
});

Eso me retorna lo siguiente:


→ node hello
>> Hello world from arduino uno

its alive gif

Entonces, como ven esta funcionando... Ahora se me ocurre que podemos hacer algunas otras cosas quizas 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:

const { Board } = require('johnny-five')
const https = require('https')
const board = new Board({
    port: '/dev/ttyUSB0'
})

const options = {
    hostname: 'api.chucknorris.io',
    port: 443,
    path: '/jokes/random',
    method: 'GET'
}

board.on('ready', () => {

    const req = https.request(options, (res) => {
        console.log(`statusCode: ${res.statusCode}`)

        res.on('data', (d) => {
            let response = JSON.parse(d)
            console.log(response.value)
        })
    })

    req.on('error', (error) => {
        console.error(error)
    })

    req.end()
})

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:

→ node hello
>> statusCode: 200
Chuck Norris can cremate you instantly with a mean-ass death stare.

¡Funciona!

Visita la web de johnny-five.io para conocer más.