Arduino Uno con ¿JavaScript?
Tengo un Arduino Uno desde hace unos días, después de mucho tiempo queriéndolo, y he pasado el rato probando sensores y recordando mi época de la universidad con los microcontroladores.
El "combo" que tengo:
- ARDUINO UNO R3
- Sensor infrarrojo para obstáculos FC-51
- Zumbador buzzer 5V
- Llave interruptor basculante
- TCRT5000, sensor reflectivo infrarrojo
- Sensor de ultrasonido HY-SRF04
- Puente H L293D
- Microservo SG90 180°
- Sensor de temperatura y humedad DHT11
- Módulo relé KY-019, 10A, 5V, 1 canal
- Sensor de humedad
- Fotorresistor LDR 5528 de 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. Existe: Johnny-Five.

Johnny-Five es un proyecto para gente que viene del desarrollo web y empieza a jugar con Arduino, o para quien ya lo hace y quiere integrar un prototipo en una aplicación web. Corre sobre Node.js y programa el Arduino en JavaScript apoyándose en Firmata.
Antes de empezar, el estado del proyecto en 2026. Johnny-Five sigue funcionando, y lo he comprobado escribiendo esta actualización: instala y compila en Node 25. Pero su última versión publicada en npm es la 2.1.0, de julio de 2021, y el último commit en el repositorio es de marzo de 2023. No está archivado ni abandonado formalmente, pero lleva años quieto. Además arrastra
serialport ^8.0.5, cinco versiones mayores por detrás de la actual. Para trastear con un Arduino sigue siendo la opción más cómoda en JavaScript; para algo que tenga que durar en producción, cuenta con que esa dependencia nativa es lo primero que se puede romper al actualizar Node.
Hola mundo
Para este ejemplo necesitas:
- El Arduino con Firmata cargado. Con el Arduino IDE instalado, la ruta es
File > Examples > Firmata > StandardFirmata(oStandardFirmataPlus). - Node.js 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 este:

En mi caso no tengo un LED (olvidé comprarlo), así que lo cambié por un console.log:
const { Board } = require("johnny-five");
const board = new Board();
board.on("ready", () => {
console.log("Hello world from arduino uno");
});Y devuelve esto:
→ node hello
>> Hello world from arduino uno
Funciona. Y ya que estamos en Node, podemos aprovechar para hacer cosas que el Arduino solo no hace fácil, como una petición HTTP.
Una petición HTTP desde el script
El script pasa a ser este. Pide un chiste a la API de chucknorris.io y lo imprime cuando la placa está lista:
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}`);
let cuerpo = "";
res.on("data", (chunk) => {
cuerpo += chunk;
});
res.on("end", () => {
const respuesta = JSON.parse(cuerpo);
console.log(respuesta.value);
});
});
req.on("error", (error) => {
console.error(error);
});
req.end();
});Fíjate en cómo se lee la respuesta, porque es el detalle que más se hace mal: data puede dispararse varias veces, una por cada trozo que llega. Hay que ir acumulando y parsear el JSON en end, cuando ya está completo. Si haces JSON.parse dentro de data, funciona mientras la respuesta sea pequeña (esta son unos 340 bytes y cabe en un chunk) y revienta el día que crezca.
El port está fijado a mano porque en Linux mi placa aparece ahí. Si lo omites, Johnny-Five busca el dispositivo por su cuenta, que es lo normal.
Al ejecutarlo:
→ node hello
>> statusCode: 200
Chuck Norris can cremate you instantly with a mean-ass death stare.Visita johnny-five.io para conocer más.
Fuentes
- Johnny-Five, sitio oficial
- rwaldron/johnny-five, repositorio
- johnny-five en npm, donde se ve la fecha de la última versión
- firmata/arduino, la librería de Firmata y sus sketches de ejemplo
¿Tienes un proyecto en mente?
Trabajo con Laravel, WordPress, SEO técnico y servidores MCP. El primer paso es una llamada de descubrimiento, sin costo ni compromiso, donde me cuentas qué necesitas y te digo con honestidad si puedo ayudarte.