- Introducción
-
Cómo usarlo
-
- Cuestionario
Cliente MQTT en Raspberry PLC
Cliente MQTT en Raspberry PLC
Un Raspberry PLC puede funcionar como broker y como cliente a la vez. En esta lección publica y se suscribe con Node-RED y con Python. Usa el broker Mosquitto local del PLC, configurado como en la lección de Mosquitto (con usuario y contraseña). Los brokers públicos como test.mosquitto.org o broker.emqx.io son prácticos para aprender porque no necesitan configuración, pero cualquiera puede leer lo que publiques en ellos: úsalos solo para demos con datos de prueba, nunca con datos reales de planta.
Node-RED
Abre el editor de Node-RED en el navegador, en la dirección que muestra node-red-start, normalmente http://10.10.10.20:1880. Arrastra un nodo MQTT in y un nodo MQTT out y configura el broker en ambos:
- Server:
localhost(el broker del propio PLC). - Port: 1883.
- Protocol: MQTT V3.1.1.
- Pestaña Security: el usuario y la contraseña del broker.
Usa el topic is/testIn en el nodo MQTT in y is/testOut en el nodo MQTT out. Deja el resto por defecto y conecta un nodo Inject y un nodo Debug. Después de desplegar el flujo, haz clic en el botón de inject para publicar el timestamp en is/testOut; el nodo Debug muestra lo que llega a is/testIn.


Python
El paquete Paho ofrece lo necesario para crear un sistema MQTT completo en Python. Instálalo en un entorno virtual (las versiones recientes de Raspberry Pi OS no permiten instalaciones de pip a nivel de sistema):
python3 -m venv ~/mqtt-env
. ~/mqtt-env/bin/activate
pip install paho-mqttEste ejemplo publica un contador una vez por segundo, 5 veces:
import time
import paho.mqtt.client as paho
broker = 'localhost'
port = 1883
topic = "is/testIn"
def on_publish(client, userdata, mid, reason_code, properties):
print("Callback, data published!")
def on_disconnect(client, userdata, disconnect_flags, reason_code, properties):
print("Callback, client disconnected ok")
def connect_mqtt():
client = paho.Client(paho.CallbackAPIVersion.VERSION2)
client.username_pw_set("plcuser", "your-password")
client.on_publish = on_publish
client.on_disconnect = on_disconnect
client.connect(broker, port)
client.loop_start() # network loop in a background thread
return client
def publish(client):
for msg_count in range(1, 6):
time.sleep(1)
msg = f"messages: {msg_count}"
result = client.publish(topic, msg)
if result[0] == 0:
print(f"Send `{msg}` to topic `{topic}`")
else:
print(f"Failed to send message to topic {topic}")
def run():
client = connect_mqtt()
publish(client)
client.loop_stop()
client.disconnect()
if __name__ == '__main__':
run()El script tiene estos bloques:
- Definición del broker: el broker, el puerto 1883 y el topic donde se publican los datos,
is/testIn. - Callbacks: funciones que se llaman cuando el cliente publica datos o se desconecta. Son útiles cuando necesitas hacer algo justo después de publicar.
- Conexión:
connect_mqtt()crea el cliente, define las credenciales, registra los callbacks e inicia el bucle de red. - Publicación:
publish()envía un contador cada segundo, 5 veces. - Código principal:
run()conecta, publica y desconecta.

Descubre la gama de Raspberry PLC en www.industrialshields.com.
No hay comentarios por ahora.