Arduino Nano ESP32 - MQTT

Dans ce guide, nous allons explorer l'utilisation de l'Arduino Nano ESP32 pour envoyer et recevoir des données vers et depuis un courtier MQTT via le protocole MQTT. Plus précisément, nous couvrirons :

Arduino Nano ESP32 MQTT

Nous examinerons deux scénarios distincts :

Préparation du matériel

1×Arduino Nano ESP32
1×USB Cable Type-C
1×Breadboard
1×Jumper Wires
1×(Recommended) Screw Terminal Adapter for Arduino Nano

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 d'Arduino Nano ESP32 et MQTT

Si vous connaissez déjà le protocole MQTT, c'est parfait ! Sinon, vous pouvez le rechercher en ligne. Ce tutoriel est axé sur l'utilisation de l'Arduino Nano ESP32 pour l'envoi et la réception de données via MQTT.

Voici différentes manières d'utiliser l'Arduino Nano ESP32 avec MQTT :

  • Vous pouvez connecter l'Arduino Nano ESP32 à un courtier MQTT en ligne comme Mosquitto ou AWS IoT.
  • Vous pouvez connecter l'Arduino Nano ESP32 à un courtier MQTT installé sur votre ordinateur, comme Mosquitto ou HiveMQ.
  • Vous pouvez connecter l'Arduino Nano ESP32 à un courtier MQTT exécuté sur votre Raspberry Pi, par exemple, Mosquitto.
  • Vous pouvez également connecter l'Arduino Nano 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'Arduino Nano ESP32 peut se connecter à un courtier Mosquitto en ligne. Nous ferons échanger des données à l'Arduino Nano ESP32 par l'intermédiaire de ce courtier via Internet.

Après cela, nous installerons le courtier Mosquitto sur notre ordinateur. Ensuite, nous connecterons l'Arduino Nano ESP32 à ce courtier local et continuerons à envoyer et recevoir des données.

Une fois que vous aurez terminé ce tutoriel, vous pourrez approfondir vos connaissances en explorant ces tutoriels supplémentaires :

Ces tutoriels fourniront plus de détails sur les sujets associés.

Connectez Arduino Nano ESP32 à un courtier MQTT en ligne

Dans cette partie, nous apprendrons comment connecter l'Arduino Nano 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 Arduino Nano ESP32

Le code Arduino Nano 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 Arduino Nano ESP32 a été développé par newbiely.fr * Ce code Arduino Nano 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/arduino-nano-esp32/arduino-nano-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("Arduino Nano 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("Arduino Nano 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("Arduino Nano ESP32 - MQTT broker Timeout!"); return; } // Subscribe to a topic, the incoming messages are processed by messageHandler() function if (mqtt.subscribe(SUBSCRIBE_TOPIC)) Serial.print("Arduino Nano ESP32 - Subscribed to the topic: "); else Serial.print("Arduino Nano ESP32 - Failed to subscribe to the topic: "); Serial.println(SUBSCRIBE_TOPIC); Serial.println("Arduino Nano 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("Arduino Nano 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("Arduino Nano ESP32 - received from MQTT:"); Serial.println("- topic: " + topic); Serial.println("- payload:"); Serial.println(payload); }

Étapes rapides

Pour commencer avec l'Arduino Nano ESP32, suivez ces étapes :

  • Si vous êtes nouveau avec l'Arduino Nano ESP32, consultez le tutoriel sur comment configurer l'environnement pour Arduino Nano ESP32 dans l'Arduino IDE.
  • Câblez les composants selon le schéma fourni.
  • Connectez la carte Arduino Nano ESP32 à votre ordinateur à l'aide d'un câble USB.
  • Lancez l'Arduino IDE sur votre ordinateur.
  • Sélectionnez la carte Arduino Nano ESP32 et son port COM correspondant.
  • Ouvrez l'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 cherchez la bibliothèque MQTT de Joel Gaehwiler.
  • Cliquez sur le bouton Install pour installer la bibliothèque MQTT.
Bibliothèque MQTT Arduino Nano ESP32
  • Tapez Arduino Nano ESP32Json dans la barre de recherche, puis cherchez la bibliothèque Arduino Nano ESP32Json de Benoit Blanchon.
  • Cliquez sur le bouton Install pour installer la bibliothèque Arduino Nano ESP32Json.
Bibliothèque Json Arduino Nano 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, sans 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 car les identifiants et les sujets des clients MQTT sont les mêmes pour tout le monde.
  • Cliquez sur le bouton Upload sur l'IDE Arduino pour téléverser le code sur Arduino Nano ESP32
  • Ouvrez le moniteur série
  • Voir le résultat sur le moniteur série.
COM6
Send
Arduino Nano ESP32 - Connecting to MQTT broker Arduino Nano ESP32 - Subscribed to the topic: YOUR-NAME-esp32-001/loopback Arduino Nano ESP32 - MQTT broker Connected! Arduino Nano ESP32 - sent to MQTT: - topic: YOUR-NAME-esp32-001/loopback - payload:{"timestamp":11757,"data":255} Arduino Nano ESP32 - received from MQTT: - topic: YOUR-NAME-esp32-001/loopback - payload: {"timestamp":11757,"data":255} Arduino Nano ESP32 - sent to MQTT: - topic: YOUR-NAME-esp32-001/loopback - payload:{"timestamp":16896,"data":259} Arduino Nano 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 voir, l'Arduino Nano ESP32 publie des messages au courtier MQTT, puis reçoit à nouveau le même message. Cela est dû au fait que le code ci-dessus s'abonne au même sujet sur lequel il publie des données. Si vous ne souhaitez pas que l'Arduino Nano ESP32 reçoive le message qu'il publie, il suffit de rendre le sujet SUBSCRIBE différent du sujet PUBLISH.

Connectez Arduino Nano ESP32 au courtier MQTT installé sur votre PC.

Installation du courtier MQTT Mosquitto

  • Téléchargez le Mosquitto MQTT Broker
  • Installez-le sur le disque D: plutôt que sur le disque C:. Évitez d'installer le broker Mosquitto sur le disque C: pour prévenir d'éventuels problèmes.

Exécutez 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:\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 commande administrateur Windows
  • Exécutez les commandes ci-dessous une par une :
cd /d D:\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:\mosquitto D:\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.5 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.5

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:\mosquitto mosquitto_sub -h 192.168.0.5 -p 1883 -t esp32-001/send
  • Ouvrez une autre invite de commande en tant qu'administrateur sur votre PC. Appelons-la Fenêtre de l'Éditeur
  • Publiez un message sur le même sujet en exécutant les commandes ci-dessous une à une (remplacez par votre adresse IP) :
cd /d D:\mosquitto mosquitto_pub -h 192.168.0.5 -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:\mosquitto D:\mosquitto>mosquitto_pub -h 192.168.0.5 -p 1883 -t esp32-001/send -m "Hello, MQTT!" D:\mosquitto>

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

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

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

Code Arduino Nano ESP32

Le code Arduino Nano ESP32 ci-dessous effectue :

  • Se connecter au broker MQTT
  • S'abonner à un sujet
  • Publier périodiquement des messages sur un autre sujet
/* * Ce code Arduino Nano ESP32 a été développé par newbiely.fr * Ce code Arduino Nano 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/arduino-nano-esp32/arduino-nano-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.5"; // 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("Arduino Nano 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("Arduino Nano 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("Arduino Nano ESP32 - MQTT broker Timeout!"); return; } // Subscribe to a topic, the incoming messages are processed by messageHandler() function if (mqtt.subscribe(SUBSCRIBE_TOPIC)) Serial.print("Arduino Nano ESP32 - Subscribed to the topic: "); else Serial.print("Arduino Nano ESP32 - Failed to subscribe to the topic: "); Serial.println(SUBSCRIBE_TOPIC); Serial.println("Arduino Nano 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("Arduino Nano 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("Arduino Nano 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

Pour commencer avec l'Arduino Nano ESP32, suivez ces étapes :

  • Si vous débutez avec l'Arduino Nano ESP32, consultez le tutoriel sur comment configurer l'environnement pour l'Arduino Nano ESP32 dans l'IDE Arduino.
  • Câblez les composants selon le schéma fourni.
  • Connectez la carte Arduino Nano ESP32 à votre ordinateur à l'aide d'un câble USB.
  • Lancez l'IDE Arduino sur votre ordinateur.
  • Sélectionnez la carte Arduino Nano ESP32 et le port COM correspondant.
  • 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 dans l'IDE Arduino pour télécharger le code sur l'Arduino Nano ESP32.

Envoyer un message de l'Arduino Nano ESP32 vers un PC via MQTT

Les codes Arduino Nano ESP32 publient des données sur le sujet MQTT esp32-001/send, Fenêtre d'abonné sur PC souscrit à ce sujet pour recevoir les données.

  • Ouvrez le moniteur série, vous verrez l'Arduino Nano ESP32 publier périodiquement un message sur un sujet.
COM6
Send
Arduino Nano ESP32 - Connecting to MQTT broker Arduino Nano ESP32 - Subscribed to the topic: esp32-001/receive Arduino Nano ESP32 - MQTT broker Connected! Arduino Nano ESP32 - sent to MQTT: - topic: esp32-001/send - payload:{"timestamp":10708,"data":311} Arduino Nano ESP32 - sent to MQTT: - topic: esp32-001/send - payload:{"timestamp":15837,"data":298} Arduino Nano ESP32 - sent to MQTT: - topic: esp32-001/send - payload:{"timestamp":20965,"data":291} Arduino Nano 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 Arduino Nano ESP32 comme ci-dessous :
Command Prompt
Microsoft Windows [Version 10.0.19045.3930] (c) Microsoft Corporation. All rights reserved. C:\WINDOWS\system32>cd /d D:\mosquitto D:\mosquitto>mosquitto_sub -h 192.168.0.5 -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 Arduino Nano ESP32 via MQTT

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

  • Publiez un message sur le sujet auquel Arduino Nano ESP32 est abonné en exécutant la commande suivante dans la fenêtre de l'éditeur :
mosquitto_pub -h 192.168.0.5 -p 1883 -t esp32-001/receive -m "Hello, Arduino Nano ESP32!"
  • Vous verrez que ce message est reçu par l'Arduino Nano ESP32 sur le moniteur série comme ci-dessous :
COM6
Send
Arduino Nano ESP32 - received from MQTT: - topic: esp32-001/receive - payload: Hello, Arduino Nano 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!