Integración de Arduino con un API en Express
Aprende a integrar tu dispositivo Arduino de forma muy sencilla con un API de Express
Uno de los retos más importantes a los que me he enfrentado como desarrollador y que sin duda estoy seguro a más de uno de la ha pasado es la integración de diferentes tecnologías.
Por eso en esta ocasión vamos a hacer un pequeño ejemplo con Arduino y una aplicación web, para el caso de este artículo solamente integraremos por medio de un API de Express, dejando para otras entregas la integración por medio de React y Vue.
Johnny-Five
Es la plataforma para internet de las cosas y robótica escrita en Javascript. Lanzada por Bocoup en 2012, Johnny-Five es mantenida por una comunidad apasionado de desarrolladores y ingenieros de software.
Y en este caso la utilzaremos en conjunto con Express para desarrollar correctamente nuestra API.
Instalación de Johnny-Five e inicialización del proyecto
Es importante que tengamos instalado ExpressJS, les recomiendo instalar nvm para así tener flexibilidad a la hora de usar la versión de express que más nos convenga. Pueden checar la documentación en el siguiente enlace:
Vamos a utilizar la versión 8.12.0 de nodejs, esto con el objetivo de mantener una versión actualizada y estable, por eso la elección de este.
Con nvm vamos a asegurarnos de elegirla correctamente:
$ nvm install 8.12.0
Creamos nuestro proyecto que se llamará api-led e instalamos las dependencias necesarias para que funcione.
$ mkdir api-led
$ cd api-led
$ npm init # Este paso iniciará nuestro proyecto
... # Aquí vamos a configurarlo, es bastante sencillo hacerlo
... # Así es que lo dejo como ejercicio
$ npm install --save express johnny-five cors
Ahora vamos a conectar nuestro Arduino a nuestro equipo y ver si funciona.
Les pido de favor lean la documentación de Arduino e instalen todo lo necesario para que funcione en su equipo, el propósito de este tutorial es solamente mostrarles la integración por medio de un API en express con johnny-five.
Vamos a corregir un error que puede ocurrir al momento de querer integrar nuestro Arduino con nodejs, independientemente de la plataforma que tengamos.
Vamos a abrir la aplicación que trae por default Arduino e instalar las librerías necesarias.
Vamos a navegar en el menú > Sketch > Include Library > Manage Library
Y vamos a buscar la librería Firmata e instalarla, en mi caso ya la tengo instalada por eso en la imagen aparecerá así.
Eso corregirá cualquier error que aparezca en nuestro código, es importante que nuestros puertos seriales tengan los permisos necesarios.
Implementación de API
Para asegurarnos que todo salgo bien vamos a hacer un script súper sencillo para encender un LED, en este caso colocaremos el LED en el pin 13.
Vamos a conectar el LED y probar nuestro hola mundo
con Johnny-Five, escribiendo un script que permitirá hacer un blink de 3 segundos.
// hola-mundo.js
const five = require('johnny-five');
const board = new five.Board();board.on('ready', () => {
const led = new five.Led(13);
led.blink(3000);
});
Corremos el script en la consola ejecuntando el siguiente comando:
$ node hola-mundo.js
Integración con Express
Ya anteriormente habíamos instalado express y cors, ahora usaremos esas librerías. Creamos el archivo index.js
dentro de la raíz de nuestro proyecto y añadimos lo siguiente:
const five = require('johnny-five');
const express = require('express');
const cors = require('cors');
const board = new five.Board();
Ahora vamos a iniciar nuestro Arduino, mucho antes de crear el servidor, es importante que se haga de esta forma.
// Arriba se encuentra las dependencias
...
board.on('ready', () => {
... aquí se encontrará el código de nuestro servidor en express
});
Ahora, iniciamos el Pin que queremos usar y probamos que nuestra API funcione correctamente.
let led = new five.Led(13);const app = express();app.use(cors());app.get('/', (req, res) => res.send('Ready!'));app.listen(8080, () => console.log('Server on: localhost:8080');
Vamos a utilizar el siguiente endpoint con queries, para que sea más sencillo mandar peticiones, solamente serán peticiones GET, esto facilitará su uso.
// endpoint
localhost:8080/led
// queries
power
Utilzaremos switch para poder tener respuestas adecuadas a las peticiones, quedará de la siguiente forma:
...
app.get('/led', (req, res) => {
switch(req.query.power) {
case 'on':
led.on();
res.status(200).send('Led prendido');
break;
case 'off':
led.off();
res.status(200).send('Led apagado');
break;
default:
led.on();
res.status(200).send('Led prendido');
break;
}
});
Tenemos que enviar las siguientes peticiones:
// para prender el LED
GET http://localhost:8080/led?power=on// para apagar el LED
GET http://localhost:8080/led?power=off
Ahora vamos a probar nuestro LED.
Conclusión
Perfecto, hemos concluido, todo salió de maravilla, si te gustan mis artículos, no se te olvide seguirme en mis redes sociales.