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:
- ESP32 #1 is verbonden met een knop en werkt als TCP-client.
- ESP32 #2 is verbonden met een LED en werkt als TCP-server.
- Twee ESP32 verbinden met elkaar via het internet.
- Wanneer de knop op ESP32 #1 wordt ingedrukt, gaat de LED op ESP32 #2 aan.

Benodigdheden hardware
Of u kunt de volgende kits kopen:
| 1 | × | DIYables Sensorkit (30 sensoren/displays) | |
| 1 | × | DIYables Sensorkit (18 sensoren/displays) |
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.

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 voor ESP32 #1: TCP CLIENT + EEN KNOP/SCHAKELAAR
- Aansluitschema voor ESP32 #2: TCP SERVER + EEN LED
- ESP32 - LED tutorial
- ESP32 - Knop tutorial
- 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
- 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
- Seriële Monitor van ESP32 #2
- (): 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.
Aansluitschema

This image is created using Fritzing. Click to enlarge image

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
ESP32-code voor ESP32 #2
Snel aan de slag
※ Notiz:
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.