Communication entre deux ESP32
Ce tutoriel vous explique comment créer une connexion entre deux ESP32 via TCP/IP sur WiFi et échanger des données. Un ESP32 agit en tant que client TCP et l'autre en tant que serveur TCP. Nous apprenons également en détail à travers un exemple :
- ESP32 #1 se connecte à un bouton et agit comme client TCP.
- ESP32 #2 se connecte à une LED et agit comme serveur TCP.
- Les deux ESP32 se connectent l'un à l'autre par internet.
- Lorsque le bouton sur ESP32 #1 est pressé, la LED sur ESP32 #2 s'allume.
Préparation du matériel
2 | × | ESP-WROOM-32 Dev Module | |
2 | × | Micro USB Cable | |
1 | × | (Optional) DC Power Jack | |
1 | × | Breadboard | |
1 | × | Jumper Wires | |
1 | × | (Recommended) ESP32 Screw Terminal Adapter |
Or you can buy the following sensor kits:
1 | × | DIYables Sensor Kit (30 sensors/displays) | |
1 | × | DIYables Sensor Kit (18 sensors/displays) |
Communication entre deux ESP32 - Vue d'ensemble
Il existe de nombreuses manières de faire communiquer ESP32 #1 avec ESP32 #2. Selon la distance, nous pouvons choisir l'une des méthodes suivantes :
Methods | Distance |
---|---|
SPI | very short |
I2C | very short |
UART (TTL) | very short |
UART (RS-232/485/422) | short |
Bluetooth | short |
LoRa | long |
WiFi | unlimited(*) |
※ NOTE THAT:
(*) :
- Si nous connectons les deux ESP32 à Internet, la distance de communication est illimitée.
- Si nous ne connectons pas les deux ESP32 à Internet, mais que nous les connectons au même réseau LAN, la distance de communication est limitée au réseau LAN.
Ce tutoriel va utiliser le WiFi pour la communication entre deux ESP32.
Communication entre deux ESP32 via WiFi
Deux ESP32 peuvent communiquer entre eux via le WiFi si :
- Deux ESP32 dans le même réseau LAN. Ils n'ont pas besoin de se connecter à Internet.
- Deux ESP32 dans des réseaux LAN différents. Ils doivent se connecter à Internet.
Il existe deux manières pour que deux ESP32 puissent communiquer entre eux.
- Deux ESP32 communiquent directement l'un avec l'autre : un ESP32 est un client TCP, l'autre est un serveur TCP.
- Deux ESP32 communiquent indirectement via un serveur centralisé (par exemple, un serveur MQTT) : les deux ESP32 sont des clients TCP. Voir le tutoriel Communication ESP32 à ESP32 via MQTT.
Il nécessite un protocole d'application que deux ESP32 utilisent pour communiquer entre eux. Par exemple :
- Protocole auto-défini sur TCP brut (directement)
- Modbus TCP (directement)
- HTTP (directement)
- Telnet (directement)
- SSH (directement)
- MQTT (indirectement via un serveur)
※ NOTE THAT:
Le protocole UDP est hors du champ d'application de ce tutoriel.
Exemple d'application
Réalisons l'application suivante : Un bouton/interrupteur connecté à ESP32 #1 contrôle une LED connectée à ESP32 #2 via WiFi.
Pour simplifier, ce tutoriel utilisera un protocole auto-défini (défini par nous, sans norme).
Protocole Auto-défini
Nous définissons un protocole simple comme suit :
- Créer une connexion TCP entre l'ESP32 #1 et l'ESP32 #2
- ESP32 #1 :
- Client TCP : effectue activement une demande de connexion TCP à l'ESP32 #2
- Si l'état de l'interrupteur passe à ON, l'ESP32 #1 envoie un octet (commande) avec la valeur 1 à l'ESP32 #2.
- Si l'état de l'interrupteur passe à OFF, l'ESP32 #1 envoie un octet (commande) avec la valeur 0 à l'ESP32 #2.
- ESP32 #2 :
- Serveur TCP : écoute une demande de connexion TCP de l'ESP32 #1. S'il y a une demande TCP, il accepte et la connexion est établie.
- S'il reçoit un octet :
- Si la valeur est 1, allumer la LED
- Si la valeur est 0, éteindre la LED
- Schéma de câblage pour ESP32 #1 : CLIENT TCP + UN BOUTON/INTERRUPTEUR
- Schéma de câblage pour ESP32 #2 : SERVEUR TCP + UNE LED
- Tutoriel ESP32 - LED
- Tutoriel ESP32 - Bouton
- Si c'est la première fois que vous utilisez ESP32, consultez comment configurer l'environnement pour ESP32 sur Arduino IDE.
- Connectez un bouton/interrupteur à ESP32 #1
- Connectez une LED à ESP32 #2
- Ouvrez Arduino IDE (appelé Arduino IDE #1)
- Installez la bibliothèque ezButton sur Arduino IDE
- Connectez ESP32 #1 au PC via un câble USB et sélectionnez le port COM de ESP32 #1 sur Arduino IDE #1
- Ouvrez une autre fenêtre Arduino IDE (appelée Arduino IDE #2) en cliquant sur l'icône Arduino IDE sur votre PC (important!(**))
- Connectez ESP32 #2 au PC via un câble USB et sélectionnez le port COM de ESP32 #2 sur Arduino IDE #2
- Copiez le code de ESP32 #1, collez-le dans Arduino IDE #1 et enregistrez-le (nommé ESP321)
- Copiez le code de ESP32 #2, collez-le dans Arduino IDE #2 et enregistrez-le (nommé ESP322)
- Téléchargez le code de ESP32 #2 dans ESP32 #2 en premier
- Ouvrez le moniteur série sur Arduino IDE #2, obtenez l'adresse IP du serveur TCP
- Mettre à jour l'adresse IP du serveur TCP dans le code ESP32 #1
- Téléverser le code ESP32 #1 sur ESP32 #1
- Ouvrir le moniteur série sur Arduino IDE #1
- Appuyer et maintenir le bouton sur ESP32 #1 → observer l'état du LED sur ESP32 #2 (ON)
- Relâcher le bouton sur ESP32 #1 → observer l'état du LED sur ESP32 #2 (OFF)
- Répéter plusieurs fois le processus ci-dessus.
- Vérifier la sortie sur les deux moniteurs série
- Moniteur série de ESP32 #1
- Moniteur série de ESP32 #2
- (**): Si vous ouvrez la fenêtre Arduino IDE #2 via "Fichier" → "Nouveau" ou "Ouvrir" depuis la fenêtre Arduino IDE #2, vous ne pourrez PAS ouvrir deux Moniteurs Séries pour deux ESP32 sur le même PC en même temps.
- Il existe une alternative à ce protocole auto-défini. Il s'agit du Modbus TCP. Le protocole Modbus est standardisé, il présente de nombreux avantages par rapport au protocole auto-défini. Voir plus dans le tutoriel ESP32 - Modbus.
Schéma de câblage
This image is created using Fritzing. Click to enlarge image
Si vous ne savez pas comment alimenter l'ESP32 et d'autres composants, vous pouvez trouver des conseils dans le tutoriel suivant : Comment alimenter l'ESP32.
This image is created using Fritzing. Click to enlarge image
※ NOTE THAT:
Il est nécessaire d'utiliser une résistance pour une LED si elle n'a pas de résistance intégrée. Nous avons des tutoriels dédiés pour les boutons et les LED. Vous pouvez en apprendre davantage à leur sujet dans :
Code ESP32 pour ESP32 #1
Code ESP32 pour ESP32 #2
Étapes rapides
※ NOTE THAT: