Implementación, con fines de demostración, de un panel (dashboard) domótico con Node-RED para proyectos de dómotica de bajo costo. Node-RED es una herramienta de desarrollo basada en flujo para programación visual desarrollada originalmente por IBM para conectar dispositivos de hardware, API y servicios en línea como parte de la Internet de las cosas. Proporciona un editor de flujo basado en navegador web, que se puede utilizar para crear funciones de JavaScript. Más en Wikipedia.
Arquitectura del sistema
El proyecto está basado en los siguientes componentes:
- Servidor: broker MQTT Mosquitto (cloud).
- Cliente: dashboard sobre Node-RED.
- Cliente: hardware con sensores de temperatura y humedad ambiente, y actuador.
Broker MQTT
El broker puede estar instalado en una Raspberry Pi o bien es posible utilizar algún broker público. En este caso utilizamos test.mosquitto.org que alberga públicamente un servidor/broker MQTT Eclipse Mosquitto.
El servidor escucha en los siguientes puertos:
1883
MQTT, unencrypted, unauthenticated1884
MQTT, unencrypted, authenticated8883
MQTT, encrypted, unauthenticated8884
MQTT, encrypted, client certificate required8885
MQTT, encrypted, authenticated8886
MQTT, encrypted, unauthenticated8887
MQTT, encrypted, server certificate deliberately expired8080
MQTT over WebSockets, unencrypted, unauthenticated8081
MQTT over WebSockets, encrypted, unauthenticated8090
MQTT over WebSockets, unencrypted, authenticated8091
MQTT over WebSockets, encrypted, authenticated
Para realizar pruebas es posible utilizar algún cliente desktop como MQTT Explorer.
Implementando un dashboard con Node-RED
Node-RED permite gestionar la recepción y envío de información a través de un broker MQTT, para poder comunicarse con los diferentes clientes del sistema (apps móviles, hardware, etc.). Además, permite diseñar y poner en línea un completo dashboard (o panel de control) con la posibilidad de insertar diferentes widgets tanto para mostrar como para enviar datos.
En este proyecto se utilizaron las siguientes dependencias:
Hardware
El hardware está basado en una placa NodeMCU (SoC ESP8266) aunque se puede utilizar sin problemas con placas basadas en el SoC ESP32. El diagrama pictórico de la versión con el SoC ESP8266 es el siguiente:
Hay dos versiones disponibles del firmware del SoC: una implementación en C++ mediante la API de Arduino, y otra con MicroPython.
Firmware Arduino API
La primera versión del firmware, en C++, se encuentra en el directorio ./hardware/fw_arduino
. Además, hay una versión funcional en línea sobre el SoC ESP32, disponible en Wokwi.
Para compilar, el proyecto necesita las siguientes dependencias:
Firmware MicroPython
La segunda versión del firmware, en MicroPython, se encuentra en el directorio ./hardware/fw_micropython
. Además, hay una versión funcional en línea sobre el SoC ESP32, disponible en Wokwi.
Para escribir código en MicroPython y poder cargar tanto el firmware (el interprete Python) como los scripts en la memoria del SoC, es posible utilizar Thonny.
Thonny es un entorno de desarrollo integrado gratuito y de código abierto para Python diseñado para principiantes. Fue creado por Aivar Annamaa, un programador estonio. Más en Wikipedia.
El script Python necesita para funcionar la siguiente dependencia:
umqtt es un cliente MQTT sencillo para MicroPython, que consta de dos submódulos: umqtt.simple y umqtt.robust. umqtt.robust está construido sobre umqtt.simple y agrega funciones de reconexión automática para lidiar con algunos errores de red.
Recursos
- ESP32 Pinout Reference: Which GPIO pins should you use?
- ESP8266 Pinout Reference: Which GPIO pins should you use?
- MicroPython
- Thonny Python IDE for beginners
Descargas
El proyecto completo está accesible en GitHub.