Le NodeMCU ESP8266 est un petit microcontrôleur possédant une puce Wifi. Il est possible d’établir une communication entre deux ESP8266, lorsqu’ils utilisent le même réseau. Dans ce tutoriel, nous allons voir une architecture avec deux NodeMCU qui vont échanger des données via le protocole UDP.
Si vous n’avez pas accès à un deuxième ESP8266, vous pouvez tester la communication avec le logiciel Packet Sender.
Matériel
- Ordinateur
- NodeMCU ESP8266 x2 ou plus
- Câble USB A Mâle/Micro B Mâle x2
Code ESP8266 UDP Server
Pour le microcontrôleur Server, nous allons créer un serveur pour gérer les requêtes provenant des microcontrôleurs client. nous utilisons la librairie ESP8266WiFi.h qui permet la gestion de la puce WiFi pour les cartes ESP8266 et la librairie WiFiUdp.h qui permet de gérer les requêtes UDP.
N.B.: N’oubliez pas de modifier les valeurs de ssid et password, par le nom et le mot de passe du réseau wifi que vous souhaitez utiliser
#include <ESP8266WiFi.h> #include <WiFiUdp.h> WiFiUDP udp; char packetBuffer[255]; unsigned int localPort = 9999; const char *ssid = "******"; const char *password = "******"; void setup() { Serial.begin(115200); WiFi.begin(ssid, password); udp.begin(localPort); Serial.print(F("UDP Server : ")); Serial.println(WiFi.localIP()); } void loop() { int packetSize = udp.parsePacket(); Serial.print(" Received packet from : "); Serial.println(udp.remoteIP()); Serial.print(" Size : "); Serial.println(packetSize); Serial.print(" Data : "); if (packetSize) { int len = udp.read(packetBuffer, 255); if (len > 0) packetBuffer[len - 1] = 0; Serial.print(packetBuffer); udp.beginPacket(udp.remoteIP(), udp.remotePort()); udp.write("UDP packet was received OK\r\n"); udp.endPacket(); } Serial.println("\n"); delay(500); Serial.print("[Server Connected] "); Serial.println (WiFi.localIP()); }
Code ESP8266 UDP Client
Dans le code client, nous allons nous connecter au serveur en utilisant l’adresse IP précédemment utilisée.
N.B.: N’oubliez pas de modifier et d’utiliser les mêmes valeurs de ssid et password que dans le module Serveur afin que les deux cartes ESP8266 se connectent au même réseau.
#include <ESP8266WiFi.h> #include <WiFiUdp.h> WiFiUDP udp; char packetBuffer[255]; unsigned int localPort = 9999; const char *ssid = "********"; const char *password = "***********"; void setup() { Serial.begin(115200); WiFi.begin(ssid, password); udp.begin(localPort); Serial.print(F("UDP Client : ")); Serial.println(WiFi.localIP()); } void loop() { int packetSize = udp.parsePacket(); Serial.print(" Received packet from : "); Serial.println(udp.remoteIP()); Serial.print(" Size : "); Serial.println(packetSize); Serial.print(" Data : "); if (packetSize) { int len = udp.read(packetBuffer, 255); if (len > 0) packetBuffer[len - 1] = 0; Serial.print(packetBuffer); } Serial.println("\n"); delay(500); Serial.print("[Client Connected] "); Serial.println(WiFi.localIP()); udp.beginPacket("192.168.1.94", 9999); udp.write("Send millis: "); char buf[20]; unsigned long testID = millis(); sprintf(buf, "%lu", testID); Serial.print(" Sent : "); Serial.println(buf); udp.write(buf); udp.write("\r\n"); udp.endPacket(); }
Résultat
Lorsque les microcontrôleurs se connectent au Wifi et que la communication entre les deux ESP8266 est établie, nous pouvons voir que des informations s’échangent entre les deux cartes. Il est alors possible de piloter un appareil connecté au client à partir du server ou inversement.
Applications
- Créer un réseau de NodeMCU Esp8266 pour gérer différents appareils ou capteurs
Bonjour,
J’essaie de faire communiquer deux ESP-01 en UDP, en vain:
– le point d’accès est accessible depuis un PC ou un Smartphone, et je peux échanger des paquets,
– la station se connecte très bien à un réseau, et je peux aussi échanger des paquets,
– mais la station refuse de se connecter au point d’accès.
Une idée sur le problème et la solution?
Merci
Bonjour,
si je comprends bien tu as transformé un des esp en access point(le point d’accès) et tu essaies de le faire communiquer avec un autre esp (la station)?
Difficile de comprendre le problème sans le code.
As-tu vérifié les adresses IP?
As-tu vérifié la configuration du point d’accès sur la station?
Peux-tu essayé de connecté la station au point d’accès sans la librairie UDP?
bonjour, comment avez vous envoyer des paquets ? avec des commandes AT ou un programme ? merci.
bonjour, mes meilleurs voeux 🙂
super tuto, j’ai réussi!!
est il possible de commander le déclenchement de l’envoi à partir d’une application mobile ?
merci de votre lecture.
Merci! Meilleurs vœux également.
Il est tout à fait possible de définir le mobile comme client sur le même réseau. Lorsque le client1 envoie une commande au server il déclenche l’envoi sur le client2.
Il faut regarder la gestion de plusieurs client.
Bonjour,
dans le cadre de mes études, je dois utiliser un module esp8266-01 en tant que point d’accès et connecter un téléphone avec app inventor je devrais envoyer des données depuis le téléphone. avez vous des idées ? je n’ai rien trouver après de longue recherche, merci
Tu devrais aller voir l’article pour créer un point d’accès avec ESP8266