🛠 Remonter des données machine en MQTT via Ethernet
Objectifs
Connecter l'Opta à un broker MQTT pour remonter l'état des machines vers un superviseur (Node-RED, Mosquitto, Tasmota, cloud). L'Ethernet 10/100 embarqué rend le lien fiable en atelier ; le protocole MQTT, léger et publiable/s'abonnant, est le standard de l'IIoT. Vous publierez les entrées numériques toutes les secondes sur un topic hiérarchique.
Matériel
- Arduino Opta alimentée en 24 VDC, câble Ethernet
- Un broker MQTT accessible (Mosquitto sur un Raspberry Pi ou le serveur de votre choix)
- Un client MQTT de test (MQTT Explorer, mosquitto_sub)
- IDE Arduino + bibliothèques « Ethernet » et « PubSubClient »
Code complet
// opta_mqtt.ino — publication des entrées I1..I4 en MQTT sur Ethernet
#include <Ethernet.h>
#include <PubSubClient.h>
EthernetClient ethClient;
PubSubClient mqtt(ethClient);
const char* BROKER = "192.168.1.50"; // IP de votre broker Mosquitto
const int ENTREES[] = {A0, A1, A2, A3}; // bornes I1..I4
char topic[40], payload[8];
void setup {
Serial.begin(9600);
if (Ethernet.begin == 0) { Serial.println("Echec DHCP"); while (1); }
Serial.println(Ethernet.localIP);
mqtt.setServer(BROKER, 1883);
for (int i = 0; i < 4; i++) pinMode(ENTREES[i], INPUT);
}
void boucleMqtt {
while (!mqtt.connected) {
if (mqtt.connect("opta-atelier")) { Serial.println("MQTT connecte"); return; }
delay(2000); // nouvelle tentative toutes les 2 s
}
}
void loop {
boucleMqtt;
for (int i = 0; i < 4; i++) {
snprintf(topic, sizeof(topic), "usine/opta1/E%d", i + 1);
snprintf(payload, sizeof(payload), "%d", digitalRead(ENTREES[i]) ? 1 : 0);
mqtt.publish(topic, payload, true); // retain = true
}
mqtt.loop;
delay(1000);
}
Vérification attendue
Avec mosquitto_sub -t 'usine/opta1/#', les messages « usine/opta1/E1 » = 0/1 défilent chaque seconde et suivent vos entrées 24 V. Le drapeau retain permet au superviseur de connaître le dernier état dès sa connexion.
Erreurs fréquentes
- Broker injoignable : vérifiez pare-feu et port 1883 ; le port série affiche l'IP, testez le ping avant de culpabiliser le sketch.
- Oublier mqtt.loop : sans lui, les keep-alive ne partent pas et le broker déconnecte l'Opta toutes les minutes.
- Inonder le réseau : publier à chaque tour de boucle sans temporisation sature le broker ; cadencez (1 Hz suffit pour des états).
- MQTT sans TLS en production : le port 1883 est en clair ; pour un réseau d'entreprise, documentez la segmentation ou passez par Arduino Cloud / AWS IoT dont les tutoriels officiels Opta existent.
Autres tutoriels pour cette carte
- Premier sketch : faire clignoter une LED sur Arduino Opta
- Lire une entrée numérique 24 V (capteur de proximité)
- Commander une charge 230 V avec un relais de sortie
- Server Modbus TCP : exposer les relais sur Ethernet
- Lire un capteur analogique 0–10 V sur les entrées Opta
- Exploiter le double cœur : M7 pour le PLC, M4 en coprocesseur
Exemples de code pour cette carte
relais_securise.inoArduinoentrees_numeriques.inoArduinoanalogique_0_10v.inoArduinomodbus_tcp_esclave.inoArduinomodbus_rtu_maitre.inoArduinomqtt_telemetrie.inoArduino