Communication entre deux ESP8266
Ce guide vous montre comment établir une connexion entre deux dispositifs ESP8266 en utilisant TCP/IP via WiFi et échanger des données. Un des ESP8266 fonctionnera comme un client TCP, tandis que l'autre agira comme un serveur TCP. Nous examinerons ce processus à travers un exemple :
- L'ESP8266 #1 se connectera à un bouton et fonctionnera comme client TCP.
- L'ESP8266 #2 se connectera à une LED et agira comme serveur TCP.
- Les deux appareils ESP8266 se connecteront entre eux via internet.
- Lorsque le bouton sur l'ESP8266 #1 sera pressé, cela déclenchera l'allumage de la LED sur l'ESP8266 #2.
Préparation du matériel
2 | × | ESP8266 NodeMCU | |
2 | × | Micro USB Cable | |
1 | × | (Optional) ESP8266 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 ESP8266 - Aperçu
Réfléchissons à un exemple particulier : ESP8266 #1 interagissant avec ESP8266 #2. Il existe de nombreuses façons de permettre la communication entre les deux ESP8266. Nous pouvons choisir l'une d'entre elles en fonction de la distance de communication. Le tableau ci-dessous présente certaines méthodes et la portée de communication correspondante.
Methods | Range |
---|---|
I2C | very short |
SPI | very short |
UART (TTL) | very short |
UART (RS-232/485/422) | short |
Bluetooth | short |
LoRa | long |
Ethernet/WiFi | unlimited(*) |
※ NOTE THAT:
- Si deux ESP8266 sont connectés à Internet, la portée de communication est illimitée.
- Cependant, si deux ESP8266 ne sont pas connectés à Internet, mais sont connectés au même réseau LAN, leur portée de communication est limitée à ce réseau local.
Parmi les méthodes mentionnées ci-dessus, ce tutoriel utilise le WiFi pour permettre la communication entre deux ESP8266 car cela permet une plage de communication illimitée.
Communication entre deux ESP8266 via un LAN local ou Internet
Deux ESP8266 peuvent communiquer l'un avec l'autre via le WiFi lorsque :
- Ils sont dans le même réseau local (LAN), et une connexion Internet n'est pas nécessaire
- Ils sont dans des réseaux locaux différents, et une connexion Internet est nécessaire
Peu importe si deux ESP8266 sont connectés au sein d'un réseau LAN local ou via Internet, il existe deux modes de communication :
- Directement entre les deux ESP8266
- Via un serveur centralisé (par exemple, un serveur MQTT). Référez-vous à Communication entre deux ESP8266 via MQTT
Lorsqu'il s'agit de communication directe, généralement un ESP8266 est le client TCP et l'autre est le serveur TCP.
Dans le cas de l'utilisation d'un serveur centralisé pour la communication, généralement les deux ESP8266 agissent en tant que clients TCP.
Lorsque nous devons choisir un protocole d'application pour la communication entre deux ESP8266, nous avons plusieurs options au choix :
- Protocole auto-défini sur TCP brut
- Modbus TCP
- HTTP
- Telnet
- SSH
- MQTT (qui nécessite un serveur centralisé)
Exemple d'application
Réalisons le programme suivant : Un bouton/interrupteur connecté à l'ESP8266 #1 sera utilisé pour allumer et éteindre une LED connectée à l'ESP8266 #2 via WiFi.
Comme mentionné précédemment, il existe quelques protocoles d'application disponibles. Pour simplifier cet exemple, nous créerons notre propre protocole (un protocole auto-défini).
Protocole auto-défini
Établissons un protocole simple :
- Établir une connexion TCP entre l'ESP8266 #1 et l'ESP8266 #2
- ESP8266 #1 :
- Se comporter comme un client TCP, en initiant la connexion TCP vers l'ESP8266 #2
- Lorsque l'interrupteur est mis sur ON, envoyer un octet (commande) avec la valeur 1 à l'ESP8266 #2.
- Lorsque l'interrupteur est mis sur OFF, envoyer un octet (commande) avec la valeur 0 à l'ESP8266 #2.
- ESP8266 #2 :
- Fonctionner comme serveur TCP, en écoutant les demandes de connexion TCP de l'ESP8266 #1
- Si l'octet reçu est 1, allumer la LED
- Si l'octet reçu est 0, éteindre la LED
- Schéma de câblage entre ESP8266 et le bouton
- Schéma de câblage entre l'ESP8266 et la LED
- Consultez le tutoriel comment configurer l'environnement pour ESP8266 sur Arduino IDE si c'est votre première utilisation de ESP8266.
- Câblez les composants comme indiqué sur le schéma.
- Connectez deux cartes ESP8266 à votre ordinateur à l'aide d'un câble USB.
- Ouvrez l'Arduino IDE (appelé Arduino IDE #1).
- Ouvrez l'Arduino IDE (appelé Arduino IDE #2).
- Choisissez la bonne carte ESP8266, comme par exemple NodeMCU 1.0 (Module ESP-12E), et son port COM respectif.
- Installez la bibliothèque ezButton sur Arduino IDE.
- Copiez le code ESP8266 #1, collez-le dans Arduino IDE #1 et enregistrez-le (nommé ESP8266-1).
- Copiez le code ESP8266 #2, collez-le dans Arduino IDE #2 et enregistrez-le (nommé ESP8266-2).
- Uploadez d'abord le code ESP8266 #2 sur ESP8266 #2.
- Ouvrez le moniteur série sur Arduino IDE #2, obtenez l'adresse IP du serveur TCP.
- Modifiez l'adresse IP du serveur TCP dans le code de l'ESP8266 n°1.
- Téléversez le code de l'ESP8266 n°1 sur l'ESP8266 n°1.
- Ouvrez le Moniteur Série sur l'Arduino IDE n°1.
- Appuyez et maintenez le bouton sur l'ESP8266 n°1 et observez l'état de la LED sur l'ESP8266 n°2 (elle devrait être allumée).
- Relâchez le bouton sur l'ESP8266 n°1 et observez l'état de la LED sur l'ESP8266 n°2 (elle devrait être éteinte).
- Appuyez, maintenez et relâchez le bouton plusieurs fois.
- Vérifiez la sortie sur le Moniteur Série n°1 :
- Vérifiez la sortie sur le moniteur série #2 :
Schéma de câblage
This image is created using Fritzing. Click to enlarge image
Voir plus dans l'agencement des broches de l'ESP8266 et comment alimenter l'ESP8266 et d'autres composants.
This image is created using Fritzing. Click to enlarge image
Code ESP8266 pour ESP8266 #1
Code ESP8266 pour ESP8266 #2
Étapes rapides
Pour commencer avec ESP8266 sur Arduino IDE, suivez ces étapes :
Vidéo
Comment connecter deux ESP8266 via Internet
Il existe deux types d'adresse IP : privée et publique. L'adresse IP généralement utilisée dans un réseau domestique est une adresse privée.
Il est facile de reconnaître une adresse IP privée. Il existe trois formats d'adresse IP privée : 10.x.x.x, 172.16.x.x, 192.168.x.x.
Il n'est pas important d'utiliser l'adresse IP privée dans les scénarios suivants :
- Lorsque deux ESP8266 se trouvent dans le même réseau local, qu'ils communiquent directement ou via un serveur centralisé, et que le LAN soit connecté à Internet ou non.
- Lorsque deux ESP8266 se trouvent dans des réseaux locaux séparés et communiquent l'un avec l'autre via un serveur centralisé.
Dans le cas où deux ESP8266 se trouvent dans différents réseaux LAN et communiquent directement l'un avec l'autre, le client TCP ESP8266 peut utiliser une adresse IP privée. Cependant, le serveur TCP ESP8266 doit utiliser soit :
- Une adresse IP publique
- Une adresse IP privée avec "Redirection de port" sur le Routeur/Point d'accès
La technique de "Redirection de port" varie d'un routeur/point d'accès à un autre. Ce tutoriel ne couvre pas ce sujet.