🛠 Publier et s'abonner en MQTT

Arduino GIGA R1 WiFi · intermediaire · Schéma : IMG-giga-r1-wifi-intermediaire-5-mqtt-pub-sub.svg — GIGA R1 WiFi publiant des messages vers un courtier MQTT et s'abonnant à un autre sujet, flèches aller/retour entre la carte, le broker et un autre client

Objectifs

Monter d'un cran vers le messaging IoT : connecter la GIGA R1 WiFi au WiFi, puis utiliser le protocole MQTT avec la bibliothèque PubSubClient pour publier une valeur toutes les 5 secondes et recevoir les messages d'un autre client. MQTT est le protocole natif d'Arduino IoT Cloud, que la carte accepte officiellement — ce tuto vous donne les bases pour comprendre ce qui se passe « sous » le cloud.

Matériel

Code complet

// GIGA R1 WiFi — MQTT publish/subscribe (MQTT brut port 1883, sans TLS)
#include <WiFi.h>
#include <PubSubClient.h>

const char SSID[] = "your-ssid";
const char PASS[] = "your-pass";
const char BROKER[] = "test.mosquitto.org";
const int  PORT_BROKER = 1883;
const char SUJET_PUB[]  = "giga/maison/salle/capteur";
const char SUJET_SUB[]  = "giga/maison/salle/consigne";

WiFiClient réseau;
PubSubClient mqtt(réseau);
unsigned long dernierEnvoi = 0;

void callback(char* sujet, byte* payload, unsigned int longueur) {
  Serial.print("Recu sur "); Serial.print(sujet); Serial.print(" : ");
  for (unsigned int i = 0; i < longueur; i++) Serial.write(payload[i]);
  Serial.println;
  digitalWrite(LED_BUILTIN, mqtt.payload[0] == '1' ? HIGH : LOW);
}

void setup {
  Serial.begin(115200);
  pinMode(LED_BUILTIN, OUTPUT);
  WiFi.begin(SSID, PASS);
  while (WiFi.status != WL_CONNECTED) { Serial.print("."); delay(200); }
  Serial.print("IP "); Serial.println(WiFi.localIP);

  mqtt.setServer(BROKER, PORT_BROKER);
  mqtt.setCallback(callback);
  while (!mqtt.connected) {
    Serial.print("Connexion MQTT...");
    if (mqtt.connect("giga-r1")) {                 // client id "giga-r1"
      Serial.println("connecte");
      mqtt.subscribe(SUJET_SUB);
      Serial.print("abonne a "); Serial.println(SUJET_SUB);
    } else {
      Serial.print("échec rc="); Serial.println(mqtt.state);
      delay(2000);
    }
  }
}

void loop {
  mqtt.loop;                                     // indispensable : keepalive + reception
  if (WiFi.status != WL_CONNECTED) { mqtt.disconnect; WiFi.reconnect; return; }
  if (!mqtt.connected) { mqtt.connect("giga-r1"); mqtt.subscribe(SUJET_SUB); return; }
  if (millis - dernierEnvoi > 5000) {
    dernierEnvoi = millis;
    String v = String(analogRead(A0));             // 12 entrées analogiques 3.3 V
    mqtt.publish(SUJET_PUB, v.c_str);
    Serial.print("publie "); Serial.println(v);
  }
}

Vérification attendue

Le moniteur affiche la connexion WiFi puis « connecté / abonné à ... », puis « publié <valeur> » toutes les 5 secondes. En publiant depuis un autre outil (mosquitto_pub -t giga/maison/salle/consigne -m 1) la LED de la carte s'allume et le message apparaît dans la console. Sur test.mosquitto.org, vous pouvez aussi vous abonner au topic publié depuis n'importe quel client.

Erreurs fréquentes

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels