ESP32 - MQTT

Dans ce tutoriel, nous allons explorer comment utiliser l'ESP32 pour envoyer et recevoir des données vers et depuis un courtier MQTT en utilisant le protocole MQTT. Plus précisément, nous aborderons :

ESP32 MQTT

Nous examinerons deux scénarios distincts :

Préparation du matériel

1×ESP-WROOM-32 Dev Module
1×USB Cable Type-C
1×(Recommended) ESP32 Screw Terminal Adapter

Or you can buy the following sensor kits:

1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)
Divulgation : Certains des liens fournis dans cette section sont des liens affiliés Amazon. Nous pouvons recevoir une commission pour tout achat effectué via ces liens, sans coût supplémentaire pour vous. Nous vous remercions de votre soutien.

À propos de l'ESP32 et MQTT

Si vous connaissez déjà le protocole MQTT, parfait ! Sinon, vous pouvez le rechercher en ligne. Ce tutoriel concerne l'utilisation de l'ESP32 pour envoyer et recevoir des données via MQTT.

Voici quelques manières dont l'ESP32 peut fonctionner avec MQTT :

  • Connectez ESP32 à un courtier MQTT en ligne comme Mosquitto ou AWS IoT.
  • Connectez ESP32 à un courtier MQTT installé sur votre ordinateur, tel que Mosquitto ou HiveMQ.
  • Connectez ESP32 à un courtier MQTT fonctionnant sur votre Raspberry Pi, par exemple, Mosquitto.
  • Connectez ESP32 à un courtier MQTT basé sur le cloud, comme Mosquitto ou HiveMQ sur AWS EC2.

Dans ce tutoriel, nous commencerons par vérifier si l'ESP32 peut se connecter à un courtier Mosquitto en ligne. Nous ferons en sorte que l'ESP32 envoie et reçoive des données via ce courtier sur Internet.

Ensuite, nous installerons le courtier Mosquitto sur notre ordinateur. Nous connecterons l'ESP32 à ce courtier local et continuerons à envoyer et recevoir des données.

Une fois que vous aurez terminé ce tutoriel, vous pourrez en découvrir plus en consultant ces autres tutoriels :

Ces liens fourniront des orientations supplémentaires sur des sujets connexes.

Connectez un ESP32 à un courtier MQTT en ligne.

Dans cette partie, nous apprendrons à connecter l'ESP32 à test.mosquitto.org, un courtier MQTT en ligne créé par Mosquitto. Veuillez noter que ce courtier doit être utilisé uniquement à des fins de test.

Code ESP32

Le code ESP32 ci-dessous fait :

  • Se connecter au courtier MQTT
  • S'abonner à un sujet
  • Publier périodiquement des messages sur le même sujet auquel il est abonné
/* * Ce code ESP32 a été développé par newbiely.fr * Ce code ESP32 est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/tutorials/esp32/esp32-mqtt */ #include <WiFi.h> #include <MQTTClient.h> #include <ArduinoJson.h> const char WIFI_SSID[] = "YOUR_WIFI_SSID"; // CHANGE TO YOUR WIFI SSID const char WIFI_PASSWORD[] = "YOUR_WIFI_PASSWORD"; // CHANGE TO YOUR WIFI PASSWORD const char MQTT_BROKER_ADRRESS[] = "test.mosquitto.org"; // CHANGE TO MQTT BROKER'S ADDRESS const int MQTT_PORT = 1883; const char MQTT_CLIENT_ID[] = "YOUR-NAME-esp32-001"; // CHANGE IT AS YOU DESIRE const char MQTT_USERNAME[] = ""; // CHANGE IT IF REQUIRED, empty if not required const char MQTT_PASSWORD[] = ""; // CHANGE IT IF REQUIRED, empty if not required // The MQTT topics that ESP32 should publish/subscribe const char PUBLISH_TOPIC[] = "YOUR-NAME-esp32-001/loopback"; // CHANGE IT AS YOU DESIRE const char SUBSCRIBE_TOPIC[] = "YOUR-NAME-esp32-001/loopback"; // CHANGE IT AS YOU DESIRE const int PUBLISH_INTERVAL = 5000; // 5 seconds WiFiClient network; MQTTClient mqtt = MQTTClient(256); unsigned long lastPublishTime = 0; void setup() { Serial.begin(9600); WiFi.mode(WIFI_STA); WiFi.begin(WIFI_SSID, WIFI_PASSWORD); Serial.println("ESP32 - Connecting to Wi-Fi"); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(); connectToMQTT(); } void loop() { mqtt.loop(); if (millis() - lastPublishTime > PUBLISH_INTERVAL) { sendToMQTT(); lastPublishTime = millis(); } } void connectToMQTT() { // Connect to the MQTT broker mqtt.begin(MQTT_BROKER_ADRRESS, MQTT_PORT, network); // Create a handler for incoming messages mqtt.onMessage(messageHandler); Serial.print("ESP32 - Connecting to MQTT broker"); while (!mqtt.connect(MQTT_CLIENT_ID, MQTT_USERNAME, MQTT_PASSWORD)) { Serial.print("."); delay(100); } Serial.println(); if (!mqtt.connected()) { Serial.println("ESP32 - MQTT broker Timeout!"); return; } // Subscribe to a topic, the incoming messages are processed by messageHandler() function if (mqtt.subscribe(SUBSCRIBE_TOPIC)) Serial.print("ESP32 - Subscribed to the topic: "); else Serial.print("ESP32 - Failed to subscribe to the topic: "); Serial.println(SUBSCRIBE_TOPIC); Serial.println("ESP32 - MQTT broker Connected!"); } void sendToMQTT() { StaticJsonDocument<200> message; message["timestamp"] = millis(); message["data"] = analogRead(0); // Or you can read data from other sensors char messageBuffer[512]; serializeJson(message, messageBuffer); mqtt.publish(PUBLISH_TOPIC, messageBuffer); Serial.println("ESP32 - sent to MQTT:"); Serial.print("- topic: "); Serial.println(PUBLISH_TOPIC); Serial.print("- payload:"); Serial.println(messageBuffer); } void messageHandler(String &topic, String &payload) { Serial.println("ESP32 - received from MQTT:"); Serial.println("- topic: " + topic); Serial.println("- payload:"); Serial.println(payload); }

Étapes rapides

  • Si c'est la première fois que vous utilisez un ESP32, consultez comment configurer l'environnement pour ESP32 sur Arduino IDE.
  • Faites le câblage comme sur l'image ci-dessus.
  • Connectez la carte ESP32 à votre PC via un câble USB.
  • Ouvrez Arduino IDE sur votre PC.
  • Sélectionnez la bonne carte ESP32 (par exemple, ESP32 Dev Module) et le port COM.
  • Ouvrez Arduino IDE sur votre PC.
  • Ouvrez le Gestionnaire de bibliothèques en cliquant sur l'icône Gestionnaire de bibliothèques dans la barre de navigation gauche de l'Arduino IDE.
  • Tapez MQTT dans la boîte de recherche, puis recherchez la bibliothèque MQTT de Joel Gaehwiler.
  • Cliquez sur le bouton Install pour installer la bibliothèque MQTT.
Bibliothèque MQTT ESP32
  • Tapez ArduinoJson dans la zone de recherche, puis recherchez la bibliothèque ArduinoJson de Benoit Blanchon.
  • Cliquez sur le bouton Install pour installer la bibliothèque ArduinoJson.
Bibliothèque Json ESP32
  • Copiez le code ci-dessus et ouvrez-le avec l'IDE Arduino
  • Remplacez les informations WiFi (SSID et mot de passe) dans le code par les vôtres.
  • Dans le code, vous verrez le mot 'YOUR-NAME' trois fois. Remplacez ce mot par votre nom ou des caractères aléatoires (uniquement des caractères alphabétiques, pas d'espaces). Ceci est nécessaire car si vous ne faites pas le changement, il pourrait y avoir plusieurs personnes exécutant ce code en même temps, ce qui pourrait entraîner des conflits puisque les identifiants et les sujets des clients MQTT sont les mêmes pour tous.
  • Cliquez sur le bouton Upload sur l'IDE Arduino pour téléverser le code sur l'ESP32
  • Ouvrez le moniteur série
  • Voir le résultat sur le moniteur série.
COM6
Send
ESP32 - Connecting to MQTT broker ESP32 - Subscribed to the topic: YOUR-NAME-esp32-001/loopback ESP32 - MQTT broker Connected! ESP32 - sent to MQTT: - topic: YOUR-NAME-esp32-001/loopback - payload:{"timestamp":11757,"data":255} ESP32 - received from MQTT: - topic: YOUR-NAME-esp32-001/loopback - payload: {"timestamp":11757,"data":255} ESP32 - sent to MQTT: - topic: YOUR-NAME-esp32-001/loopback - payload:{"timestamp":16896,"data":259} ESP32 - received from MQTT: - topic: YOUR-NAME-esp32-001/loopback - payload: {"timestamp":16896,"data":259}
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Comme vous pouvez le constater, l'ESP32 publie des messages sur le courtier MQTT puis reçoit le même message en retour. Cela se produit parce que le code fourni s'abonne au même sujet sur lequel il publie des données. Si vous préférez que l'ESP32 ne reçoive pas le message qu'il publie, vous pouvez facilement y parvenir en rendant le sujet SUBSCRIBE différent du sujet PUBLISH.

Connectez l'ESP32 au courtier MQTT installé sur votre PC

Installer le broker MQTT Mosquitto

  • Téléchargez le Mosquitto MQTT Broker
  • Installez-le sur le lecteur D: au lieu du lecteur C:. Évitez d'installer le broker Mosquitto sur le lecteur C: pour prévenir d'éventuels problèmes.

Exécuter le courtier MQTT Mosquitto

Maintenant, vérifions si le courtier MQTT fonctionne correctement en suivant ces étapes :

  • Accédez au répertoire où Mosquitto a été installé. Par exemple : D:\Draft\mosquitto>
  • Créez un nouveau fichier nommé test.conf, copiez le contenu ci-dessous et enregistrez-le dans ce répertoire :
listener 1883 allow_anonymous true
  • Exécutez une invite de commande en tant qu'administrateur sur votre PC. Appelons-la Fenêtre Broker. Ne la fermez pas jusqu'à la fin du tutoriel.
Invite de commandes administrateur Windows
  • Exécutez les commandes ci-dessous une par une :
cd /d D:\Draft\mosquitto mosquitto -v -c test.conf
  • Vous verrez :
Command Prompt
Microsoft Windows [Version 10.0.19045.3930] (c) Microsoft Corporation. All rights reserved. C:\WINDOWS\system32>cd /d D:\Draft\mosquitto D:\Draft\mosquitto>mosquitto -v -c test.conf 1710918939: mosquitto version 2.0.18 starting 1710918939: Config loaded from test.conf. 1710918939: Opening ipv6 listen socket on port 1883. 1710918939: Opening ipv4 listen socket on port 1883. 1710918939: mosquitto version 2.0.18 running
  • Ouvrez une autre invite de commande en tant qu'administrateur sur votre PC.
  • Trouvez l'adresse IP de votre PC en exécutant la commande ci-dessous :
ipconfig
Command Prompt
C:\WINDOWS\system32>ipconfig Windows IP Configuration Ethernet adapter: Subnet Mask . . . . . . . . . . . : 255.0.0.0 IPv4 Address. . . . . . . . . . . : 192.168.0.26 Subnet Mask . . . . . . . . . . . : 255.255.255.0 Default Gateway . . . . . . . . . :
  • Notez l'adresse IP pour une utilisation ultérieure. Dans l'exemple ci-dessus : 192.168.0.26

Tester si le Broker Mosquitto fonctionne

  • Ouvrez une autre invite de commande en tant qu'administrateur sur votre PC. Appelons-la Fenêtre Abonné
  • Abonnez-vous à un sujet en exécutant les commandes ci-dessous une par une (remplacez par votre adresse IP):
cd /d D:\Draft\mosquitto mosquitto_sub -h 192.168.0.26 -p 1883 -t esp32-001/send
  • Ouvrez une autre invite de commande en tant qu'administrateur sur votre PC. Appelons-la Fenêtre Éditeur
  • Publiez un message sur le même sujet en exécutant les commandes ci-dessous une par une (remplacez par votre adresse IP) :
cd /d D:\Draft\mosquitto mosquitto_pub -h 192.168.0.26 -p 1883 -t esp32-001/send -m "Hello, MQTT!"
  • Vous verrez :
Command Prompt
Microsoft Windows [Version 10.0.19045.3930] (c) Microsoft Corporation. All rights reserved. C:\WINDOWS\system32>cd /d D:\Draft\mosquitto D:\Draft\mosquitto>mosquitto_pub -h 192.168.0.26 -p 1883 -t esp32-001/send -m "Hello, MQTT!" D:\Draft\mosquitto>

Vous verrez que le message est transmis à la Fenêtre d'Abonné comme suit :

Command Prompt
Microsoft Windows [Version 10.0.19045.3930] (c) Microsoft Corporation. All rights reserved. C:\WINDOWS\system32>cd /d D:\Draft\mosquitto D:\Draft\mosquitto>mosquitto_sub -h 192.168.0.26 -p 1883 -t esp32-001/send Hello, MQTT!

Maintenant, vous avez installé avec succès le broker MQTT Mosquitto sur votre PC. Veuillez ne PAS fermer trois fenêtres : Fenêtre du Broker, Fenêtre de l'Abonné et Fenêtre de l'Éditeur. Nous les utiliserons ensuite.

Code ESP32

Le code ESP32 ci-dessous fait :

  • Se connecter au courtier MQTT
  • S'abonner à un sujet
  • Publier périodiquement des messages sur un autre sujet
/* * Ce code ESP32 a été développé par newbiely.fr * Ce code ESP32 est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/tutorials/esp32/esp32-mqtt */ #include <WiFi.h> #include <MQTTClient.h> #include <ArduinoJson.h> #define CLIENT_ID "ESP32-001" // CHANGE IT AS YOU DESIRE const char WIFI_SSID[] = "YOUR_WIFI_SSID"; // CHANGE TO YOUR WIFI SSID const char WIFI_PASSWORD[] = "YOUR_WIFI_PASSWORD"; // CHANGE TO YOUR WIFI PASSWORD const char MQTT_BROKER_ADRRESS[] = "192.168.0.26"; // CHANGE TO MQTT BROKER'S IP ADDRESS const int MQTT_PORT = 1883; const char MQTT_USERNAME[] = ""; // CHANGE IT IF REQUIRED const char MQTT_PASSWORD[] = ""; // CHANGE IT IF REQUIRED // The MQTT topics that this device should publish/subscribe #define PUBLISH_TOPIC "esp32-001/send" #define SUBSCRIBE_TOPIC "esp32-001/receive" #define PUBLISH_INTERVAL 5000 // 4 seconds WiFiClient network; MQTTClient mqtt = MQTTClient(256); unsigned long lastPublishTime = 0; void setup() { Serial.begin(9600); WiFi.mode(WIFI_STA); WiFi.begin(WIFI_SSID, WIFI_PASSWORD); Serial.println("ESP32 - Connecting to Wi-Fi"); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(); connectToMQTT(); } void loop() { mqtt.loop(); if (millis() - lastPublishTime > PUBLISH_INTERVAL) { sendToMQTT(); lastPublishTime = millis(); } } void connectToMQTT() { // Connect to the MQTT broker mqtt.begin(MQTT_BROKER_ADRRESS, MQTT_PORT, network); // Create a handler for incoming messages mqtt.onMessage(messageHandler); Serial.print("ESP32 - Connecting to MQTT broker"); while (!mqtt.connect(CLIENT_ID, MQTT_USERNAME, MQTT_PASSWORD)) { Serial.print("."); delay(100); } Serial.println(); if (!mqtt.connected()) { Serial.println("ESP32 - MQTT broker Timeout!"); return; } // Subscribe to a topic, the incoming messages are processed by messageHandler() function if (mqtt.subscribe(SUBSCRIBE_TOPIC)) Serial.print("ESP32 - Subscribed to the topic: "); else Serial.print("ESP32 - Failed to subscribe to the topic: "); Serial.println(SUBSCRIBE_TOPIC); Serial.println("ESP32 - MQTT broker Connected!"); } void sendToMQTT() { StaticJsonDocument<200> message; message["timestamp"] = millis(); message["data"] = analogRead(0); // Or you can read data from other sensors char messageBuffer[512]; serializeJson(message, messageBuffer); mqtt.publish(PUBLISH_TOPIC, messageBuffer); Serial.println("ESP32 - sent to MQTT:"); Serial.print("- topic: "); Serial.println(PUBLISH_TOPIC); Serial.print("- payload:"); Serial.println(messageBuffer); } void messageHandler(String &topic, String &payload) { Serial.println("ESP32 - received from MQTT:"); Serial.println("- topic: " + topic); Serial.println("- payload:"); Serial.println(payload); // You can process the incoming data as json object, then control something /* StaticJsonDocument<200> doc; deserializeJson(doc, payload); const char* message = doc["message"]; */ }

Étapes rapides

  • Copiez le code ci-dessus et ouvrez-le avec l'IDE Arduino
  • Remplacez les informations WiFi (SSID et mot de passe) dans le code par les vôtres.
  • Remplacez l'adresse du courtier MQTT dans le code (nom de domaine ou adresse IP).
  • Cliquez sur le bouton Upload de l'IDE Arduino pour téléverser le code sur l'ESP32.

Envoyer un message de l'ESP32 au PC via MQTT

Les codes ESP32 publient des données sur le sujet MQTT esp32-001/send, la fenêtre d'abonné sur PC s'abonne à ce sujet pour recevoir les données.

  • Ouvrez le moniteur série, vous verrez l'ESP32 publier périodiquement un message sur un sujet.
COM6
Send
ESP32 - Connecting to MQTT broker ESP32 - Subscribed to the topic: esp32-001/receive ESP32 - MQTT broker Connected! ESP32 - sent to MQTT: - topic: esp32-001/send - payload:{"timestamp":10708,"data":311} ESP32 - sent to MQTT: - topic: esp32-001/send - payload:{"timestamp":15837,"data":298} ESP32 - sent to MQTT: - topic: esp32-001/send - payload:{"timestamp":20965,"data":291} ESP32 - sent to MQTT: - topic: esp32-001/send - payload:{"timestamp":26094,"data":286}
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  
  • Vérifiez la Fenêtre d'Abonné, vous verrez qu'elle reçoit le message publié par l'ESP32 comme suit :
Command Prompt
Microsoft Windows [Version 10.0.19045.3930] (c) Microsoft Corporation. All rights reserved. C:\WINDOWS\system32>cd /d D:\Draft\mosquitto D:\Draft\mosquitto>mosquitto_sub -h 192.168.0.26 -p 1883 -t esp32-001/send Hello, MQTT! {"timestamp":10708,"data":311} {"timestamp":15837,"data":298} {"timestamp":20965,"data":291} {"timestamp":26094,"data":286}

Envoyer un message depuis un PC vers un ESP32 via MQTT

ESP32 s'abonne au sujet esp32-001/receive, Fenêtre de publication sur PC publie un message sur ce sujet pour l'envoyer à l'ESP32.

  • Publiez un message sur le sujet auquel l'ESP32 est abonné en exécutant la commande suivante dans la fenêtre de l'éditeur :
mosquitto_pub -h 192.168.0.26 -p 1883 -t esp32-001/receive -m "Hello, ESP32!"
  • Vous verrez que ce message est reçu par l'ESP32 sur le moniteur série comme ci-dessous :
COM6
Send
ESP32 - received from MQTT: - topic: esp32-001/receive - payload: Hello, ESP32!
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Vidéo

※ OUR MESSAGES

  • Please feel free to share the link of this tutorial. However, Please do not use our content on any other websites. We invested a lot of effort and time to create the content, please respect our work!