O NodeMCU ESP8266 é um pequeno microcontrolador com um chip Wi-Fi. É possível estabelecer uma comunicação entre dois ESP8266, quando utilizam a mesma rede. Neste tutorial, veremos uma arquitectura com dois NodeMCUs que irão trocar dados através do protocolo UDP.
Se não tiver acesso a um segundo ESP8266, pode testar a comunicação com o software Packet Sender.
Material
- Computador
- NóMCU ESP8266 x2 ou mais
- Cabo USB A Macho/Micro B Macho x2
Código ESP8266 UDP Server
Para o microcontrolador Servidor, vamos criar um servidor para gerir os pedidos provenientes dos microcontroladores clientes. Utilizamos a biblioteca ESP8266WiFi.h que permite a gestão do chip WiFi para os cartões ESP8266 e a biblioteca WiFiUdp.h que permite gerir os pedidos UDP.
N.B.: Não se esqueça de alterar os valores de ssid e password, pelo nome e password da rede wifi que pretende utilizar
#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());
}
Código ESP8266 UDP Cliente
No código do cliente, ligar-nos-emos ao servidor utilizando o endereço IP anteriormente utilizado.
N.B.: Não se esqueça de modificar e utilizar os mesmos valores de ssid e senha que no módulo Servidor, de modo a que os dois cartões ESP8266 se liguem à mesma rede.
#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();
}
Resultado
Quando os microcontroladores se ligam ao Wifi e a comunicação entre os dois ESP8266 é estabelecida, podemos ver que a informação é trocada entre os dois cartões. É então possível controlar um dispositivo ligado ao cliente a partir do servidor ou vice-versa.


Aplicações
- Criar uma rede de NodeMCUs Esp8266 para gerir diferentes dispositivos ou sensores