Kommunikation zwischen zwei Arduino Nano ESP32 über MQTT

In diesem Tutorial werden wir Folgendes behandeln:

Kommunikation zwischen zwei Arduino-Boards über MQTT

Erforderliche Hardware

2×Arduino Nano ESP32
2×USB-Kabel Typ-C
1×Breadboard-Taster mit Kappe
1×Breadboard-Taster-Kit
1×Panel-Drucktaster
1×Taster-Modul
1×LED Kit
1×LED (red)
1×LED Module
1×220Ω Resistor
1×Breadboard
1×Verbindungskabel
1×(Empfohlen) Schraubklemmen-Erweiterungsboard für Arduino Nano
1×(Empfohlen) Breakout-Erweiterungsboard für Arduino Nano
1×(Empfohlen) Stromverteiler für Arduino Nano ESP32

Oder Sie können die folgenden Kits kaufen:

1×DIYables Sensor-Kit (30 Sensoren/Displays)
1×DIYables Sensor-Kit (18 Sensoren/Displays)
Offenlegung: Einige der in diesem Abschnitt bereitgestellten Links sind Amazon-Affiliate-Links. Wir können eine Provision für Käufe erhalten, die über diese Links getätigt werden, ohne zusätzliche Kosten für Sie. Wir schätzen Ihre Unterstützung.

Kaufhinweis: Um den Verdrahtungsprozess zu vereinfachen, empfehlen wir die Verwendung des LED Module, das mit einem eingebauten Widerstand geliefert wird.

Über Arduino Nano ESP32 und MQTT

Wir haben hier eine detaillierte Anleitung, wie man den Arduino Nano ESP32 mit MQTT verwendet:

Kommunikation zwischen zwei Arduino Nano ESP32 über MQTT

Zwei Arduino Nano ESP32-Boards können miteinander über einen MQTT-Server kommunizieren. Wenn Sie es bevorzugen, dass sie direkt ohne einen MQTT-Server kommunizieren, lesen Sie bitte das Tutorial zu Arduino Nano ESP32 zu Arduino Nano ESP32 TCP-Client/Server-Kommunikation.

Wenn Arduino Nano ESP32 #1 und Arduino Nano ESP32 #2 Daten über einen MQTT-Broker austauschen:

  • Beide Arduino Nano ESP32s verbinden sich mit dem MQTT-Broker.
  • Damit Arduino Nano ESP32 #2 Daten an Arduino Nano ESP32 #1 senden kann:
    • Arduino Nano ESP32 #1 abonniert ein Thema, zum Beispiel: arduino-nano-esp32-1/data.
    • Arduino Nano ESP32 #2 kann Daten an Arduino Nano ESP32 #1 senden, indem die Daten auf das Thema veröffentlicht werden, das von Arduino Nano ESP32 #1 abonniert ist.
  • Ähnlich, damit Arduino Nano ESP32 #1 Daten an Arduino Nano ESP32 #2 senden kann:
    • Arduino Nano ESP32 #2 abonniert ein Thema, zum Beispiel: arduino-nano-esp32-2/data.
    • Arduino Nano ESP32 #1 kann Daten an Arduino Nano ESP32 #2 senden, indem die Daten auf das Thema veröffentlicht werden, das von Arduino Nano ESP32 #2 abonniert ist.

    Durch diese Methode können zwei Arduino Nano ESP32s Daten bidirektional austauschen.

Beispiel-Anwendungsfall

Lassen Sie uns die folgende Anwendung realisieren: Ein Knopf oder Schalter, der mit Arduino Nano ESP32 #1 verbunden ist, steuert eine LED, die mit Arduino Nano ESP32 #2 über MQTT verbunden ist.

Kommunikation zwischen zwei Arduino-Boards

Wie oben erwähnt gibt es einige Anwendungsprotokolle, die wir verwenden können. In diesem Beispiel, um es einfach zu halten, werden wir ein Protokoll selbst definieren (ein selbstdefiniertes Protokoll).

So funktioniert es

Lassen Sie uns ein einfaches Protokoll festlegen:

  • Sowohl Arduino Nano ESP32 #1 als auch Arduino Nano ESP32 #2 verbinden sich mit einem MQTT-Broker (MQTT-Server).
  • Für Arduino Nano ESP32 #1:
    • Arduino Nano ESP32 #1 sendet eine MQTT-Nachricht an ein Thema, wann immer der Zustand eines Schalters sich ändert.
    • Wenn der Knopf oder Schalter eingeschaltet wird, wird das Payload der MQTT-Nachricht auf 1 gesetzt.
    • Wenn der Knopf oder Schalter ausgeschaltet wird, wird das Payload der MQTT-Nachricht auf 0 gesetzt.
  • Für Arduino Nano ESP32 #2:
    • Arduino Nano ESP32 #2 abonniert das Thema.
    • Wenn Arduino Nano ESP32 #2 eine MQTT-Nachricht mit einem Payload von 1 erhält, schaltet es eine LED ein.
    • Wenn Arduino Nano ESP32 #2 eine MQTT-Nachricht mit einem Payload von 0 erhält, schaltet es die LED aus.

    Verdrahtungsdiagramm

    • Arduino Nano ESP32 #1 - Verdrahtungsdiagramm zwischen Arduino Nano ESP32 und Taster
    Arduino Nano ESP32 Taster-Schaltplan

    Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.

    • Arduino Nano ESP32 #2 - Verdrahtungsdiagramm zwischen Arduino Nano ESP32 und LED
    Arduino Nano ESP32 LED-Schaltplan

    Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.

Kommunikation zwischen zwei Arduino Nano ESP32 über MQTT

Arduino Nano ESP32 Code Nr. 1

/* * Dieser Arduino Nano ESP32 Code wurde von newbiely.de entwickelt * Dieser Arduino Nano ESP32 Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/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); }

Arduino Nano ESP32 Code Nr. 2

/* * Dieser Arduino Nano ESP32 Code wurde von newbiely.de entwickelt * Dieser Arduino Nano ESP32 Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/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); } }

Schnelle Schritte

Um mit dem Arduino Nano ESP32 zu beginnen, befolgen Sie diese Schritte:

  • Wenn Sie neu bei Arduino Nano ESP32 sind, lesen Sie das Tutorial zur Einrichtung der Umgebung für Arduino Nano ESP32 in der Arduino IDE wie man die Umgebung für Arduino Nano ESP32 in der Arduino IDE einrichtet.
  • Verdrahten Sie die Bauteile gemäß dem bereitgestellten Diagramm.
  • Schließen Sie das Arduino Nano ESP32-Board mit einem USB-Kabel an Ihren Computer an.
  • Starten Sie die Arduino IDE auf Ihrem Computer.
  • Wählen Sie das Arduino Nano ESP32-Board und seinen entsprechenden COM-Port aus.
  • Verdrahten Sie einen Knopf/Schalter an Arduino Nano ESP32 #1.
  • Verdrahten Sie eine LED an Arduino Nano ESP32 #2.
  • Öffnen Sie die Arduino IDE (die Arduino IDE #1 genannt).
  • Öffnen Sie ein weiteres Arduino IDE-Fenster (genannt Arduino IDE #2) durch Klicken Sie auf das Arduino IDE-Symbol auf Ihrem PC (wichtig!()).
  • Öffnen Sie den Library Manager, indem Sie auf das Library Manager-Symbol in der linken Navigationsleiste der Arduino IDE klicken.
  • Geben Sie im Suchfeld MQTT ein, suchen Sie dann nach der MQTT-Bibliothek von Joel Gaehwiler.
  • Klicken Sie auf die Schaltfläche Install, um die MQTT-Bibliothek zu installieren.
Arduino Nano ESP32 MQTT-Bibliothek
  • Geben Sie ezButton in das Suchfeld ein, dann finden Sie die Button-Bibliothek von ArduinoGetStarted
  • Klicken Sie auf die Schaltfläche Installieren, um die ezButton-Bibliothek zu installieren.
Arduino Nano ESP32 Tasterbibliothek
  • Verbinden Sie Arduino Nano ESP32 #1 mit dem PC über ein USB-Kabel und wählen Sie den COM-Port des Arduino Nano ESP32 #1 in der Arduino IDE #1 aus.
  • Verbinden Sie Arduino Nano ESP32 #2 mit dem PC über ein USB-Kabel und wählen Sie den COM-Port des Arduino Nano ESP32 #2 in der Arduino IDE #2 aus.
  • Kopieren Sie den Code von Arduino Nano ESP32 #1, fügen Sie ihn in die Arduino IDE #1 ein und speichern Sie ihn unter dem Namen Arduino Nano ESP32-1.
  • Kopieren Sie den Code von Arduino Nano ESP32 #2, fügen Sie ihn in die Arduino IDE #2 ein und speichern Sie ihn unter dem Namen Arduino Nano ESP32-2.
  • Ersetzen Sie die WiFi-Informationen (SSID und Passwort) in beiden Codes durch Ihre eigenen.
  • Ersetzen Sie die MQTT-Broker-Adresse in beiden Codes (Domänenname oder IP-Adresse).
  • Laden Sie den Code von Arduino Nano ESP32 #1 auf Arduino Nano ESP32 #1 hoch.
  • Laden Sie den Code von Arduino Nano ESP32 #2 auf Arduino Nano ESP32 #2 hoch.
  • Öffnen Sie den seriellen Monitor in der Arduino IDE #1.
  • Öffnen Sie den seriellen Monitor in der Arduino IDE #2.
  • Drücken und halten Sie den Knopf am Arduino Nano ESP32 #1 → Sehen Sie den LED-Zustand am Arduino Nano ESP32 #2 (AN).
  • Lassen Sie den Knopf am Arduino Nano ESP32 #1 los → sehen Sie den LED-Zustand am Arduino Nano ESP32 #2 (AUS).
  • Drücken, halten und mehrmals den Knopf loslassen.
  • Sehen Sie die Ausgabe in beiden seriellen Monitoren.
    • Serieller Monitor von Arduino Nano ESP32 #1.
    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  
    • Serieller Monitor von 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  

※ UNSERE NACHRICHTEN

  • Sie können gerne den Link zu diesem Tutorial teilen. Bitte verwenden Sie jedoch unsere Inhalte nicht auf anderen Websites. Wir haben viel Mühe und Zeit in die Erstellung der Inhalte investiert, bitte respektieren Sie unsere Arbeit!