Cliente MQTT en PLC Arduino y ESP32 por Ethernet
Cliente MQTT en PLC Arduino y ESP32 por Ethernet
Ya has visto cómo trabajar con Eclipse Mosquitto en un Raspberry PLC. En esta lección, un PLC Arduino o ESP32 se conecta a ese broker por Ethernet como cliente MQTT, publica un mensaje y se suscribe a un topic.
Software
La librería PubSubClient gestiona la comunicación MQTT. Descárgala desde su repositorio de GitHub o instálala desde el gestor de librerías de Arduino IDE. El mismo ejemplo está en el IDE en File → Examples → PubSubClient → mqtt_basic.
- Inicializa Ethernet y define la dirección IP del PLC:
#include <Ethernet.h> byte mac[] = { 0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0xED }; IPAddress ip(10, 42, 0, 100); EthernetClient ethClient; // In setup(): Ethernet.begin(mac, ip); - Configura el cliente MQTT con la dirección del broker y un callback que se ejecuta cuando llega un mensaje:
#include <PubSubClient.h> IPAddress server(10, 42, 0, 1); PubSubClient client(ethClient); void callback(char* topic, byte* payload, unsigned int length) { Serial.print("Message arrived ["); Serial.print(topic); Serial.print("] "); for (unsigned int i = 0; i < length; i++) { Serial.print((char)payload[i]); } Serial.println(); } // In setup(): client.setServer(server, 1883); client.setCallback(callback); - Añade una función de reconexión, por si se cae la conexión, y llama a
client.loop()en cada ciclo. Si tu broker exige usuario y contraseña (como debería, consulta la lección de Mosquitto), pásalos aconnect():void reconnect() { // Loop until we are reconnected while (!client.connected()) { Serial.print("Attempting MQTT connection..."); // Client ID, user and password of the broker if (client.connect("arduinoClient", "plcuser", "your-password")) { Serial.println("connected"); // Once connected, publish an announcement... client.publish("outTopic", "hello world"); // ... and resubscribe client.subscribe("inTopic"); } else { Serial.print("failed, rc="); Serial.print(client.state()); Serial.println(" try again in 5 seconds"); // Wait 5 seconds before retrying delay(5000); } } } void loop() { if (!client.connected()) { reconnect(); } client.loop(); }
Usa un client ID distinto para cada PLC: dos clientes con el mismo ID se desconectan mutuamente del broker.
Hardware
Conecta el PLC al PC (o al Raspberry PLC) con un cable Ethernet y comprueba estos puntos antes de probar:
- El PLC y el broker están en la misma subred. El código anterior usa la IP 10.42.0.100 para el PLC y 10.42.0.1 para el broker. Para que coincidan en el Raspberry PLC, añade la dirección a su puerto Ethernet:
sudo ip address add 10.42.0.1/24 dev <eth_interface> - La Ethernet del PLC Arduino / ESP32 está activa. El LED naranja debe estar encendido, lo que indica que la interfaz tiene enlace y está lista para intercambiar paquetes. El LED verde indica la velocidad del puerto (apagado para 10 Mbps, encendido para 100 Mbps).
Comprueba que los dispositivos se ven entre sí. Desde el Raspberry PLC:
ping -I <eth_interface> 10.42.0.100Probar MQTT
Abre un terminal y suscríbete al topic outTopic en el broker:
mosquitto_sub -h 10.42.0.1 -u plcuser -P 'your-password' -t "outTopic"Abre otro terminal y publica en inTopic:
mosquitto_pub -h 10.42.0.1 -u plcuser -P 'your-password' -t "inTopic" -m "Hello World"El PLC recibe el mensaje y lo imprime en el monitor serie. Cuando el PLC se reinicia, se conecta al broker y publica en outTopic, y el terminal lo muestra.


Elige tu PLC en www.industrialshields.com.
No hay comentarios por ahora.