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 :

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)
Divulgation : Certains des liens fournis dans cette section sont des liens affiliés Amazon. Nous pouvons recevoir une commission pour tout achat effectué via ces liens, sans coût supplémentaire pour vous. Nous vous remercions de votre soutien.

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 :

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.

communication entre deux ESP8266 NodeMCU

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

    • Schéma de câblage entre ESP8266 et le bouton
    Schéma de câblage du bouton ESP8266 NodeMCU

    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.

    • Schéma de câblage entre l'ESP8266 et la LED
    Schéma de câblage LED ESP8266 NodeMCU

    This image is created using Fritzing. Click to enlarge image

    Code ESP8266 pour ESP8266 #1

    /* * Ce code ESP8266 NodeMCU a été développé par newbiely.fr * Ce code ESP8266 NodeMCU est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/tutorials/esp8266/communication-between-two-esp8266 */ #include <ezButton.h> #include <ESP8266WiFi.h> #define BUTTON_PIN D7 // The ESP8266 pin connected to button #define SERVER_IP "192.168.0.180" #define SERVER_PORT 4080 ezButton button(BUTTON_PIN); // create ezButton attached to pin D7 const char WIFI_SSID[] = "YOUR_WIFI_SSID"; // CHANGE TO YOUR WIFI SSID const char WIFI_PASSWORD[] = "YOUR_WIFI_PASSWORD"; // CHANGE TO YOUR WIFI PASSWORD WiFiClient TCPclient; void setup() { Serial.begin(9600); button.setDebounceTime(50); // set debounce time to 50 milliseconds Serial.println("ESP8266 #1: TCP CLIENT + A BUTTON/SWITCH"); // Connect to WiFi WiFi.begin(WIFI_SSID, WIFI_PASSWORD); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); Serial.print("IP address: "); Serial.println(WiFi.localIP()); // Connect to TCP server (ESP8266 #2) if (TCPclient.connect(SERVER_IP, SERVER_PORT)) Serial.println("ESP8266 #1: Connected to TCP server"); else Serial.println("ESP8266 #1: Failed to connect to TCP server"); } void loop() { button.loop(); // MUST call the loop() function first if (!TCPclient.connected()) { Serial.println("ESP8266 #1: Connection is disconnected"); TCPclient.stop(); // Reconnect to TCP server (ESP8266 #2) if (TCPclient.connect(SERVER_IP, SERVER_PORT)) Serial.println("ESP8266 #1: Reconnected to TCP server"); else Serial.println("ESP8266 #1: Failed to reconnect to TCP server"); } if (button.isPressed()) { TCPclient.write('1'); TCPclient.flush(); Serial.println("ESP8266 #1: - The button is pressed, sent command: 1"); } if (button.isReleased()) { TCPclient.write('0'); TCPclient.flush(); Serial.println("ESP8266 #1: - The button is released, sent command: 0"); } }

    Code ESP8266 pour ESP8266 #2

    /* * Ce code ESP8266 NodeMCU a été développé par newbiely.fr * Ce code ESP8266 NodeMCU est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/tutorials/esp8266/communication-between-two-esp8266 */ #include <ESP8266WiFi.h> #define LED_PIN D6 // The ESP8266 pin connected to LED #define SERVER_PORT 4080 const char WIFI_SSID[] = "YOUR_WIFI_SSID"; // CHANGE TO YOUR WIFI SSID const char WIFI_PASSWORD[] = "YOUR_WIFI_PASSWORD"; // CHANGE TO YOUR WIFI PASSWORD WiFiServer TCPserver(SERVER_PORT); void setup() { Serial.begin(9600); pinMode(LED_PIN, OUTPUT); Serial.println("ESP8266 #2: TCP SERVER + AN LED"); // Connect to Wi-Fi WiFi.begin(WIFI_SSID, WIFI_PASSWORD); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); Serial.print("IP address: "); Serial.println(WiFi.localIP()); // Start the TCP server TCPserver.begin(); } void loop() { // Check if a client has connected WiFiClient client = TCPserver.available(); if (client) { // Read the command from the TCP client char command = client.read(); Serial.print("ESP8266 #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(); // Close the connection } }

    Étapes rapides

    Pour commencer avec ESP8266 sur Arduino IDE, suivez ces étapes :

    • 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.
    COM6
    Send
    ARDUINO #2: TCP SERVER + AN LED TCP Server IP address: 192.168.0.2 -> Please update the serverAddress in ESP8266 #1 code
    Autoscroll Show timestamp
    Clear output
    9600 baud  
    Newline  
    • 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 :
    COM6
    Send
    ARDUINO #1: TCP CLIENT + A BUTTON/SWITCH Connected to TCP server ESP8266 #1: - The button is pressed, sent command: 1 ESP8266 #1: - The button is released, sent command: 0 ESP8266 #1: - The button is pressed, sent command: 1 ESP8266 #1: - The button is released, sent command: 0
    Autoscroll Show timestamp
    Clear output
    9600 baud  
    Newline  
    • Vérifiez la sortie sur le moniteur série #2 :
    COM6
    Send
    ARDUINO #2: TCP SERVER + AN LED TCP Server IP address: 192.168.0.2 -> Please update the serverAddress in ESP8266 #1 code ESP8266 #2: - Received command: 1 ESP8266 #2: - Received command: 0 ESP8266 #2: - Received command: 1 ESP8266 #2: - Received command: 0 ESP8266 #2: - Received command: 1 ESP8266 #2: - Received command: 0
    Autoscroll Show timestamp
    Clear output
    9600 baud  
    Newline  

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.

※ OUR MESSAGES

  • Please feel free to share the link of this tutorial. However, Please do not use our content on any other websites. We invested a lot of effort and time to create the content, please respect our work!