Communication entre deux Arduino Nano ESP32

Ce guide vous montre comment établir une connexion entre deux appareils Arduino Nano ESP32 en utilisant TCP/IP sur WiFi et échanger des données. Un Arduino Nano ESP32 fonctionne comme un client TCP tandis que l'autre agit comme un serveur TCP. Plongeons dans le processus avec un exemple :

communication entre deux ESP32

Préparation du matériel

2×ESP-WROOM-32 Dev Module
2×Micro USB Cable
1×Push Button
1×LED
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)
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 Arduino Nano ESP32 - Aperçu

Il existe diverses méthodes pour permettre la communication entre "Arduino Nano ESP32 #1" et "Arduino Nano ESP32 #2". Le choix de la méthode dépend de la distance entre eux. Certaines des options incluent :

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 les deux appareils Arduino Nano ESP32 sont connectés à Internet, la distance de communication est illimitée.
  • Si les deux appareils Arduino Nano ESP32 ne sont pas connectés à Internet mais sont connectés au même LAN (Réseau Local), la distance de communication est limitée à l'intérieur du réseau LAN.

Ce tutoriel va utiliser le WiFi pour la communication entre deux ESP32.

Communication entre deux Arduino Nano ESP32 via WiFi

Deux appareils Arduino Nano ESP32 peuvent établir une communication via WiFi dans les conditions suivantes :

  • Si les deux appareils Arduino Nano ESP32 sont sur le même LAN (réseau local), ils peuvent communiquer sans avoir besoin de se connecter à Internet.
  • Si les deux appareils Arduino Nano ESP32 sont dans des réseaux LAN différents, ils doivent se connecter à Internet pour faciliter la communication.

Il existe deux méthodes principales de communication entre deux appareils Arduino Nano ESP32 :

  • Communication Directe :
  • Dans cette méthode, un Arduino Nano ESP32 agit en tant que client TCP tandis que l'autre sert de serveur TCP. Ils communiquent directement entre eux via WiFi.

Communication indirecte via un serveur centralisé (par exemple, serveur MQTT) :

  • Les deux appareils Arduino Nano ESP32 agissent comme des clients TCP et communiquent indirectement via un serveur centralisé tel qu'un serveur MQTT. Vous pouvez consulter le tutoriel sur la communication ESP32-vers-Arduino Nano ESP32 via MQTT pour les détails de mise en œuvre.

Il nécessite un protocole d'application que deux Arduino Nano ESP32 utilisent pour communiquer entre eux. Par exemple :

  • Protocole auto-défini sur TCP brut (utilisé pour la communication directe)
  • Modbus TCP (utilisé pour la communication directe)
  • HTTP (utilisé pour la communication directe)
  • Telnet (utilisé pour la communication directe)
  • SSH (utilisé pour la communication directe)
  • MQTT (utilisé pour la communication indirecte via un serveur)

Exemple d'Application

Implémentons l'application suivante : Un bouton ou un interrupteur connecté à Arduino Nano ESP32 #1 contrôlera une LED connectée à Arduino Nano ESP32 #2 via WiFi.

communication entre deux ESP32

Pour simplifier, nous utiliserons un protocole auto-défini (créé par nous, non standard).

Protocole auto-défini

Nous définissons un protocole simple comme suit :

  • Créez une connexion TCP entre l'Arduino Nano ESP32 n°1 et l'Arduino Nano ESP32 n°2
  • Arduino Nano ESP32 n°1 :
    • Client TCP : fait activement une demande de connexion TCP à l'Arduino Nano ESP32 n°2
    • Si l'état de l'interrupteur passe à ON, l'Arduino Nano ESP32 n°1 envoie un octet (commande) avec la valeur 1 à l'Arduino Nano ESP32 n°2.
    • Si l'état de l'interrupteur passe à OFF, l'Arduino Nano ESP32 n°1 envoie un octet (commande) avec la valeur 0 à l'Arduino Nano ESP32 n°2.
  • Arduino Nano ESP32 n°2 :
    • Serveur TCP : écoute une demande de connexion TCP de l'Arduino Nano ESP32 n°1. S'il y a une demande TCP, il accepte et la connexion est créée.
    • 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

      • Schéma de câblage pour Arduino Nano ESP32 #1 : CLIENT TCP + UN BOUTON/INTERRUPTEUR
      Schéma de câblage du bouton Arduino Nano ESP32

      This image is created using Fritzing. Click to enlarge image

      • Schéma de câblage pour Arduino Nano ESP32 #2 : SERVEUR TCP + UNE LED
      Schéma de câblage LED Arduino Nano ESP32

      This image is created using Fritzing. Click to enlarge image

      ※ NOTE THAT:

      Il faut utiliser une résistance pour la LED si elle n'intègre pas de résistance. Nous avons des tutoriels dédiés pour le bouton et la LED. Vous pouvez en savoir plus sur :

      Code Arduino Nano ESP32 pour Arduino Nano ESP32 #1

      /* * Ce code Arduino Nano ESP32 a été développé par newbiely.fr * Ce code Arduino Nano ESP32 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/arduino-nano-esp32/communication-between-two-arduino-nano-esp32 */ // ESP32: TCP CLIENT + A BUTTON/SWITCH #include <ezButton.h> #include <WiFi.h> #define BUTTON_PIN D2 // The Arduino Nano ESP32 pin connected to the button const char WIFI_SSID[] = "YOUR_WIFI_SSID"; // CHANGE TO YOUR WIFI SSID const char WIFI_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("Arduino Nano ESP32 #1: TCP CLIENT + A BUTTON/SWITCH"); // Connect to Wi-Fi WiFi.begin(WIFI_SSID, WIFI_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"); } }

      Code Arduino Nano ESP32 pour Arduino Nano ESP32 #2

      /* * Ce code Arduino Nano ESP32 a été développé par newbiely.fr * Ce code Arduino Nano ESP32 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/arduino-nano-esp32/communication-between-two-arduino-nano-esp32 */ // ESP32 #2: TCP SERVER + AN LED #include <WiFi.h> #define LED_PIN D5 // The Arduino Nano ESP32 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("Arduino Nano ESP32 #2: TCP SERVER + AN LED"); // Connect to Wi-Fi WiFi.begin(WIFI_SSID, WIFI_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(); } }

      Étapes rapides

      • Si c'est la première fois que vous utilisez un ESP32, consultez comment configurer l'environnement pour Arduino Nano ESP32 sur Arduino IDE.
      • Connectez un bouton/interrupteur à Arduino Nano ESP32 #1
      • Connectez une LED à Arduino Nano ESP32 #2
      • Ouvrez Arduino IDE (appelé Arduino IDE #1)
      • Installez la bibliothèque ezButton sur Arduino IDE
      • Connectez Arduino Nano ESP32 #1 au PC via un câble USB et sélectionnez le port COM de Arduino Nano 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 Arduino Nano ESP32 #2 au PC via un câble USB et sélectionnez le port COM de Arduino Nano ESP32 #2 sur Arduino IDE #2
      • Copiez le code de Arduino Nano ESP32 #1, collez-le dans Arduino IDE #1 et enregistrez-le (nommé ESP321)
      • Copiez le code de Arduino Nano ESP32 #2, collez-le dans Arduino IDE #2 et enregistrez-le (nommé ESP322)
      • Téléchargez le code de Arduino Nano ESP32 #2 sur Arduino Nano ESP32 #2 en premier
      • Ouvrez le moniteur série sur Arduino IDE #2, obtenez l'adresse IP du serveur TCP
      COM6
      Send
      Arduino Nano ESP32 #2: TCP SERVER + AN LED TCP Server IP address: 192.168.0.2 -> Please update the serverAddress in Arduino Nano ESP32 #1 code
      Autoscroll Show timestamp
      Clear output
      9600 baud  
      Newline  
      • Mettre à jour l'adresse IP du serveur TCP dans le code du Arduino Nano ESP32 #1
      • Téléverser le code du Arduino Nano ESP32 #1 sur le Arduino Nano ESP32 #1
      • Ouvrir le moniteur série sur l'IDE Arduino #1
      • Appuyer et maintenir le bouton sur le Arduino Nano ESP32 #1 → observer l'état de la LED sur le Arduino Nano ESP32 #2 (ON)
      • Relâcher le bouton sur le Arduino Nano ESP32 #1 → observer l'état de la LED sur le Arduino Nano ESP32 #2 (OFF)
      • Répéter plusieurs fois le processus ci-dessus.
      • Voir la sortie sur les deux moniteurs série
        • Moniteur série du Arduino Nano ESP32 #1
        COM6
        Send
        Arduino Nano ESP32 #1: TCP CLIENT + A BUTTON/SWITCH Arduino Nano ESP32 #1: Connected to TCP server Arduino Nano ESP32 #1: - The button is pressed, sent command: 1 Arduino Nano ESP32 #1: - The button is released, sent command: 0 Arduino Nano ESP32 #1: - The button is pressed, sent command: 1 Arduino Nano ESP32 #1: - The button is released, sent command: 0 Arduino Nano ESP32 #1: - The button is pressed, sent command: 1 Arduino Nano ESP32 #1: - The button is released, sent command: 0
        Autoscroll Show timestamp
        Clear output
        9600 baud  
        Newline  
        • Moniteur série de Arduino Nano ESP32 #2
        COM6
        Send
        Arduino Nano ESP32 #2: TCP SERVER + AN LED Arduino Nano ESP32 #2: TCP Server IP address: 192.168.0.2 Arduino Nano ESP32 #2: -> Please update the serverAddress in Arduino Nano ESP32 #1 code Arduino Nano ESP32 #2: - Received command: 1 Arduino Nano ESP32 #2: - Received command: 0 Arduino Nano ESP32 #2: - Received command: 1 Arduino Nano ESP32 #2: - Received command: 0 Arduino Nano ESP32 #2: - Received command: 1 Arduino Nano ESP32 #2: - Received command: 0
        Autoscroll Show timestamp
        Clear output
        9600 baud  
        Newline  

        ※ NOTE THAT:

        • Si vous ouvrez une 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 Arduino Nano ESP32 sur le même PC en même temps.
        • Il existe une alternative à ce protocole auto-défini. C'est le 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 Arduino Nano ESP32 - Modbus

Vidéo

Comment connecter deux Arduino Nano ESP32 via Internet

Voir Comment connecter deux appareils via Internet

※ 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!