Communicatie tussen twee ESP32

Deze tutorial legt uit hoe u een verbinding maakt tussen twee ESP32 via TCP/IP over WiFi en hoe u data uitwisselt. Eén ESP32 fungeert als TCP-client en de andere als TCP-server. We leren in detail aan de hand van een voorbeeld:

communicatie tussen twee ESP32

Benodigdheden hardware

2×ESP32 ESP-WROOM-32 Ontwikkelingsmodule
2×Micro USB-kabel
1×(optioneel) DC Power Jack
1×Breadboard (experimenteerprint)
1×Jumper wires (verbindingsdraden)
1×(Aanbevolen) Schroefklem Uitbreidingsboard voor ESP32
1×(Aanbevolen) Breakout Expansion Board for ESP32
1×(Aanbevolen) Stromsplitter voor ESP32

Of u kunt de volgende kits kopen:

1×DIYables Sensorkit (30 sensoren/displays)
1×DIYables Sensorkit (18 sensoren/displays)
Openbaarmaking: Sommige van de links in deze sectie zijn Amazon-affiliate links. We kunnen een commissie ontvangen voor aankopen die via deze links worden gedaan, zonder extra kosten voor u. We waarderen uw steun.

Communicatie tussen twee ESP32 - Overzicht

Er zijn veel manieren waarop ESP32 #1 kan communiceren met ESP32 #2. Afhankelijk van de afstand kunnen we één van de onderstaande methoden kiezen:

Methode Afstand
SPI zeer kort
I2C zeer kort
UART (TTL) zeer kort
UART (RS-232/485/422) kort
Bluetooth kort
LoRa lang
WiFi onbeperkt(*)

※ Notiz:

(*):

  • Als we beide ESP32 verbinden met het internet, is de communicatiefafstand onbeperkt.
  • Als we beide ESP32 niet met het internet verbinden maar ze in hetzelfde LAN-netwerk plaatsen, is de communicatiefafstand beperkt tot het LAN-netwerk.

In deze tutorial gebruiken we WiFi voor communicatie tussen twee ESP32.

Communicatie tussen twee ESP32 via WiFi

Twee ESP32 kunnen met elkaar communiceren via WiFi als:

  • Beide ESP32 in hetzelfde LAN-netwerk zitten. Verbinden met internet is dan niet nodig.
  • Beide ESP32 in verschillende LAN-netwerken zitten. Verbinding met internet is dan wel noodzakelijk.

Er zijn twee manieren waarop twee ESP32 met elkaar kunnen communiceren:

  • Twee ESP32 communiceren direct met elkaar: één ESP32 is TCP-client en de andere TCP-server.
  • Twee ESP32 communiceren indirect via een centraal server (bijv. MQTT-server): beide ESP32 zijn TCP-clients. Zie ESP32-to-ESP32 communicatie via MQTT tutorial.

Er is een applicatieprotocol nodig dat twee ESP32 gebruiken om met elkaar te communiceren. Voorbeelden zijn:

  • Zelfgedefinieerd protocol via raw TCP (direct)
  • Modbus TCP (direct)
  • HTTP (direct)
  • Telnet (direct)
  • SSH (direct)
  • MQTT (indirect via een server)

※ Notiz:

  • UDP-protocol valt buiten het bereik van deze tutorial.

Voorbeeldtoepassing

Laten we de volgende toepassing realiseren: Een knop/schakelaar verbonden met ESP32 #1 bestuurt een LED verbonden met ESP32 #2 via WiFi.

communicatie tussen twee ESP32

Om het eenvoudig te houden gebruiken we in deze tutorial een zelfgedefinieerd protocol (door ons bepaald, geen standaard).

Zelfgedefinieerd protocol

We definiëren een eenvoudig protocol als volgt:

  • Maak een TCP-verbinding tussen ESP32 #1 en ESP32 #2.
  • ESP32 #1:
    • TCP-client: initieert actief een TCP-verbinding met ESP32 #2
    • Als de status van de knop op ON verandert, zendt ESP32 #1 een byte (commando) met waarde 1 naar ESP32 #2.
    • Als de status van de knop op OFF verandert, zendt ESP32 #1 een byte (commando) met waarde 0 naar ESP32 #2.
  • ESP32 #2:
    • TCP-server: luistert naar TCP-verbindingsverzoeken van ESP32 #1. Als er een verzoek is, accepteert het en wordt de verbinding tot stand gebracht.
    • Bij ontvangst van een byte:
      • Waarde 1 = LED aan
      • Waarde 0 = LED uit

      Aansluitschema

      • Aansluitschema voor ESP32 #1: TCP CLIENT + EEN KNOP/SCHAKELAAR
      ESP32 knop aansluitschema

      This image is created using Fritzing. Click to enlarge image

      • Aansluitschema voor ESP32 #2: TCP SERVER + EEN LED
      ESP32 LED aansluitschema

      This image is created using Fritzing. Click to enlarge image

      ※ Notiz:

      Gebruik een weerstand bij de LED als deze niet ingebouwd is. We hebben speciale tutorials voor knop en LED. Meer informatie vindt u in:

      ESP32-code voor ESP32 #1

      /* * Deze ESP32 code is ontwikkeld door newbiely.nl * Deze ESP32 code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/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 voor ESP32 #2

      /* * Deze ESP32 code is ontwikkeld door newbiely.nl * Deze ESP32 code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/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(); } }

      Snel aan de slag

      • Als u voor het eerst met ESP32 werkt, zie hoe u de omgeving instelt voor ESP32 in Arduino IDE.
      • Sluit een knop/schakelaar aan op ESP32 #1
      • Sluit een LED aan op ESP32 #2
      • Open Arduino IDE (noem dit Arduino IDE #1)
      • Installeer de ezButton library in Arduino IDE
      • Verbind ESP32 #1 met de PC via USB-kabel en selecteer de COM-poort van ESP32 #1 in Arduino IDE #1
      • Open een tweede Arduino IDE-venster (noem dit Arduino IDE #2) door te klikken op het Arduino IDE-pictogram op uw PC (belangrijk!())
      • Verbind ESP32 #2 met de PC via USB-kabel en selecteer de COM-poort van ESP32 #2 in Arduino IDE #2
      • Kopieer de code van ESP32 #1, plak deze in Arduino IDE #1 en sla op (naam ESP321)
      • Kopieer de code van ESP32 #2, plak deze in Arduino IDE #2 en sla op (naam ESP322)
      • Upload eerst de code van ESP32 #2 naar ESP32 #2
      • Open de Seriële Monitor in Arduino IDE #2, noteer het IP-adres van de TCP-server
      COM6
      Send
      ESP32 #2: TCP SERVER + EEN LED TCP Server IP-adres: 192.168.0.2 -> Werk het serverAddress bij in de code van ESP32 #1
      Autoscroll Show timestamp
      Clear output
      9600 baud  
      Newline  
      • Werk het IP-adres van de TCP-server bij in de code van ESP32 #1
      • Upload de code van ESP32 #1 naar ESP32 #1
      • Open de Seriële Monitor in Arduino IDE #1
      • Druk de knop op ESP32 #1 in → zie de status van de LED op ESP32 #2 (AAN)
      • Laat de knop op ESP32 #1 los → zie status van LED op ESP32 #2 (UIT)
      • Voer de bovenstaande handeling meerdere keren uit
      • Bekijk de output op beide Seriële Monitoren
        • Seriële Monitor van ESP32 #1
        COM6
        Send
        ESP32 #1: TCP CLIENT + EEN KNOP/SCHAKELAAR ESP32 #1: Verbonden met TCP server ESP32 #1: - Knop ingedrukt, verzend commando: 1 ESP32 #1: - Knop losgelaten, verzend commando: 0 ESP32 #1: - Knop ingedrukt, verzend commando: 1 ESP32 #1: - Knop losgelaten, verzend commando: 0 ESP32 #1: - Knop ingedrukt, verzend commando: 1 ESP32 #1: - Knop losgelaten, verzend commando: 0
        Autoscroll Show timestamp
        Clear output
        9600 baud  
        Newline  
        • Seriële Monitor van ESP32 #2
        COM6
        Send
        ESP32 #2: TCP SERVER + EEN LED ESP32 #2: TCP Server IP-adres: 192.168.0.2 ESP32 #2: -> Werk het serverAddress bij in de code van ESP32 #1 ESP32 #2: - Commando ontvangen: 1 ESP32 #2: - Commando ontvangen: 0 ESP32 #2: - Commando ontvangen: 1 ESP32 #2: - Commando ontvangen: 0 ESP32 #2: - Commando ontvangen: 1 ESP32 #2: - Commando ontvangen: 0
        Autoscroll Show timestamp
        Clear output
        9600 baud  
        Newline  

        ※ Notiz:

        • (): Als u Arduino IDE #2 opent via "Bestand" → "Nieuw" of "Openen" vanuit Arduino IDE #2 window, is het NIET mogelijk om twee Seriële Monitoren tegelijk te openen voor twee ESP32 op dezelfde PC.
        • Er is een alternatief voor dit zelfgedefinieerde protocol: Modbus TCP. Het Modbus-protocol is gestandaardiseerd en heeft veel voordelen ten opzichte van het zelfgedefinieerde protocol. Zie ESP32 - Modbus tutorial voor meer informatie.

Video Tutorial

We overwegen het maken van videotutorials. Als u videotutorials belangrijk vindt, abonneer u dan op ons YouTube-kanaal om ons te motiveren de video's te maken.

Bekijk onze video-tutorial voor een visuele begeleiding bij dit project! De video biedt extra inzichten en helpt u sneller te begrijpen hoe u twee ESP32 met elkaar laat communiceren via WiFi.

Hoe twee ESP32 verbinden via internet

Zie Hoe twee apparaten verbinden via internet

Reacties

※ ONZE BERICHTEN

  • U bent welkom om de link naar deze tutorial te delen. Gebruik onze inhoud echter niet op andere websites. We hebben veel moeite en tijd gestoken in het maken van de inhoud, respecteer alstublieft ons werk!