Kommunikation zwischen zwei Arduino Nano ESP32-Boards

Dieser Leitfaden zeigt Ihnen, wie Sie eine Verbindung zwischen zwei Arduino Nano ESP32-Geräten herstellen, die TCP/IP über WLAN verwenden, und Daten austauschen. Ein Arduino Nano ESP32 fungiert als TCP-Client, während das andere als TCP-Server fungiert. Lassen Sie uns den Prozess anhand eines Beispiels genauer betrachten:

Kommunikation zwischen zwei ESP32-Modulen

Erforderliche Hardware

2×ESP32 ESP-WROOM-32 Entwicklungsmodul
2×Micro-USB-Kabel
1×Push Button
1×LED Kit
1×LED (red)
1×LED Module
1×Breadboard
1×Verbindungskabel
1×(Empfohlen) Schraubklemmen-Erweiterungsboard für ESP32
1×(Empfohlen) Breakout Expansion Board for ESP32
1×(Empfohlen) Stromverteiler für ESP32

Oder Sie können die folgenden Kits kaufen:

1×DIYables ESP32 Starter-Kit (ESP32 enthalten)
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.

Kommunikation zwischen zwei Arduino Nano ESP32 – Übersicht

Es gibt verschiedene Methoden, um die Kommunikation zwischen "Arduino Nano ESP32 #1" und "Arduino Nano ESP32 #2" zu ermöglichen. Die Wahl der Methode hängt von der Entfernung zwischen ihnen ab. Zu den Optionen gehören:

Methods Distance
SPI very short
I2C very short
UART (TTL) very short
UART (RS-232/485/422) short
Bluetooth short
LoRa long
WiFi unlimited(*)

※ Notiz:

(*):

  • Wenn beide Arduino Nano ESP32-Geräte mit dem Internet verbunden sind, ist die Kommunikationsreichweite unbegrenzt.
  • Wenn beide Arduino Nano ESP32-Geräte nicht mit dem Internet verbunden sind, aber im selben LAN (Local Area Network) verbunden sind, ist die Kommunikationsreichweite auf das LAN beschränkt.

In diesem Tutorial wird WiFi verwendet, um die Kommunikation zwischen zwei ESP32-Boards zu ermöglichen.

Kommunikation zwischen zwei Arduino Nano ESP32 über WLAN

Zwei Arduino Nano ESP32-Geräte können über WiFi unter den folgenden Bedingungen kommunizieren:

  • Wenn sich beide Arduino Nano ESP32-Geräte im selben LAN (Local Area Network) befinden, können sie kommunizieren, ohne eine Internetverbindung herstellen zu müssen.
  • Wenn sich die beiden Arduino Nano ESP32-Geräte in verschiedenen LAN-Netzwerken befinden, müssen sie eine Internetverbindung herstellen, um die Kommunikation zu ermöglichen.

Es gibt zwei Hauptmethoden für die Kommunikation zwischen zwei Arduino Nano ESP32-Geräten:

  • Direkte Kommunikation:
    • In dieser Methode fungiert ein Arduino Nano ESP32 als TCP-Client, während der andere als TCP-Server dient. Sie kommunizieren direkt miteinander über WLAN.

    ^ Indirekte Kommunikation über einen zentralen Server (z. B. MQTT-Server):

    • Beide Arduino Nano ESP32-Geräte fungieren als TCP-Clients und kommunizieren indirekt über einen zentralen Server, wie z. B. ein MQTT-Server. Sie können sich auf das Tutorial ESP32-to-Arduino Nano ESP32 Communication via MQTT beziehen, um Implementierungsdetails zu erhalten.

    Es wird ein Anwendungsprotokoll benötigt, das von zwei Arduino Nano ESP32s verwendet wird, um miteinander zu kommunizieren. Zum Beispiel:

    • Selbstdefiniertes Protokoll über rohes TCP (für direkte Kommunikation verwendet)
    • Modbus TCP (für direkte Kommunikation verwendet)
    • HTTP (für direkte Kommunikation verwendet)
    • Telnet (für direkte Kommunikation verwendet)
    • SSH (für direkte Kommunikation verwendet)
    • MQTT (für indirekte Kommunikation über einen Server verwendet)

Beispielanwendung

Lass uns die folgende Anwendung implementieren: Ein Knopf oder Schalter, der mit Arduino Nano ESP32 #1 verbunden ist, wird eine LED, die mit Arduino Nano ESP32 #2 verbunden ist, über WLAN steuern.

Kommunikation zwischen zwei ESP32-Geräten

Um es zu vereinfachen, verwenden wir ein selbstdefiniertes Protokoll (von uns erstellt, kein Standard).

Selbstdefiniertes Protokoll

Wir definieren ein einfaches Protokoll wie folgt:

  • Stelle eine TCP-Verbindung zwischen Arduino Nano ESP32 #1 und Arduino Nano ESP32 #2
  • Arduino Nano ESP32 #1:
    • TCP-Client: stellt aktiv eine TCP-Verbindungsanfrage an Arduino Nano ESP32 #2
    • Wenn der Zustand des Schalters auf AN geändert wird, sendet Arduino Nano ESP32 #1 ein Byte (Kommando) mit dem Wert 1 an Arduino Nano ESP32 #2.
    • Wenn der Zustand des Schalters auf AUS geändert wird, sendet Arduino Nano ESP32 #1 ein Byte (Kommando) mit dem Wert 0 an Arduino Nano ESP32 #2.
  • Arduino Nano ESP32 #2:
    • TCP-Server: wartet auf eine TCP-Verbindungsanfrage von Arduino Nano ESP32 #1. Wenn es eine TCP-Anfrage gibt, akzeptiert er sie und die Verbindung wird hergestellt.
    • Wenn es ein Byte empfängt:
      • Wenn der Wert 1 ist, LED einschalten
      • Wenn der Wert 0 ist, LED ausschalten

      Verdrahtungsdiagramm

      • Schaltplan für Arduino Nano ESP32 #1: TCP-Client + eine Taste oder einen Schalter
      Arduino Nano ESP32 Taster-Verkabelungsdiagramm

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

      • Schaltplan für Arduino Nano ESP32 #2: TCP-Server + eine LED
      Arduino Nano ESP32 LED-Schaltplan

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

      ※ Notiz:

      Für die LED wird ein Widerstand benötigt, falls sie keinen eingebauten Widerstand hat. Wir haben spezielle Tutorials für Taster und LED. Sie können mehr darüber in folgenden Tutorials erfahren:

      Arduino Nano ESP32 Code für Arduino Nano ESP32 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 */ // ESP32: TCP CLIENT + A BUTTON/SWITCH #include <ezButton.h> #include <WiFi.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* serverAddress = "192.168.0.180"; // CHANGE TO ESP32#2'S IP ADDRESS const int serverPort = 4080; ezButton button(BUTTON_PIN); // create ezButton WiFiClient TCPclient; void setup() { Serial.begin(9600); button.setDebounceTime(50); // set debounce time to 50 milliseconds Serial.println("Arduino Nano ESP32 #1: TCP CLIENT + A BUTTON/SWITCH"); // Connect to Wi-Fi WiFi.begin(WIFI_SSID, WIFI_PASSWORD); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Connecting to WiFi..."); } Serial.println("Connected to WiFi"); // connect to TCP server (Arduino #2) if (TCPclient.connect(serverAddress, serverPort)) { Serial.println("Connected to TCP server"); } else { Serial.println("Failed to connect to TCP server"); } } void loop() { button.loop(); // MUST call the loop() function first if (!TCPclient.connected()) { Serial.println("Connection is disconnected"); TCPclient.stop(); // reconnect to TCP server (Arduino #2) if (TCPclient.connect(serverAddress, serverPort)) { Serial.println("Reconnected to TCP server"); } else { Serial.println("Failed to reconnect to TCP server"); } } if (button.isPressed()) { TCPclient.write('1'); TCPclient.flush(); Serial.println("- The button is pressed, sent command: 1"); } if (button.isReleased()) { TCPclient.write('0'); TCPclient.flush(); Serial.println("- The button is released, sent command: 0"); } }

      Arduino Nano ESP32 Code für Arduino Nano ESP32 #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 */ // ESP32 #2: TCP SERVER + AN LED #include <WiFi.h> #define LED_PIN D5 // The Arduino Nano ESP32 pin connected to LED #define SERVER_PORT 4080 const char WIFI_SSID[] = "YOUR_WIFI_SSID"; // CHANGE TO YOUR WIFI SSID const char WIFI_PASSWORD[] = "YOUR_WIFI_PASSWORD"; // CHANGE TO YOUR WIFI PASSWORD WiFiServer TCPserver(SERVER_PORT); void setup() { Serial.begin(9600); pinMode(LED_PIN, OUTPUT); Serial.println("Arduino Nano ESP32 #2: TCP SERVER + AN LED"); // Connect to Wi-Fi WiFi.begin(WIFI_SSID, WIFI_PASSWORD); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Connecting to WiFi..."); } Serial.println("Connected to WiFi"); // Print your local IP address: Serial.print("ESP32 #2: TCP Server IP address: "); Serial.println(WiFi.localIP()); Serial.println("ESP32 #2: -> Please update the serverAddress in ESP32 #1 code"); // Start listening for a TCP client (from ESP32 #1) TCPserver.begin(); } void loop() { // Wait for a TCP client from ESP32 #1: WiFiClient client = TCPserver.available(); if (client) { // Read the command from the TCP client: char command = client.read(); Serial.print("ESP32 #2: - Received command: "); Serial.println(command); if (command == '1') digitalWrite(LED_PIN, HIGH); // Turn LED on else if (command == '0') digitalWrite(LED_PIN, LOW); // Turn LED off client.stop(); } }

      Schnelle Schritte

      • Wenn Sie ESP32 zum ersten Mal verwenden, sehen Sie wie man die Umgebung für Arduino Nano ESP32 in der Arduino IDE einrichtet.
      • Schließen Sie einen Knopf/Schalter an den Arduino Nano ESP32 #1 an.
      • Schließen Sie eine LED an den Arduino Nano ESP32 #2 an.
      • Öffnen Sie die Arduino IDE (im Folgenden Arduino IDE #1 genannt)
      • Installieren Sie ezButton-Bibliothek in der Arduino IDE
      • Verbinden Sie den Arduino Nano ESP32 #1 per USB-Kabel mit dem PC und wählen Sie den COM-Port des Arduino Nano ESP32 #1 in der Arduino IDE #1 aus.
      • Öffnen Sie ein weiteres Fenster der Arduino IDE (im Folgenden Arduino IDE #2 genannt) durch Klicken auf das Arduino IDE-Symbol auf Ihrem PC (wichtig!())
      • Verbinden Sie den Arduino Nano ESP32 #2 per USB-Kabel mit dem PC und wählen Sie den COM-Port des Arduino Nano ESP32 #2 in der Arduino IDE #2 aus.
      • Kopieren Sie den Code des Arduino Nano ESP32 #1, fügen Sie ihn in die Arduino IDE #1 ein und speichern Sie ihn (benannt ESP321).
      • Kopieren Sie den Code des Arduino Nano ESP32 #2, fügen Sie ihn in die Arduino IDE #2 ein und speichern Sie ihn (benannt ESP322).
      • Laden Sie zuerst den Code des Arduino Nano ESP32 #2 in den Arduino Nano ESP32 #2.
      • Öffnen Sie den Seriellen Monitor in der Arduino IDE #2 und ermitteln Sie die TCP-Server-IP-Adresse.
      COM6
      Send
      Arduino Nano ESP32 #2: TCP SERVER + AN LED TCP Server IP address: 192.168.0.2 -> Please update the serverAddress in Arduino Nano ESP32 #1 code
      Autoscroll Show timestamp
      Clear output
      9600 baud  
      Newline  
      • Aktualisiere die TCP-Server-IP-Adresse im Code des Arduino Nano ESP32 #1
      • Lade den Arduino Nano ESP32 #1-Code auf das Arduino Nano ESP32 #1
      • Öffne den seriellen Monitor in der Arduino IDE #1
      • Drücke und halte den Knopf am Arduino Nano ESP32 #1 → sieh den LED-Zustand am Arduino Nano ESP32 #2 (AN)
      • Lass den Knopf am Arduino Nano ESP32 #1 los → sieh den LED-Zustand am Arduino Nano ESP32 #2 (AUS)
      • Wiederhole den oben beschriebenen Vorgang mehrmals.
      • Sieh die Ausgaben auf beiden seriellen Monitoren.
      • Serieller Monitor von Arduino Nano ESP32 #1
      COM6
      Send
      Arduino Nano ESP32 #1: TCP CLIENT + A BUTTON/SWITCH Arduino Nano ESP32 #1: Connected to TCP server Arduino Nano ESP32 #1: - The button is pressed, sent command: 1 Arduino Nano ESP32 #1: - The button is released, sent command: 0 Arduino Nano ESP32 #1: - The button is pressed, sent command: 1 Arduino Nano ESP32 #1: - The button is released, sent command: 0 Arduino Nano ESP32 #1: - The button is pressed, sent command: 1 Arduino Nano ESP32 #1: - The button is released, sent command: 0
      Autoscroll Show timestamp
      Clear output
      9600 baud  
      Newline  
      • Serieller Monitor von Arduino Nano ESP32 #2
      COM6
      Send
      Arduino Nano ESP32 #2: TCP SERVER + AN LED Arduino Nano ESP32 #2: TCP Server IP address: 192.168.0.2 Arduino Nano ESP32 #2: -> Please update the serverAddress in Arduino Nano ESP32 #1 code Arduino Nano ESP32 #2: - Received command: 1 Arduino Nano ESP32 #2: - Received command: 0 Arduino Nano ESP32 #2: - Received command: 1 Arduino Nano ESP32 #2: - Received command: 0 Arduino Nano ESP32 #2: - Received command: 1 Arduino Nano ESP32 #2: - Received command: 0
      Autoscroll Show timestamp
      Clear output
      9600 baud  
      Newline  

      ※ Notiz:

      • (): Wenn Sie das Arduino-IDE-Fenster Nr. 2 über „Datei“ → „Neu“ oder „Öffnen“ aus dem Arduino-IDE-Fenster Nr. 2 öffnen, können Sie NICHT zwei serielle Monitore für zwei Arduino Nano ESP32 gleichzeitig auf demselben PC öffnen.
      • Es gibt eine Alternative zu diesem selbst definierten Protokoll. Es handelt sich um Modbus TCP. Das Modbus-Protokoll ist standardisiert, es hat viele Vorteile gegenüber dem selbst definierten Protokoll. Weitere Informationen finden Sie im Tutorial Arduino Nano ESP32 - Modbus Tutorial

Video Tutorial

Wir erwägen die Erstellung von Video-Tutorials. Wenn Sie Video-Tutorials für wichtig halten, abonnieren Sie bitte unseren YouTube-Kanal , um uns zu motivieren, die Videos zu erstellen.

Wie man zwei Arduino Nano ESP32 über das Internet verbindet

Siehe Wie man zwei Geräte über das Internet verbindet

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