Una herramienta que sigue facilitando las soluciones de IoT e industriales es Node-RED. Diseñada y construida por IBM, Node-RED es un motor de lógica gratuito y de código abierto que permite a programadores de cualquier nivel interconectar I/O físicos, sistemas basados en la nube, bases de datos y API’s. Los usuarios interactúan con Node-RED a través de un editor de flujo basado en navegador que hace que las integraciones de múltiples dispositivos y múltiples API sean tan fáciles como enlazar nodos en flujos fácilmente comprensibles.
Para aprender cómo puedes aprovechar mejor la flexibilidad y visualización de proyectos con Node-RED, sigue leyendo.
En este artículo instalaremos y ejecutaremos Node-RED en una Raspberry Pi para desarrollar y desplegar rápida y fácilmente tu próxima solución de IoT.
NOTA IMPORTANTE: Esta guía asume que tu Raspberry Pi ha sido configurada y ya está conectada a Internet y tiene Node-RED instalado. Si aún no está configurada, por favor consulta las siguientes guías:
Conexión a Internet - Guía de inicio rápido de la Fundación Raspberry Pi.
Requisitos
Raspberry Pi ya configurada y conectada a Internet
Sensor de temperatura 1-Wire - DS18B20
Led + Resistor de 330 Ω
Cables de puente macho - hembra
Protoboard
Configuración de Hardware
Cableado: Sensor de temperatura 1-Wire
El sensor de temperatura 1-Wire tiene diferentes versiones a la venta; una con un resistor integrado en el sensor y la otra sin él. Para este tutorial, trabajaremos con ambas versiones: con y sin resistores. No importa qué 1-Wire elijas para tu sistema, asegúrate de verificar que todas las conexiones estén correctamente basadas en los diagramas y fotos a continuación.
Con resistor - con conector grove
Por favor, sigue la tabla a continuación para hacer las conexiones correctas para tu sensor de temperatura 1-Wire con resistor.
Sin resistor integrado - sin conector grove
El resistor en esta configuración se utiliza como pull-up para la línea de datos y debe estar conectado entre el cable de datos y el cable de alimentación. Esto asegura que la línea de datos esté en un nivel lógico definido y limita la interferencia del ruido eléctrico si el pin se deja flotante.
Usa un resistor de 4.7kΩ (o 10kΩ) y sigue el diagrama a continuación para hacer las conexiones correctas. Ten en cuenta que los pines conectados en la Raspberry Pi son los mismos que se usan en la tabla anterior:
Cableado: LED
Por favor, sigue el diagrama a continuación para hacer las conexiones correctas para el LED y el resistor:
NOTA: La pata positiva del LED suele ser más larga, y es esta pata la que debe insertarse en el lado izquierdo de la protoboard (e1 en el diagrama).
Configurando Node-Red con Ubidots
Ubidots ya construyó una biblioteca de Node-RED que incluye dos nuevos “nodos” en la paleta para manejar datos desde/hacia el broker MQTT de Ubidots. Para instalar los nodos de Ubidots, simplemente sigue los pasos a continuación.
Iniciando Node-RED
1. Inicia Node-RED ejecutando el siguiente comando en tu terminal SSH de Node-RED:
node-red-start
1.1. Una vez que se inserte el comando, espera un par de segundos hasta que el servidor Node-RED comience a ejecutarse. Como puedes ver en la imagen a continuación, los registros de la terminal nos informan la IP del dispositivo y el puerto al que apuntará el servidor Node-RED.
El servicio está apuntando al puerto 1880: http://{tu_direccion_ip_pi}:1880
1.2. Una vez que el programa Node-RED haya comenzado, abre un navegador web de tu preferencia y en la barra de URL pega la dirección que se muestra en la primera línea principal de tu terminal Node-RED que dice “apunta un navegador a.”
1.3. En mi caso, accedo a la interfaz web de Node-RED usando http://10.0.0.29:1880. Cuando ejecutes la dirección URL en tu navegador, podrás visualizar la interfaz de Node-RED como se muestra a continuación:
Instalando los nodos de Ubidots
1. Selecciona el menú de Node-RED ubicado en la esquina superior derecha del encabezado. Luego, para agregar los nodos de Ubidots en la paleta, ve a “Gestionar paleta”
2. En la sección “Gestionar paleta”, podrás gestionar e instalar los nodos necesarios. Como se muestra a continuación:
2.1. Para instalar los nodos de Ubidots, ve a la pestaña “Instalar”.
2.2. Luego, busca ubidots usando la barra de búsqueda. Selecciona el botón instalar del que se llama “ubidots-nodered”:
2.3. Luego, presiona el botón “instalar” proporcionado en la ventana de advertencia, como se muestra a continuación:
3. Una vez que la instalación comience, comenzarás a recibir el siguiente comportamiento en la terminal de la Raspberry Pi:
Una vez que la instalación finalice correctamente, los siguientes registros se actualizarán:
4. Ahora, podrás ver la entrada y salida para los nodos de Ubidots:
Configurando nodos adicionales
Ahora que los nodos de Ubidots ya están en la paleta, es hora de instalar el nodo “node-red-contrib-sensor-ds18b20” que se encarga de las lecturas del sensor proporcionadas por el sensor conectado.
NOTA: Este nodo es compatible solo con el hardware de Raspberry Pi y solo lee los valores de temperatura del sensor.
Configuración de configuraciones del sensor
1. La interfaz para 1-Wire debe ser primero habilitada. Inserta el siguiente comando en la terminal de la Raspberry Pi para comenzar la habilitación de 1-Wire.
sudo raspi-config
1.1. Luego, en la siguiente ventana ve a Interfaces y luego a 1-Wire y habilita.
1.2. Para finalizar, reinicia la Raspberry Pi ejecutando el siguiente comando.
sudo su reboot
2. Luego, carga todos los módulos del kernel necesarios para trabajar con dispositivos 1-Wire. En el caso de esta demostración, utilizaremos el sensor 1-Wire DS1820. Para esto, ejecuta los siguientes comandos:
sudo modprobe w1-gpiosudo modprobe w1-therm
Instalando el nodo del sensor
Para instalar el nodo para el sensor DS18B20, sigue los mismos pasos que seguiste para instalar los nodos de Ubidots, pero ahora buscando “DS18B20”. Selecciona el botón de instalación para el nodo llamado “node-red-contrib-sensor-ds18b20”:
2. Una vez que el nodo finalice su instalación, ve a la paleta y verifica la sección de Raspberry Pi. Si se hizo correctamente, el nodo para el sensor estará correctamente incluido en la paleta:
Publicando datos en Ubidots
Si eres un aprendiz visual, consulta el video a continuación para completar la integración:
Para PUBLICAR datos en Ubidots, haz clic en el menú de Node-RED en la esquina superior derecha, luego en “Importar” -> “Portapapeles” y pega el código a continuación:
Portapapeles:
[{"id":"d4878a4.d875278","type":"ubidots_out","z":"a048c6a8.07ebb8","name":"RaspberryPiUbidots","token":"","label_device":"raspberry-pi","tier":"business","x":920,"y":120,"wires":[]},{"id":"963e0bcf.00a718","type":"sensor-ds18b20","z":"a048c6a8.07ebb8","name":" DS18B20 Sensor","topic":"","sensorid":"28-00000831ba40","timer":"5","repeat":false,"x":390,"y":120,"wires":[["126f50ec.4e76ff","949894af.040ba8"]]},{"id":"5941863d.c365c","type":"inject","z":"a048c6a8.07ebb8","name":"Activación de Lectura","topic":"","payload":"","payloadType":"date","repeat":"5","crontab":"","once":false,"onceDelay":0.1,"x":160,"y":120,"wires":[["963e0bcf.00a718"]]},{"id":"3e01e56e.b96b3a","type":"debug","z":"a048c6a8.07ebb8","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":930,"y":200,"wires":[]},{"id":"126f50ec.4e76ff","type":"function","z":"a048c6a8.07ebb8","name":"Parsear datos a objeto JSON","func":"var payload = msg.payload;\n\n/* Guarda las lecturas del sensor */\nvar temp_value_c = payload; // temperatura en celsius\nvar temp_value_f = (temp_value_c*1.8) + 32; // temperatura en fahrenheit\n\nvar data = {}\n/* Construye la carga útil a publicar */\ndata.payload = {\"temperature-c\": temp_value_c, \"temperature-f\": temp_value_f.toFixed(2)};\nreturn data;\n\n","outputs":1,"noerr":0,"x":660,"y":120,"wires":[["3e01e56e.b96b3a","d4878a4.d875278"]]},{"id":"949894af.040ba8","type":"debug","z":"a048c6a8.07ebb8","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":650,"y":200,"wires":[]}]
2. Con el código importado, el siguiente flujo debería aparecer:
3. Selecciona el nodo de Ubidots y configúralo con tu cuenta de Ubidots:
3.1. Selecciona el tipo de tu cuenta:
Ubidots : industrial.api.ubidots.com
3.2. Asigna el nombre deseado para el cliente MQTT. En este caso, RaspberryPiUbidots es el predeterminado.
3.3. Asigna tu TOKEN de Ubidots.
3.4. Asigna la etiqueta del dispositivo deseada para el dispositivo. En este caso, raspberry-pi es el predeterminado.
4. Una vez que los parámetros de tu nodo de Ubidots estén correctamente configurados, tendrás algo similar a lo siguiente. Para guardar los cambios, presiona el botón Listo.
5. Ahora es el momento de desplegar el flujo y publicar datos en la nube de Ubidots. Para esto, solo presiona el botón Desplegar ubicado en la esquina superior derecha.
6. El comportamiento presentado en el nodo de Ubidots después de desplegar el flujo se verá de la siguiente manera:
Conectando…
Publicado
7. [OPCIONAL] Si deseas depurar los mensajes entrantes de los nodos, puedes activar el nodo de depuración presionando el ícono de “tabs” ubicado en el lado derecho del nodo. Como puedes ver a continuación, el nodo ubicado en el lado izquierdo está desactivado mientras que el del lado derecho está activado.
Para verificar los mensajes de depuración, selecciona la pestaña de depuración en la consola de Node-RED:
8. Ve a la sección de Dispositivos de tu cuenta de Ubidots y verifica el nuevo dispositivo creado:
9. Si deseas cambiar el nombre del dispositivo a uno más amigable y no sabes cómo, consulta la siguiente guía. También puedes cambiar el ícono de descripción del dispositivo con esta simple guía.
Una vez que los nombres y los íconos estén actualizados a tu gusto, lanza tu aplicación a los usuarios finales utilizando Ubidots User Management.
Suscribiéndose a una variable de Ubidots
Si eres un aprendiz visual, consulta el video a continuación para completar la integración:
Desde el menú de Node-RED en la esquina superior derecha, selecciona “Importar” -> “Portapapeles.” Luego copia y pega el código proporcionado a continuación.
Portapapeles:
[{"id":"9e19ab92.655258","type":"ubidots_in","z":"1bc2b3f9.e25d3c","tier":"business","name":"RaspberryPiUbidots","token":"","label_device":"raspberry-pi","label_variable":"control","x":287,"y":290,"wires":[["aa56f39f.127be","65877a10.6f4fc4"]]},{"id":"aa56f39f.127be","type":"function","z":"1bc2b3f9.e25d3c","name":"Parsear valor de Ubidots","func":"var lastValue = msg.payload.value;\nmsg.payload = lastValue;\nreturn msg;","outputs":1,"noerr":0,"x":547,"y":290,"wires":[["c2ce4045.d20e5","7f3ca3e8.c7a3a4"]]},{"id":"c2ce4045.d20e5","type":"rpi-gpio out","z":"1bc2b3f9.e25d3c","name":"LED","pin":"11","set":"","level":"0","freq":"","out":"out","x":767,"y":290,"wires":[]},{"id":"65877a10.6f4fc4","type":"debug","z":"1bc2b3f9.e25d3c","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":547,"y":370,"wires":[]},{"id":"7f3ca3e8.c7a3a4","type":"debug","z":"1bc2b3f9.e25d3c","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":787,"y":370,"wires":[]},{"id":"a78c085c.6e3988","type":"inject","z":"1bc2b3f9.e25d3c","name":"","topic":"","payload":"{\"control\": 0}","payloadType":"json","repeat":"","crontab":"","once":true,"onceDelay":0.1,"x":267.5,"y":175.5,"wires":[["44bd18f.f127168"]]},{"id":"44bd18f.f127168","type":"ubidots_out","z":"1bc2b3f9.e25d3c","name":"RaspberryPiUbidots","token":"","label_device":"raspberry-pi","tier":"business","x":513.5,"y":176,"wires":[]}]
2. Asigna tu TOKEN de Ubidots donde se indica en ambos nodos de Ubidots.
3. Ahora es el momento de desplegar el flujo para comenzar a controlar el LED desde la nube de Ubidots. Presiona el botón Desplegar ubicado en la esquina superior derecha de tu interfaz de Node-RED.
4. El comportamiento presentado en el primer nodo de Ubidots es “Conectando...” luego “publicado”. En este punto, se crea una variable llamada "control" en el dispositivo creado previamente. Esta variable se utilizará para controlar tus dispositivos - en este caso un LED.
5. Ahora, para poder controlar tu dispositivo, necesitas crear un widget de control. Para esto, ve a la sección de Dashboard de tu cuenta de Ubidots y crea un nuevo widget de control. Presiona el ícono de más (+) ubicado en la esquina superior derecha, luego presiona Control > Interruptor > control (variable previamente creada) > Finalizar:
Luego, deberías poder interactuar con el widget de interruptor para comenzar a controlar el LED:
6. Podrás ver el estado del LED; si el valor es igual a 1, esto significa que el LED está ENCENDIDO, si el valor es igual a 0, esto significa que el LED está APAGADO:
7. [OPCIONAL] Si deseas depurar los mensajes entrantes de los nodos, puedes activar el nodo de depuración presionando la pestaña ubicada en el lado derecho del nodo. Como puedes ver a continuación, el nodo ubicado en el lado izquierdo está desactivado mientras que el del lado derecho está activado.
Para verificar los mensajes de depuración, selecciona la pestaña depuración en la consola de Node-RED.
8. ¡Ahora es el momento de probar todo! Cambia el estado del interruptor desde el Dashboard de Ubidots y observa cómo puedes controlar el LED de forma remota:
Personalizar visualización con Ubidots
Ahora que puedes publicar y suscribirte a datos desde/hacia Ubidots, es hora de crear tus Dashboards de Ubidots personalizados para visualizar, interpretar tus datos y controlar activos de forma remota.