Gateway Modbus a MQTT
Conecta equipos Modbus RTU por RS485 con MQTT, Home Assistant y Node-RED usando un Wemos D1 Mini.
ESP8266 · RS485 · WiFi · MQTT
Nivel intermedio · Proyecto experimental
Qué hace este proyecto
El gateway consulta los parámetros de un equipo Modbus y publica sus valores por MQTT. Su portal web permite configurar la red, el broker y los parámetros sin modificar el programa para cada registro. La versión desarrollada también permite enviar comandos MQTT para escribir en parámetros compatibles y comprobar el valor leído después de la escritura.
Equipo Modbus RTU → RS485 → Wemos D1 Mini → MQTT → Home Assistant / Node-RED
Materiales
- Wemos D1 Mini con ESP8266 y 4 MB de flash.
- Módulo RS485 de dirección automática compatible con alimentación y lógica de 3,3 V.
- Cable USB de datos, cables de conexión y alimentación adecuada.
- Un equipo Modbus RTU y su mapa de registros. En el proyecto utilizamos un HMI Delta DOP-107BV.
- Red WiFi, un broker MQTT y, opcionalmente, Home Assistant o Node-RED.
1. Conectar el módulo RS485
Realiza el cableado con los equipos apagados. Esta variante utiliza dirección automática: no controla señales DE/RE.
| Wemos D1 Mini | Módulo RS485 automático |
|---|---|
| D6 / GPIO12 (TX) | RX del módulo |
| D5 / GPIO14 (RX) | TX del módulo |
| 3V3 | VCC compatible con 3,3 V |
| GND | GND |
Conecta A y B al bus RS485 según la identificación y el manual de ambos equipos. No conectes otro maestro al mismo bus. No conectes directamente una salida lógica de 5 V al ESP8266. Los pines de la UART USB y D2 no se utilizan para Modbus en esta versión.
2. Preparar el firmware
La versión descrita corresponde a phase2.ino del proyecto ModbusMqttGateway. El ZIP del prototipo anterior no corresponde a esta versión.
Para compilar utilizamos ESP8266 Arduino Core 3.1.2, AsyncMqttClient 0.9.0, ESPAsyncTCP 1.2.2 y EspSoftwareSerial 8.0.1, junto con WiFi y LittleFS del core. Selecciona la placa Wemos D1 Mini y una partición que incluya LittleFS.
La descarga pública del firmware todavía no está disponible en esta página. Puedes consultar por la versión correspondiente al proyecto antes de comenzar el montaje.
3. Configurar WiFi y MQTT
En el primer arranque sin configuración, el equipo crea una red Modbus-XXXXXX. Conéctate usando la clave de configuración suministrada con el firmware y abre http://192.168.4.1.
Completa la red WiFi y los datos de tu broker MQTT: servidor, puerto y credenciales. Guarda la configuración. Después del reinicio, accede al portal mediante la IP que le asigne tu router.
Esta versión de laboratorio no incorpora TLS para MQTT ni autenticación HTTP. Utilízala en una red local controlada y no expongas el portal a Internet.
4. Configurar la comunicación Modbus
Esta versión trabaja a 9600 baud. La paridad y los bits de parada deben coincidir en todos los dispositivos del bus.
En la prueba con el Delta DOP-107BV utilizamos COM1 como RTU Slave, RS485, estación 1 y 9600 8E1. El gateway debe configurarse con paridad E y un bit de parada. Para otro equipo utiliza sus parámetros y mapa de registros.
5. Añadir un parámetro
Abre Administrar parámetros Modbus en el portal. Define nombre, unidad, dirección del esclavo, función, dirección del registro, tipo de dato, orden de bytes, escala, offset e intervalo de lectura.
Las direcciones del portal son decimales y base cero. No copies una referencia como 40001 sin comprobar cómo la expresa el manual del equipo.
Ejemplo del HMI utilizado: para leer $0, configura esclavo 1, FC03, dirección 0 y tipo U16. Comienza con un solo parámetro y un intervalo de 1000 ms; verifica el cambio de valor antes de añadir más.
El portal admite FC01/FC02 para bits y FC03/FC04 para registros. Permite aplicar valor = dato × escala + offset y configurar distintos formatos numéricos y órdenes de bytes.
6. Recibir los valores por MQTT
Cada parámetro tiene un identificador estable. Para la primera entidad, el topic de estado tiene esta estructura:
modbus/mb-XXXXXX/e1/stateSustituye mb-XXXXXX por el identificador de tu gateway y e1 por la entidad correspondiente. Los valores se publican con QoS 1 y sin retain. La disponibilidad del gateway se publica en su topic /availability.
7. Integrarlo con Home Assistant y Node-RED
Con la integración MQTT conectada al mismo broker y Discovery habilitado, Home Assistant puede descubrir los sensores y agruparlos bajo el dispositivo del gateway. El nombre se configura desde el portal.
En Node-RED, utiliza una entrada MQTT suscrita al topic del parámetro y conéctala primero a un nodo Debug. Comprueba que el mensaje coincide con el valor del HMI antes de añadir condiciones o acciones.
8. Enviar un valor al equipo
Los parámetros habilitados FC01 y FC03 admiten escritura cuando su configuración y el dispositivo lo permiten. FC02 y FC04 son de solo lectura.
Comando: modbus/mb-XXXXXX/e1/set
Resultado: modbus/mb-XXXXXX/e1/result
Estado: modbus/mb-XXXXXX/e1/stateEnvía el valor como texto, con retain desactivado, y espera el resultado antes del siguiente comando. Prueba únicamente sobre un registro destinado a pruebas. El estado se obtiene mediante una lectura real; no se actualiza de forma optimista.
9. Comprobar errores y tiempos de respuesta
Si una variable no responde, revisa cableado, esclavo, función, dirección, tipo de dato y paridad. Un timeout puede retrasar otras lecturas: reducir todos los intervalos no corrige un fallo de comunicación.
En nuestras últimas pruebas todavía aparecieron timeouts y respuestas inválidas con el HMI. La comunicación debe estabilizarse antes de usarla para automatizaciones que dependan de una respuesta rápida.
Alcance de esta versión
La configuración admite hasta 150 entidades y 16 esclavos. Esto no significa que puedan consultarse todos cada 250 ms: la velocidad efectiva depende del bus, las respuestas y los errores. No es una certificación de funcionamiento industrial ni continuo 24/7.
El scanner, los perfiles, el respaldo/restauración portable y las actualizaciones OTA siguen pendientes en esta versión.
Construye tu gateway
Consulta por los componentes y la versión del firmware para este proyecto.