MQTT

Communication MQTT (Message Queuing Telemetry Transport)

Le MQTT (Message Queuing Telemetry Transport) est un protocole de messagerie léger conçu pour les communications machine-à-machine (M2M) et l’Internet des objets (IoT). Il est particulièrement utile dans des environnements où la bande passante est limitée, la latence élevée ou la fiabilité critique. Voici un aperçu détaillé de la communication MQTT, ses composants, son fonctionnement et ses avantages.

Composants Principaux

  1. Broker :
    • Le cœur du système MQTT.
    • Responsable de la réception de tous les messages publiés par les clients et de leur acheminement vers les clients abonnés aux sujets correspondants.
    • Exemples de brokers : Mosquitto, HiveMQ, EMQX.
  2. Clients :
    • Dispositifs ou applications qui publient des messages sur des sujets ou s’abonnent à des sujets pour recevoir des messages.
    • Exemples : ESP32, ESP8266, smartphones, ordinateurs, capteurs IoT.

Concepts Clés

  1. Topic (Sujet) :
    • Un chemin hiérarchique utilisé pour organiser et accéder aux messages.
    • Exemples de sujets : home/temperature, office/lights/status.
  2. Publish (Publier) :
    • Acte d’envoyer un message à un topic spécifique.
    • Exemple : Un capteur de température peut publier les données de température sur le topic home/temperature.
  3. Subscribe (S’abonner) :
    • Acte de s’abonner à un topic pour recevoir les messages publiés sur ce topic.
    • Exemple : Un affichage peut s’abonner au topic home/temperature pour afficher les données de température.
  4. QoS (Quality of Service) :
    • Niveau de garantie de livraison des messages.
    • QoS 0 : Au moins une fois (non confirmé).
    • QoS 1 : Au moins une fois (confirmé).
    • QoS 2 : Exactement une fois (confirmé avec doublon évité).

Fonctionnement de Base

  1. Connexion :
    • Un client (par exemple, un ESP32) se connecte au broker MQTT en utilisant un identifiant unique et, éventuellement, un nom d’utilisateur et un mot de passe.
  2. Publication :
    • Le client publie un message sur un topic spécifique.
    • Le broker reçoit le message et le stocke temporairement.
  3. Abonnement :
    • Un autre client s’abonne à un topic.
    • Le broker enregistre cet abonnement.
  4. Distribution :
    • Lorsqu’un message est publié sur un topic, le broker distribue ce message à tous les clients abonnés à ce topic.

Avantages du MQTT

  1. Léger :
    • Conçu pour les environnements à ressources limitées (bande passante, puissance de calcul).
    • Utilise un faible encombrement de données.
  2. Fiabilité :
    • Garantit la livraison des messages grâce à différents niveaux de QoS.
  3. Évolutif :
    • Peut gérer des milliers de clients et de messages simultanément.
  4. Facilité d’implémentation :
    • Simplicité du protocole facilite son implémentation dans diverses plateformes matérielles et logicielles.

Exemple de Code pour ESP32 utilisant PubSubClient

Voici un exemple de code simple pour un ESP32 utilisant la bibliothèque PubSubClient pour se connecter à un broker MQTT, publier et s’abonner à un topic :

#include 
#include 

const char* ssid = "your_SSID";
const char* password = "your_PASSWORD";
const char* mqtt_server = "broker.hivemq.com";

WiFiClient espClient;
PubSubClient client(espClient);

void setup_wifi() {
  delay(10);
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
}

void callback(char* topic, byte* payload, unsigned int length) {
  Serial.print("Message arrived on topic: ");
  Serial.print(topic);
  Serial.print(". Message: ");
  String messageTemp;

  for (int i = 0; i < length; i++) { Serial.print((char)payload[i]); messageTemp += (char)payload[i]; } Serial.println(); } void reconnect() { while (!client.connected()) { Serial.print("Attempting MQTT connection..."); if (client.connect("ESP32Client")) { Serial.println("connected"); client.subscribe("home/temperature"); } else { Serial.print("failed, rc="); Serial.print(client.state()); delay(5000); } } } void setup() { Serial.begin(115200); setup_wifi(); client.setServer(mqtt_server, 1883); client.setCallback(callback); } void loop() { if (!client.connected()) { reconnect(); } client.loop(); // Publier un message static unsigned long lastMsg = 0; unsigned long now = millis(); if (now - lastMsg > 2000) {
    lastMsg = now;
    String msg = "25.3";
    Serial.print("Publishing message: ");
    Serial.println(msg);
    client.publish("home/temperature", msg.c_str());
  }
}
Conclusion

Le protocole MQTT est idéal pour les applications IoT en raison de sa légèreté, sa fiabilité et sa simplicité. Il permet une communication efficace entre des milliers de dispositifs connectés, même dans des environnements à faible bande passante. La compréhension et l’utilisation de MQTT avec des microcontrôleurs comme l’ESP32 et l’ESP8266 facilitent le développement d’applications IoT robustes et évolutives.

Domotique – informatique – électronique – dictionnaire – projets

Copyright 2024