Communication entre deux Arduino Nano ESP32 via MQTT

Dans ce tutoriel, nous allons couvrir les points suivants :

communication entre deux Arduino via MQTT

Préparation du matériel

2×Arduino Nano ESP32
2×USB Cable Type-C
1×Push Button
1×(Optional) Panel-mount Push Button
1×LED
1×220 ohm resistor
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

Nous avons un tutoriel détaillé sur l'utilisation de l'Arduino Nano ESP32 avec MQTT ici :

Communication entre deux Arduino Nano ESP32 via MQTT

Deux cartes Arduino Nano ESP32 peuvent communiquer entre elles à l'aide d'un serveur MQTT. Si vous préférez qu'elles communiquent directement sans utiliser de serveur MQTT, veuillez consulter le tutoriel sur la communication TCP Client/Serveur entre deux Arduino Nano ESP32.

Lorsque Arduino Nano ESP32 #1 et Arduino Nano ESP32 #2 échangent des données via un courtier MQTT :

  • Les deux Arduino Nano ESP32s se connectent au courtier MQTT.
  • Pour faire envoyer des données par Arduino Nano ESP32 #2 à Arduino Nano ESP32 #1 :
    • Arduino Nano ESP32 #1 s'abonne à un sujet, par exemple : arduino-nano-esp32-1/data.
    • Arduino Nano ESP32 #2 peut envoyer des données à Arduino Nano ESP32 #1 en publiant les données sur le sujet auquel Arduino Nano ESP32 #1 est abonné.
  • De même, pour faire envoyer des données par Arduino Nano ESP32 #1 à Arduino Nano ESP32 #2 :
    • Arduino Nano ESP32 #2 s'abonne à un sujet, par exemple : arduino-nano-esp32-2/data.
    • Arduino Nano ESP32 #1 peut envoyer des données à Arduino Nano ESP32 #2 en publiant les données sur le sujet auquel Arduino Nano ESP32 #2 est abonné.

    En suivant cette méthode, deux Arduino Nano ESP32 peuvent échanger des données de manière bidirectionnelle.

Exemple de cas d'utilisation

Réalisons l'application suivante : Un bouton/interrupteur connecté à Arduino Nano ESP32 #1 contrôle une LED connectée à Arduino Nano ESP32 #2 via MQTT.

communication entre deux Arduino

Comme mentionné ci-dessus, il existe certains protocoles d'application que nous pouvons utiliser. Dans cet exemple, pour simplifier, nous définirons un protocole par nous-même (un protocole auto-défini).

Comment ça fonctionne

Établissons un protocole simple :

  • Les Arduino Nano ESP32 #1 et Arduino Nano ESP32 #2 se connectent à un courtier MQTT (serveur MQTT).
  • Pour l'Arduino Nano ESP32 #1 :
    • L'Arduino Nano ESP32 #1 envoie un message MQTT à un sujet chaque fois que l'état d'un interrupteur change.
    • Lorsque le bouton ou l'interrupteur est activé, la charge utile du message MQTT est définie sur 1.
    • Lorsque le bouton ou l'interrupteur est désactivé, la charge utile du message MQTT est définie sur 0.
  • Pour l'Arduino Nano ESP32 #2 :
    • L'Arduino Nano ESP32 #2 s'abonne au sujet.
    • Si l'Arduino Nano ESP32 #2 reçoit un message MQTT avec une charge utile de 1, il allume une LED.
    • Si l'Arduino Nano ESP32 #2 reçoit un message MQTT avec une charge utile de 0, il éteint la LED.

    Schéma de câblage

    • Arduino Nano ESP32 #1 - Schéma de câblage entre l'Arduino Nano ESP32 et le bouton
    Schéma de câblage du bouton Arduino Nano ESP32

    This image is created using Fritzing. Click to enlarge image

    • Arduino Nano ESP32 #2 - Schéma de câblage entre l'Arduino Nano ESP32 et la LED
    Schéma de câblage de la LED Arduino Nano ESP32

    This image is created using Fritzing. Click to enlarge image

Communication entre deux Arduino Nano ESP32 via MQTT

Code Arduino Nano ESP32 #1

/* * 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/communication-between-two-arduino-nano-esp32-via-mqtt */ // ESP32 #1: CONNECTED TO A BUTTON/SWITCH, ACTED AS A MQTT PUBLISHER #include <WiFi.h> #include <MQTTClient.h> #include <ezButton.h> #define BUTTON_PIN D2 // The Arduino Nano ESP32 pin connected to the button 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 char MQTT_BROKER_ADRRESS[] = "192.168.0.5"; // CHANGE TO MQTT BROKER'S IP ADDRESS const int MQTT_PORT = 1883; const char MQTT_CLIENT_ID[] = "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 MQTT_TOPIC[] = "esp32/command"; // CHANGE IT AS YOU DESIRE WiFiClient network; MQTTClient mqtt = MQTTClient(256); ezButton button(BUTTON_PIN); // create ezButton that attach to pin 7 void setup() { Serial.begin(9600); button.setDebounceTime(100); // set debounce time to 100 milliseconds Serial.println("Arduino Nano ESP32 #1: CONNECTED TO A BUTTON/SWITCH, ACTED AS A MQTT PUBLISHER"); 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(); button.loop(); // MUST call the loop() function first if (button.isPressed()) { Serial.println("- The button is pressed, send command: 1"); sendToMQTT('1'); } if (button.isReleased()) { Serial.println("- The button is released, send command: 0"); sendToMQTT('0'); } } void connectToMQTT() { // Connect to the MQTT broker mqtt.begin(MQTT_BROKER_ADRRESS, MQTT_PORT, network); 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; } Serial.println("Arduino Nano ESP32 - MQTT broker Connected!"); } void sendToMQTT(char command) { char messageBuffer[1]; messageBuffer[0] = command; mqtt.publish(MQTT_TOPIC, messageBuffer); Serial.println("Arduino Nano ESP32 - sent to MQTT:"); Serial.print("- topic: "); Serial.println(MQTT_TOPIC); Serial.print("- payload:"); Serial.println(messageBuffer); }

Code Arduino Nano ESP32 #2

/* * 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/communication-between-two-arduino-nano-esp32-via-mqtt */ // ESP32 #2: CONNECTED TO A LED, ACTED AS A MQTT SUBSCRIBER #include <WiFi.h> #include <MQTTClient.h> #define LED_PIN D5 // The Arduino Nano ESP32 pin connected to LED 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 char MQTT_BROKER_ADRRESS[] = "192.168.0.5"; // CHANGE TO MQTT BROKER'S IP ADDRESS const int MQTT_PORT = 1883; const char MQTT_CLIENT_ID[] = "esp32-002"; // 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 MQTT_TOPIC[] = "esp32/command"; // CHANGE IT AS YOU DESIRE WiFiClient network; MQTTClient mqtt = MQTTClient(256); void setup() { Serial.begin(9600); pinMode(LED_PIN, OUTPUT); Serial.println("Arduino Nano ESP32 #2: CONNECTED TO A LED, ACTED AS A MQTT SUBSCRIBER"); 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(); } void connectToMQTT() { // Connect to the MQTT broker mqtt.begin(MQTT_BROKER_ADRRESS, MQTT_PORT, network); // Create a handler for incoming messages mqtt.onMessage(messageReceived); 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 messageReceived() function if (mqtt.subscribe(MQTT_TOPIC)) Serial.print("Arduino Nano ESP32 - Subscribed to the topic: "); else Serial.print("Arduino Nano ESP32 - Failed to subscribe to the topic: "); Serial.println(MQTT_TOPIC); Serial.println("Arduino Nano ESP32 - MQTT broker Connected!"); } void messageReceived(String &topic, String &payload) { Serial.println("Arduino Nano ESP32 - received from MQTT:"); Serial.println("- topic: " + topic); Serial.print("- payload: "); Serial.println(payload); char command = payload[0]; if (command == '1') { Serial.print("- Received command: "); Serial.print(command); Serial.println(" => Turned LED on"); digitalWrite(LED_PIN, HIGH); // Turn LED on } else if (command == '0') { Serial.print("- Received command: "); Serial.print(command); Serial.println(" => Turned LED off"); digitalWrite(LED_PIN, LOW); // Turn LED off } else { Serial.print("- Received an unsupported command: "); Serial.println(command); } }

Étapes rapides

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

  • Si vous êtes nouveau avec l'Arduino Nano ESP32, référez-vous au 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.
  • Connectez un bouton/interrupteur à Arduino Nano ESP32 #1
  • Connectez une LED à Arduino Nano ESP32 #2
  • Ouvrez Arduino IDE (appelé Arduino IDE #1)
  • Ouvrez une autre fenêtre Arduino IDE (appelé Arduino IDE #2) en cliquant sur l'icône Arduino IDE sur votre PC (important !(**))
  • 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 Arduino Nano ESP32
  • Tapez ezButton dans la zone de recherche, puis trouvez la bibliothèque de boutons par Arduino Nano ESP32GetStarted.
  • Cliquez sur le bouton Install pour installer la bibliothèque ezButton.
Bibliothèque de boutons Arduino Nano ESP32.
  • Connectez Arduino Nano ESP32 #1 au PC via un câble USB et sélectionnez le port COM de Arduino Nano ESP32 #1 sur Arduino IDE #1
  • Connectez Arduino Nano ESP32 #2 au PC via un câble USB et sélectionnez le port COM de Arduino Nano ESP32 #2 sur Arduino IDE #2
  • Copiez le code de Arduino Nano ESP32 #1, collez-le dans Arduino IDE #1 et enregistrez-le (nommé Arduino Nano ESP32-1)
  • Copiez le code de Arduino Nano ESP32 #2, collez-le dans Arduino IDE #2 et enregistrez-le (nommé Arduino Nano ESP32-2)
  • Remplacez les informations WiFi (SSID et mot de passe) dans les deux codes par les vôtres.
  • Remplacez l'adresse du courtier MQTT dans les deux codes (nom de domaine ou adresse IP).
  • Téléchargez le code de Arduino Nano ESP32 #1 sur Arduino Nano ESP32 #1
  • Téléchargez le code de Arduino Nano ESP32 #2 sur Arduino Nano ESP32 #2
  • Ouvrez le moniteur série sur Arduino IDE #1
  • Ouvrez le moniteur série sur Arduino IDE #2
  • Appuyez et maintenez le bouton sur Arduino Nano ESP32 #1 → observez l'état de la LED sur Arduino Nano ESP32 #2 (ON)
  • Relâchez le bouton sur Arduino Nano ESP32 #1 → observez l'état de la LED sur Arduino Nano ESP32 #2 (OFF)
  • Appuyez, maintenez et relâchez le bouton plusieurs fois.
  • Consultez les sorties sur les deux moniteurs série
COM6
Send
Arduino Nano ESP32 #1: CONNECTED TO A BUTTON/SWITCH, ACTED AS A MQTT PUBLISHER Arduino Nano ESP32 - Attempting to connect to SSID: YOUR_WIFI_SSID Arduino Nano ESP32 - Connecting to MQTT broker Arduino Nano ESP32 - MQTT broker Connected! - The button is pressed, send command: 1 Arduino Nano ESP32 - sent to MQTT: - topic: arduino/command - payload:1 - The button is released, send command: 0 Arduino Nano ESP32 - sent to MQTT: - topic: arduino/command - payload:0
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  
  • Moniteur série de Arduino Nano ESP32 #2
COM6
Send
Arduino Nano ESP32 #2: CONNECTED TO A LED, ACTED AS A MQTT SUBSCRIBER Arduino Nano ESP32 - Attempting to connect to SSID: YOUR_WIFI_SSID Arduino Nano ESP32 - Connecting to MQTT broker Arduino Nano ESP32 - Subscribed to the topic: arduino/command Arduino Nano ESP32 - MQTT broker Connected! Arduino Nano ESP32 - received from MQTT: - topic: arduino/command - payload: 1 - Received command: 1 => Turned LED on Arduino Nano ESP32 - received from MQTT: - topic: arduino/command - payload: 0 - Received command: 0 => Turned LED off
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

※ 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!