Veamos unos ejercicios completos con todo lo aprendido durante el curso.
Este ejercicio consiste en el montaje de 15 nodos remotos basados en Wemos D1 mini que gestionaremos con Node-RED y 15 Raspberry Pi con un led y un pulsador cada una y que además ejecutarán Node-RED localmente.
Montaje
Esquema de conexión nodo Remoto Wemos D1 Mini basado en:
- Node-RED con Wemos D1 Mini: https://wiki.wemos.cc/products:d1:d1_mini
- Shield Relay: https://wiki.wemos.cc/products:d1_mini_shields:relay_shield
Esquema de conexión RAspberry Pi:
- Pin LED: 12 (GPIO 18)
- Pin Pulsador: 16 (GPIO 23) (Usando la resistencia interna de Pulldown)
Preparación
La programación de los nodos remotos basados en ESP8266 se hará mediante Node-RED ejecutado en cada Raspberry Pi, para ello se instalará un firmware que puede obtenerse de: https://github.com/jecrespo/Curso-Node-RED/blob/master/04-Ejercicio%20Final/firmware-Ejercicio_Final/firmware-Ejercicio_Final.ino.
NOTA: este firmware es para el nodo 14, pero en caso de que el nodo sea otro nº de nodo sustituir estas líneas, siendo X = 1, 2, 3, 4 ,5, 6, ….:
- const char* publish_10sec = «nodoX/dato10s»;
- const char* publish_60sec = «nodoX/dato60s»;
- const char* publish_reset = «nodoX/reset»;
- const char* subs_led = «nodoX/led»;
- const char* subs_rele = «nodoX/rele»;
- if (client.connect(«wemosd1mini187222X»,»usuario_mosquitto»,»password_mosquitto»))
Este firmware publica en un topic cada 10 segundos y en otro cada 60 segundos. Los topics son:
- nodoX/dato10s
- nodoX/dato60s
En caso de que el nodo se resete publica en el topic: nodoX/reset
Los nodos estás suscrito a dos topic:
- nodoX/led – enciende y apaga el led integrado de ESP8266
- nodoX/rele – enciende y apaga el relé
Para el control del LED y botón de Raspberry Pi, se hará mediante la programación en cada uno de los Node-RED de cada Raspberry Pi.
- RPiX/led – topic al que se suscribe para indicar si se enciende o apaga
- RPiX/pulsador – topic al que publica el estado: pulsado (1) o liberado (0)
Testeo del Sistema
Una vez configurado todo el sistema comprobar que cada nodo y Raspberry Pi está publicando los datos y funciona el control al modificar los valores de los topics a los que están suscritos.
Para ello usar un cliente MQTT como MQTT.fx:
- suscrito a los topics:
- nodoX/dato10s
- nodoX/dato60s
- nodoX/reset
- RPiX/pulsador
- publicando a los topics:
- nodoX/led
- nodoX/rele
- RPiX/led
Una vez comprobado que leo los valores que publican los nodos y que puedo modificar el estado de los leds y relé publicando en los topics, pasamos a programar el sistema completo usando Node-RED.
Todo el código de los ejercicios: https://github.com/jecrespo/Curso-Node-RED/tree/master/04-Ejercicio%20Final
Ejercicio 1 – Dashboard
Configura Node-RED para que se vea un dashboard “Home” con tres grupos:
- Suscripciones: las 3 suscripciones y botón que resete los valores
- Pulsadores: dos botones para encender led y relé de nodo remoto
- RPi: un pulsador que maneje el LED de la RPi y un gauge con el estado del pulsador.
Además al pulsar el pulsador encender el led detectando flaco, una pulsación enciende y otra pulsación apaga.
La configuración en Node-RED es:
Ejercicio 2 – Interacción por Grupos
Crear un nuevo grupo del dashboard Home llamado “Control Relés” con 3 botones que encienda:
- Botón 1: controla relés 1, 2, 3, 4, 5
- Botón 2: controla relés 6, 7, 8, 9, 10
- Botón 3: controla relés 11, 12, 13, 14, 15
Dashboard
Nodos
Ejercicio 3 – Seguridad
Poner un pin para encender los Reles, de forma que si no hay pin no se puede encender desde el dashboard. Simular una cerradura de forma que al poner el pin correcto se abre y luego a los 5 segundos se cierra.
Mostar en el dashboard el estado de la cerradura.
Crear un tab nuevo en el dashboard llamado pin de seguridad
Basarse en el flujo: https://flows.nodered.org/flow/7bcb0b049df4fa3c962294137ebaec19
Hacer el flujo como un subflow.
Dashboard
Flujo
Subflow
Código:
- flow: https://github.com/jecrespo/Curso-Node-RED/blob/master/04-Ejercicio%20Final/Ejercicio_3/Ejercicio_3.json
- subflow: https://github.com/jecrespo/Curso-Node-RED/blob/master/04-Ejercicio%20Final/Ejercicio_3/Ejercicio_3-subflow.json
Ejercicio 4 – Email y SMS
Hacer un formulario en el dashboard para mandar un correo electrónico y otro para mandar un SMS usando el servicio de Twilio: https://www.twilio.com/
Dashboard
Flujo
Luego usar esta configuración para enviar un correo y un SMS cuando se pulse el botón de la Raspberry Pi y el relé del nodo remoto 14 esté encendido, viéndolo en un dashboard.
Ejercicio 5 – Imágenes
Coger mediante Node-RED la imagen publicada en http://www.aprendiendoarduino.com/servicios/imagen.jpg y que se actualiza cada 30 segundos en el servidor.
Mostrar la imagen en el dashboard y su información.
Publicar en el topic raspberrypi/image la imagen por MQTT para poder reutilizarla.
Mandar la imagen por email al pulsar un botón.
Dashboard
Flujo
Probar con otros servicios online a coger vídeo o imagen y tratarlo en Node-RED
Ejercicio 6 – Twitter
Hacer un flujo que tuitee algo. Para ello es necesario darse de alta en: https://developer.twitter.com/en/apps
Hacer un flujo que monitorice un hashtag (p.e. #Rioja), lo publique en cloudMQTT y lo guarde en una BBDD MySQL.
Flujo
Ejercicio 7 – Open Weather Map
Usando el node de OpenWeatherMap, hacer un dashboard con la temperatura, humedad y presión donde se actualice el dato en un gauge y se haga una gráfica que muestre los últimos 7 días.
Mandar el dato de la temperatura a los nodos remotos, para ello publicar en el topic “nodoX/temperatura” el dato de temperatura y comprobar que llegan, para ello modificar el firmware para que los nodos remotos estén suscritos y lo muestren por el puerto serie.
Hacer un botón para que mande la predicción de los próximos 5 días al correo electrónico.
Dashboard
Flujo
Ejercicio 8 – Telegram
Hacer un bot de Telegram con Node-RED que mande mensajes a grupos o canales y que responda a determinados comandos.
Para crear un bot de telegram: https://core.telegram.org/bots
Para añadir comandos al bot:
- /setcommands
- @aprendiendoarduino_bot
Pasar los comandos:
help – Ayuda
start – Inicio
enciende – Enciende Led
apaga – Apaga led
lee – Muestra datos broker
Y ya tengo los comandos configurados:
- /help
- /start
- /enciende
- /apaga
- /lee
Para configurar el bot en Telegram solo hace falta poner el nombre del bot y el token.
Crear un canal o un grupo y hacer un flujo sencillo que al pulsar mande un un mensaje por Telegram a tu usuario y a al grupo o canal.
Ahora queda que desde Node-RED lea los comandos y responda. Al mandar el comando /enciende el LED de la Raspberry Pi al mandar el comando /apaga el LED de la Raspberry Pi. El comando /lee me devuelve el estado del LED.
Una forma de hacer esto es publicando el el topic /raspberrypi/led el valor ON u OFF y ya tengo otro flujo hecho en el ejercicio 1.
Para saber el estado, se puede guardar en una variable de flujo que se actualiza con el topic /raspberrypi/led de forma que no solo cuando modifico desde el bot sino desde otros lugares.
Flujo
Pingback: Saber más Curso Raspberry Pi y Node-RED | Aprendiendo Arduino