🛠 Remonter des données machine en MQTT via Ethernet

Arduino Opta (micro automate, STM32H747) · intermediaire · Schéma : IMG-opta-plc-intermediaire-3-opta-mqtt-industriel.svg — Opta publiant sur un broker MQTT les états de ses entrées vers un serveur de supervision et un dashboard dans le cloud via le réseau 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

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

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels