Node-RED y MQTT con Wemos D1 Mini
Capturar los datos mandados por los nodos remotos por MQTT.
Sólo tienes que arrastrar el nodo mqtt que está en la categoría input al flujo.
Ahora hay que configurarlo. Aquí es donde vemos la potencia de Node-RED. En el caso de MQTT lo único que tenemos que hacer es configurar el broker y el topic.
Al tratarse de un nodo de entrada, lo que hace es recibir los mensajes publicados en un topic es decir, se suscribe al topic. Haz doble click sobre el nodo para que abra el panel de configuración.
En el panel de configuración MQTT vamos a configurar primero el broker MQTT. Haz click en el lápiz que aparece en Server.
Esto abre un nuevo panel de configuración. Pon un nombre al broker MQTT por ejemplo RASPBERRY PI MOSQUITTO. En Server tienes que poner la IP donde está instalado el broker MQTT y el puerto que utiliza, normalmente es el 1883.
Esta sería la configuración mínima. No te olvides de hacer click en el botón Add.
Después de esta acción volverás al panel de configuración del nodo mqtt y automáticamente, habrá seleccionado el broker MQTT que acabamos de crear.
Por último, vamos a rellenar el campo de Topic. Debe ser el mismo que hemos puesto en Arduino o el ESP8266, /casa/puerta/alarma. Una vez lo tengas, haz click en Done.
Ahora sólo nos queda probarlo. Para ello vamos a utilizar el mismo nodo debug de la categoría output que hemos utilizado antes.
Arrástralo al flujo, conecta los dos nodos y haz click en el botón Deploy.
Para probar el sistema lo podemos hacer de dos formas. Desde una terminal de Raspberry Pi podemos publicar un mensaje en el topic o directamente conectando la placa y simulando que abren la puerta.
El resultado sería el siguiente.
Otro ejemplo mucho más completo con Lego: http://www.internetoflego.com/lego-train-automation-wifi-controlled-nodemcu-esp8266/
Cargar Datos de Raspberry Pi a MQTT
Mandar cada 10 segundos los datos de CPU, Memoria y temperatura de la Raspberry Pi por MQTT al topic: cursomqtt/raspberrypixx/{CPU/Memoria/Temperatura}
Código para obtener los datos de Raspberry Pi, usando en nodo exec:
[{"id":"af22b399.12614","type":"exec","z":"8a81314e.a0f79","command":"vcgencmd measure_temp","addpay":false,"append":"","useSpawn":"","timer":"","name":"RPi Temp.","x":325.2221908569336,"y":46.33333683013916,"wires":[["14f0a295.59181d"],[],[]]},{"id":"408435c9.447fec","type":"exec","z":"8a81314e.a0f79","command":"top -d 0.5 -b -n2 | grep \"Cpu(s)\"|tail -n 1 | awk '{print $2 + $4}'","addpay":false,"append":"","useSpawn":"","timer":"","name":"CPU Load","x":325.2221908569336,"y":126.33333683013916,"wires":[["2c7475c7.6cc01a"],[],[]]},{"id":"8fbcbdf9.549b7","type":"exec","z":"8a81314e.a0f79","command":"free | grep Mem | awk '{print 100*($4+$6+$7)/$2}'","addpay":false,"append":"","useSpawn":"","timer":"","name":"Free Memory","x":325.2222099304199,"y":190.55557250976562,"wires":[["daf6433c.bad81"],[],[]]},{"id":"14f0a295.59181d","type":"function","z":"8a81314e.a0f79","name":"","func":"str = msg.payload\nmsg.payload = str.substring(5,9);\nreturn msg;","outputs":1,"noerr":0,"x":471.888858795166,"y":33.00000190734863,"wires":[["46daa272.4333ac","334a9ddd.345602"]]},{"id":"daf6433c.bad81","type":"function","z":"8a81314e.a0f79","name":"","func":"str = msg.payload\nmsg.payload = parseInt(str.substring(0,str.length - 1));\nreturn msg;","outputs":1,"noerr":0,"x":530,"y":180,"wires":[["1ba39571.ba75ab"]]}]
Flujo:
Ejemplo con Nodos Remotos
Vamos a usar los Wemos D1 mini, para integrarlos como nodos remotos y programarlos desde Node-RED.
- wemos D1 mini: https://www.wemos.cc/en/latest/d1/d1_mini.html
- shield para wemos D1 mini relé: https://www.wemos.cc/en/latest/d1_mini_shield/relay.html
- shield para wemos D1 mini neopixel: https://www.wemos.cc/en/latest/d1_mini_shield/rgb_led.html
- shield para wemos D1 mini oled: https://www.wemos.cc/en/latest/d1_mini_shield/oled_0_66.html
- shield para wemos D1 mini DHT: https://www.wemos.cc/en/latest/d1_mini_shield/dht.html
- shield para wemos D1 mini DS18B20: http://www.esp8266learning.com/wemos-mini-compatible-ds18b20-shield.php
- shield para wemos D1 mini BMP180: http://www.esp8266learning.com/wemos-mini-bmp180-shield.php
- shield para wemos D1 mini Matrix LED: https://www.wemos.cc/en/latest/d1_mini_shield/matrix_led.html
- shield para wemos D1 micro SD: https://www.wemos.cc/en/latest/d1_mini_shield/micro_sd.html
Esquema:
Firmware de uso de cada shield:
- Relay: https://github.com/jecrespo/Curso-Node-RED/blob/master/Remote%20Nodes%20Firmware/Wemos%20Shields%20Usage/Relay%20Shield/BlinkWithoutDelay/BlinkWithoutDelay.ino
- NeoPixel: https://github.com/jecrespo/Curso-Node-RED/blob/master/Remote%20Nodes%20Firmware/Wemos%20Shields%20Usage/NeoPixel/simple/simple.ino
- oled: https://github.com/jecrespo/Curso-Node-RED/blob/master/Remote%20Nodes%20Firmware/Wemos%20Shields%20Usage/oled/message/message.ino
- DHT: https://github.com/jecrespo/Curso-Node-RED/blob/master/Remote%20Nodes%20Firmware/Wemos%20Shields%20Usage/DHT/simple/simple.ino
- DHT + oled: https://github.com/jecrespo/Curso-Node-RED/blob/master/Remote%20Nodes%20Firmware/Wemos%20Shields%20Usage/DHT_oled/DHT_oled.ino
- DS18B20: https://github.com/jecrespo/Curso-Node-RED/blob/master/Remote%20Nodes%20Firmware/Wemos%20Shields%20Usage/DS18B20/temperatura/temperatura.ino
- DS18B20 + oled: https://github.com/jecrespo/Curso-Node-RED/blob/master/Remote%20Nodes%20Firmware/Wemos%20Shields%20Usage/DS18B20_oled/DS18B20_oled.ino
- BMP180: https://github.com/jecrespo/Curso-Node-RED/blob/master/Remote%20Nodes%20Firmware/Wemos%20Shields%20Usage/BMP180/simple/simple.ino
- BMP180 + oled: https://github.com/jecrespo/Curso-Node-RED/blob/master/Remote%20Nodes%20Firmware/Wemos%20Shields%20Usage/BMP180_oled/BMP180_oled.ino
- Matrix LED: https://github.com/jecrespo/Curso-Node-RED/blob/master/Remote%20Nodes%20Firmware/Wemos%20Shields%20Usage/Matrix_LED/efecto/efecto.ino
El firmware para los nodos remotos:
- BÁSICO: https://github.com/jecrespo/Curso-Node-RED/blob/master/Remote%20Nodes%20Firmware/basic-node/basic-node.ino
- BÁSICO SEGURO CON MQTT SOBRE TLS: https://github.com/jecrespo/Curso-Node-RED/blob/master/Remote%20Nodes%20Firmware/basic-node-secure/basic-node-secure.ino
- RELAY: https://github.com/jecrespo/Curso-Node-RED/blob/master/Remote%20Nodes%20Firmware/relay-node/relay-node.ino
- OLED: https://github.com/jecrespo/Curso-Node-RED/blob/master/Remote%20Nodes%20Firmware/oled-node/oled-node.ino
- LEDS rgb: https://github.com/jecrespo/Curso-Node-RED/blob/master/Remote%20Nodes%20Firmware/rgb-node/rgb-node.ino
- DHT: https://github.com/jecrespo/Curso-Node-RED/blob/master/Remote%20Nodes%20Firmware/temp-node/temp-node.ino
- BMP180: https://github.com/jecrespo/Curso-Node-RED/blob/master/Remote%20Nodes%20Firmware/bmp-node/bmp-node.ino
- DS18B20: https://github.com/jecrespo/Curso-Node-RED/blob/master/Remote%20Nodes%20Firmware/DS18B20-node/DS18B20-node.ino
- Matrix Led: https://github.com/jecrespo/Curso-Node-RED/blob/master/Remote%20Nodes%20Firmware/Matrix-node/matrix-node.ino
- DHT11 + RELAY NODE: https://github.com/jecrespo/Curso-Node-RED/blob/master/Remote%20Nodes%20Firmware/DHT-RELAY-NODE/DHT-RELAY-NODE.ino
- BMP + OLED NODE: https://github.com/jecrespo/Curso-Node-RED/blob/master/Remote%20Nodes%20Firmware/BMP-OLED-NODE/BMP-OLED-NODE.ino
- DS18B20 + RELAY: https://github.com/jecrespo/Curso-Node-RED/blob/master/Remote%20Nodes%20Firmware/DS18B20-relay-node/DS18B20-relay-node.ino
- DS18B20 + OLED: https://github.com/jecrespo/Curso-Node-RED/blob/master/Remote%20Nodes%20Firmware/DS18B20-oled-node/DS18B20-oled-node.ino
Probar cada firmware y hacer un programa sencillo para interactuar con ellos.
Firmware de otros nodos remotos: https://github.com/jecrespo/Curso-Node-RED/tree/master/Remote%20Nodes%20Firmware/Firmware%20M5Stack%20Varios
- M5Atom Matrix: https://m5stack.com/collections/m5-atom/products/atom-matrix-esp32-development-kit
- M5Stack Basic: https://m5stack.com/collections/m5-core/products/basic-core-iot-development-kit
- M5StickC: https://m5stack.com/collections/m5-core/products/stick-c
- M5StickC-Plus: https://m5stack.com/collections/m5-core/products/m5stickc-plus-esp32-pico-mini-iot-development-kit
- M5Stack código VS Code: https://github.com/jecrespo/M5stack
Completos tutoriales:
- https://randomnerdtutorials.com/esp8266-and-node-red-with-mqtt/
- https://randomnerdtutorials.com/esp8266-multisensor-shield-with-node-red/
Topic Map
El topic map del firmware de los dispositivos es:
- cursomqtt/nombre}/dato10s – publica mensaje numerado cada 10s
- cursomqtt/{nombre}/dato60s – publica mensaje numerado cada 60s
- cursomqtt/{nombre}/reset – publica mensaje cada reset o inicio
- cursomqtt/{nombre}/led – suscrito (1 led ON, otro valor led OFF)
- cursomqtt/{nombre}/text – suscrito (muestra el mensaje por pantalla)
- cursomqtt/{nombre}/rele – suscrito (1 relé ON, otro valor relé OFF). Firmware relé
- cursomqtt/wemos/oled – suscrito (muestra el mensaje por pantalla oled). Firmware oled
- cursomqtt/{nombre}/temperatura – publica dato temperatura cada 10 segundos. Firmware DS18B20
- cursomqtt/{nombre}/matrix – suscrito (0 efecto y apaga, de 1 a 8 ilumina de 1 a 8 líneas de matriz ). Firmware matrix.
- cursomqtt/raspberrypi/{nombre}/CPU – publica Node-RED el datos de CPU
- cursomqtt/raspberrypi/{nombre}/Temperatura – publica Node-RED el datos de temperatura procesador
- cursomqtt/raspberrypi/{nombre}/Memoria – publica Node-RED el datos de memoria libre
- casa/wibeee/# – datos eléctricos de Wibeee
- casa/m5atom/enrique/aviso – suscrito (“alarma” – leds rojos, “aviso” – leds amarillos, “ok” – leds verdes, otro mensaje apaga)
- casa/m5atom/enrique/boton – al pulsar publica “press” o “longpress”
- casa/m5stack/A – al pulsar botón A publica “press”
- casa/m5stack/B – al pulsar botón B publica “press”
- casa/m5stack/C – al pulsar botón C publica “press”
- casa/m5stack/led – suscrito (1 dibuja en pantalla círculo rojo, otro valor dibuja en pantalla círculo verde)
- casa/m5stack/text – suscrito, muestra por pantalla el texto
- casa/m5stick/temperatura – publica dato temperatura cada 1 segundo
- casa/m5stick/humedad – publica dato humedad cada 1 segundo
- casa/m5stick/presion – publica dato presión cada 1 segundo
- casa/m5stickplus/distancia – publica dato distancia cuando se activa
- casa/m5stickplus/button – al pulsar botón publica “press”
- casa/m5stickplus/led – suscrito (1 led ON, otro valor led OFF)
- casa/m5stickplus/label – suscrito (“red” – circulo rojo, “yellow” – circulo amarillo, “green” – circulo verde, “black” – círculo verde)
Publicar en MQTT desde Node-RED
Publicar desde Node-RED en diversos topics para encender
Cada firmware ya está configurado para solo configurar el topic donde va a publicar y el topic al que se suscribe:
- RELE: Paso ON y OFF
- OLED: Paso el string que va a mostrar por pantalla
- LEDS: 7 topics donde paso el color en formato RGB y el brillo
Probar diferentes publicaciones en diferentes topics para encender/apagar los relés, encender/apagar leds y mandar mensajes a las pantallas.
Ejemplos a programar con Node-RED
- Al leer una pulsación un botón de los M5stick, se enciende un relé.
- Al superar una temperatura mandar un mensaje de alerta
- Mandar a las pantallas oled los datos de CPU u otras mediciones
- En función de la distancia encender más o menos leds de wemos
- Cuando un nodo se desconecte mandar un mensaje a una pantalla
Consola MQTT en Dashboard
Instalar Dashboard de Node-RED: https://flows.nodered.org/node/node-red-dashboard
Crear un dashboard y un grupo.

Usar los siguientes nodos de Dashboard y añadir a los grupos:
- gauge: para mostrar mediciones como la temperatura o la CPU
- chart: para mostrar gráfica de mediciones
- switch: para encender y apagar leds y reles
- slider: para encender leds y aumentar la intensidad de los leds
- text input: para mandar mensajes a las pantallas
- text: para mostrar datos de topics
Pingback: MQTT y Node-RED -
Pingback: Diario del Curso IoT, Smart Cities y Node-RED | Aprendiendo Arduino
Pingback: Diario Curso: Raspberry Pi y Node-RED. 2ª ed | Aprendiendo Arduino