Site icon AranaCorp

Communication entre deux ESP8266 via UDP

3
(1)

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

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

Sources

How useful was this post?

Click on a star to rate it!

Average rating 3 / 5. Vote count: 1

No votes so far! Be the first to rate this post.

Quitter la version mobile