MQTT en M-Duino con OpenPLC

Guía paso a paso para configurar MQTT en M-Duino PLC con OpenPLC — configura nodos maestro y esclavo para publicar y recibir mensajes MQTT por Ethernet con Node-RED
19 de junio de 2026 por
Boot & Work Corp. S.L, Arnau Tena

En este post, configuraremos un M-Duino como esclavo MQTT y un ordenador como maestro. Primero configuraremos el M-Duino para enviar el valor de I0.0 al maestro; después veremos cómo configurarlo para recibir información.

Tutoriales previos de OpenPLC para programar MQTT en M-Duino

Este post forma parte de una serie de posts sobre OpenPLC en Arduino y M-Duino. Si aún no te has familiarizado con el software, te recomendamos que repases los posts anteriores primero:

First steps with OpenPLC

Modbus on Arduino with OpenPLC

OpenPLC on M-Duino 42+

Mapping any M-Duino on OpenPLC

Configurar el maestro M-Duino para recibir mensajes MQTT en OpenPLC

Para el maestro, crearemos un flujo sencillo en Node-RED para leer los mensajes enviados por el M-Duino. Añade un nodo "mqtt in" y conéctalo a un nodo de texto para ver el mensaje recibido en el dashboard. También puedes añadir un nodo de depuración para ver el mensaje en el terminal de debug.

Si aún no te has familiarizado con Node-RED y MQTT, te recomendamos que hagas este curso gratuito:

Develop your SCADA Application based on Node-RED

Configurar el esclavo M-Duino para publicar mensajes MQTT en OpenPLC

Partiremos del ejemplo MQTT_Send incluido en OpenPLC. Ve a File > Tutorials and Examples y abre el ejemplo MQTT_Send.

Primero configuraremos las variables. Crea tres nuevas variables llamadas "broker", "topic" y "msg". Asigna el tipo string a "broker" y "topic", y el tipo bool a "msg". Las ubicaciones serán %QX0.0 para "blink_led", %IX0.0 para "msg" y %QX0.1 para "mqtt_connected". El valor inicial de "broker" será la IP del maestro; en nuestro caso, "10.10.10.60". Para "topic", asigna el valor inicial "test". La tabla de variables debe quedar así:

Ahora debes modificar el diagrama ladder. Conecta "broker" al pin "BROKER" de "MQTT_CONNECT0" y "topic" al pin "TOPIC" de "MQTT_SEND0". Para conectar "msg" al pin "MESSAGE" necesitarás un bloque de función que lo convierta de bool a string. Añade un bloque de función trigger entre el contacto "blink_led" y el pin "SEND" para evitar que el mensaje se envíe continuamente cuando "blink_led" está activo.

El diagrama ladder resultante se conectará al broker y encenderá el LED Q0.1 del M-Duino si la conexión es correcta. Después enviará el valor de la señal recibida en I0.0 al maestro por MQTT. Este proceso se repetirá cada segundo.

Para compilar y cargar el código correctamente necesitas hacer dos cosas:

  • The first is to correctly map your M-Duino in the OpenPLC Editor. This is explained in the post Mapping any M-Duino on OpenPLC linked above. 
  • La segunda es habilitar Modbus TCP Ethernet. No vamos a usar Modbus TCP, pero al habilitarlo también se activan las funcionalidades necesarias para usar MQTT por Ethernet. Para ello, ve a la pestaña de comunicaciones en el menú "Transfer Program to PLC" y configúralo. En nuestro caso usamos 10.10.10.70 como IP, pero puedes usar cualquier IP.

Tras eso, deberías poder cargar el código en el M-Duino y ver los cambios en Node-RED.

Configurar el maestro M-Duino para publicar mensajes MQTT en OpenPLC

Haremos una configuración similar a la anterior, pero en lugar de usar "mqtt in" y un nodo de texto, usaremos "mqtt out" y un nodo switch.

Configura el nodo switch para trabajar con cadenas de texto:


Configurar el esclavo M-Duino para recibir mensajes MQTT en OpenPLC

Para recibir mensajes debemos hacer algo similar a lo anterior, pero con bloques de función y variables distintos. Abre el ejemplo MQTT_Send y configura las variables así:


Esta vez, "msg" estará vinculado a la salida Q0.4 del M-Duino. El maestro controlará esta salida enviando mensajes por MQTT. Ahora configura el diagrama ladder:

Usamos el bloque de función "MQTT_SUBSCRIBE" para suscribirnos al topic. Una vez suscrito correctamente, "MQTT_RECIEVE" escuchará continuamente los mensajes entrantes. Como "MQTT_RECIEVE" solo devuelve strings, necesitamos una función de conversión para transformar el mensaje a booleano. Es importante añadir el biestable SR para mantener el valor positivo de "msg" cuando no se recibe ningún mensaje.

Tras cargar el código en el M-Duino, puedes usar el interruptor del dashboard de Node-RED para activar la salida Q0.4 del M-Duino.

Siguiente post:

HTTP on M-Duino with OpenPLC


Buscar en nuestro blog

Boot & Work Corp. S.L, Arnau Tena 19 de junio de 2026
Compartir esta publicación
Etiquetas

¿Estás buscando tu Controlador Lógico Programable ideal?

Echa un vistazo a esta comparativa de producto de varios controladores industriales basados en Arduino.

Comparamos entradas, salidas, comunicaciones y otras especificaciones con las de los equipos de otras marcas destacadas.

Comparativa de PLCs