Kommunikation zwischen zwei ESP32-Geräten

Dieses Tutorial zeigt dir, wie man eine Verbindung zwischen zwei ESP32-Geräten über TCP/IP über WLAN herstellt und Daten austauscht. Ein ESP32 fungiert als TCP-Client und der andere als TCP-Server. Wir lernen außerdem im Detail anhand eines Beispiels:

Kommunikation zwischen zwei ESP32s

Erforderliche Hardware

2×ESP32 ESP-WROOM-32 Entwicklungsmodul
2×Micro-USB-Kabel
1×(Optional) DC-Stromanschluss
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.

Kommunikation zwischen zwei ESP32-Geräten – Übersicht

Es gibt viele Möglichkeiten, wie ESP32 #1 mit ESP32 #2 kommunizieren kann. Je nach Abstand können wir eine der unten genannten Möglichkeiten auswählen:

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 wir beide ESP32 mit dem Internet verbinden, ist die Reichweite der Kommunikation unbegrenzt
  • Wenn wir beide ESP32 nicht mit dem Internet verbinden, sondern sie im selben LAN verbinden, ist die Reichweite der Kommunikation auf das LAN beschränkt

Dieses Tutorial wird WiFi zur Kommunikation zwischen zwei ESP32 verwenden.

Kommunikation zwischen zwei ESP32s über WLAN

Zwei ESP32s können über WLAN miteinander kommunizieren, wenn:

  • Zwei ESP32 im gleichen LAN-Netzwerk. Sie benötigen keinen Internetzugang.
  • Zwei ESP32 in verschiedenen LAN-Netzen. Sie müssen eine Internetverbindung herstellen.

Es gibt zwei Möglichkeiten, wie zwei ESP32 miteinander kommunizieren können.

  • Zwei ESP32 kommunizieren direkt miteinander: Ein ESP32 ist ein TCP-Client, der andere ist ein TCP-Server.
  • Zwei ESP32 kommunizieren indirekt miteinander über einen zentralen Server (z. B. MQTT-Server): Beide ESP32 sind TCP-Clients. Siehe das Tutorial ESP32-to-ESP32 Communication via MQTT.

Es braucht ein Anwendungsprotokoll, das zwei ESP32s verwenden, um miteinander zu kommunizieren. Zum Beispiel:

  • Eigenes Protokoll über reines TCP (direkt)
  • Modbus TCP (direkt)
  • HTTP (direkt)
  • Telnet (direkt)
  • SSH (direkt)
  • MQTT (indirekt über einen Server)

※ Notiz:

  • UDP-Protokoll liegt außerhalb des Rahmens dieses Tutorials.

Beispielanwendung

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

Kommunikation zwischen zwei ESP32.

Um es einfach zu machen, wird dieses Tutorial ein von uns selbst definiertes Protokoll verwenden (von uns definiert, kein Standard).

Selbstdefiniertes Protokoll

Wir definieren ein einfaches Protokoll wie folgt:

  • Stelle eine TCP-Verbindung zwischen ESP32 #1 und ESP32 #2 her
  • ESP32 #1:
    • TCP-Client: stellt aktiv eine TCP-Verbindungsanfrage an ESP32 #2
    • Wenn der Schalterzustand auf EIN geändert wird, sendet ESP32 #1 ein Byte (Befehl) mit dem Wert 1 an ESP32 #2.
    • Wenn der Schalterzustand auf AUS geändert wird, sendet ESP32 #1 ein Byte (Befehl) mit dem Wert 0 an ESP32 #2.
  • ESP32 #2:
    • TCP-Server: hört auf eine TCP-Verbindungsanfrage von ESP32 #1. Falls es eine TCP-Anfrage gibt, akzeptiert er sie und die Verbindung wird hergestellt.
    • Empfängt es ein Byte:
      • Ist der Wert 1, LED einschalten
      • Ist der Wert 0, LED ausschalten

      Schaltplan

      • Schaltplan für ESP32 #1: TCP-Client + einen Knopf/Schalter
      ESP32-Taster-Verdrahtungsdiagramm

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

      Wenn Sie nicht wissen, wie Sie ESP32 und andere Komponenten mit Strom versorgen, finden Sie Anleitungen im folgenden Tutorial: Wie man ESP32 mit Strom versorgt.

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

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

      ※ Notiz:

      Eine LED benötigt einen Vorwiderstand, falls sie keinen eingebauten Widerstand hat. Wir haben spezielle Tutorials für Taster und LED. Weitere Informationen dazu finden Sie unter:

      ESP32-Code für ESP32 #1

      /* * Dieser ESP32 Code wurde von newbiely.de entwickelt * Dieser 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/esp32/communication-between-two-esp32 */ // ESP32: TCP CLIENT + A BUTTON/SWITCH #include <ezButton.h> #include <WiFi.h> #define BUTTON_PIN 21 // ESP32 pin GPIO21 connected to button const char* ssid = "YOUR_WIFI_SSID"; // CHANGE TO YOUR WIFI SSID const char* 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("ESP32: TCP CLIENT + A BUTTON/SWITCH"); // Connect to Wi-Fi WiFi.begin(ssid, 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"); } }

      ESP32-Code für ESP32 Nr. 2

      /* * Dieser ESP32 Code wurde von newbiely.de entwickelt * Dieser 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/esp32/communication-between-two-esp32 */ // ESP32 #2: TCP SERVER + AN LED #include <WiFi.h> #define LED_PIN 18 // ESP32 pin GPIO18 connected to LED #define SERVER_PORT 4080 const char* ssid = "YOUR_WIFI_SSID"; // CHANGE TO YOUR WIFI SSID const char* password = "YOUR_WIFI_PASSWORD"; // CHANGE TO YOUR WIFI PASSWORD WiFiServer TCPserver(SERVER_PORT); void setup() { Serial.begin(9600); pinMode(LED_PIN, OUTPUT); Serial.println("ESP32 #2: TCP SERVER + AN LED"); // Connect to Wi-Fi WiFi.begin(ssid, 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 sich wie man die Umgebung für ESP32 in der Arduino IDE einrichtet an.
      • Verbinden Sie einen Knopf oder Schalter mit ESP32 #1.
      • Verbinden Sie eine LED mit ESP32 #2.
      • Öffnen Sie die Arduino IDE (auch Arduino IDE #1 genannt).
      • Installieren Sie ezButton-Bibliothek in der Arduino IDE.
      • Verbinden Sie ESP32 #1 über USB-Kabel mit dem PC und wählen Sie den COM-Port von ESP32 #1 in Arduino IDE #1 aus.
      • Öffnen Sie ein weiteres Arduino IDE-Fenster (genannt Arduino IDE #2) indem Sie auf das Arduino IDE-Symbol auf Ihrem PC klicken (wichtig!())
      • Verbinden Sie ESP32 #2 über USB-Kabel mit dem PC und wählen Sie den COM-Port von ESP32 #2 in der Arduino IDE #2 aus.
      • Kopieren Sie den Code von ESP32 #1, fügen Sie ihn in Arduino IDE #1 ein und speichern Sie ihn (benannt ESP321).
      • Kopieren Sie den Code von ESP32 #2, fügen Sie ihn in Arduino IDE #2 ein und speichern Sie ihn (benannt ESP322).
      • Laden Sie zuerst den Code von ESP32 #2 auf ESP32 #2 hoch.
      • Öffnen Sie den Serial Monitor in Arduino IDE #2, um die TCP-Server-IP-Adresse zu erhalten.
      COM6
      Send
      ESP32 #2: TCP SERVER + AN LED TCP Server IP address: 192.168.0.2 -> Please update the serverAddress in ESP32 #1 code
      Autoscroll Show timestamp
      Clear output
      9600 baud  
      Newline  
      • Aktualisieren Sie die TCP-Server-IP-Adresse im ESP32 #1-Code
      • Laden Sie den ESP32 #1-Code auf ESP32 #1 hoch
      • Öffnen Sie den seriellen Monitor in der Arduino-IDE #1
      • Drücken und halten Sie den Knopf am ESP32 #1 → beobachten Sie den Zustand der LED am ESP32 #2 (AN)
      • Lassen Sie den Knopf am ESP32 #1 los → beobachten Sie den Zustand der LED am ESP32 #2 (AUS)
      • Wiederholen Sie den obigen Vorgang mehrmals.
      • Sehen Sie die Ausgabe auf beiden seriellen Monitoren
        • Serieller Monitor von ESP32 #1
        COM6
        Send
        ESP32 #1: TCP CLIENT + A BUTTON/SWITCH ESP32 #1: Connected to TCP server ESP32 #1: - The button is pressed, sent command: 1 ESP32 #1: - The button is released, sent command: 0 ESP32 #1: - The button is pressed, sent command: 1 ESP32 #1: - The button is released, sent command: 0 ESP32 #1: - The button is pressed, sent command: 1 ESP32 #1: - The button is released, sent command: 0
        Autoscroll Show timestamp
        Clear output
        9600 baud  
        Newline  
        • Serieller Monitor von ESP32 #2
        COM6
        Send
        ESP32 #2: TCP SERVER + AN LED ESP32 #2: TCP Server IP address: 192.168.0.2 ESP32 #2: -> Please update the serverAddress in ESP32 #1 code ESP32 #2: - Received command: 1 ESP32 #2: - Received command: 0 ESP32 #2: - Received command: 1 ESP32 #2: - Received command: 0 ESP32 #2: - Received command: 1 ESP32 #2: - Received command: 0
        Autoscroll Show timestamp
        Clear output
        9600 baud  
        Newline  

        ※ Notiz:

        • (): Wenn Sie das Arduino IDE #2-Fenster über „Datei“ → „Neu“ oder „Öffnen“ aus dem Arduino IDE #2-Fenster öffnen, können Sie nicht zwei Serial-Monitore für zwei 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 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 ESP32s ü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!