fbpixel
Etiquetas:,
0
(0)

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

Fontes

How useful was this post?

Click on a star to rate it!

Average rating 0 / 5. Vote count: 0

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

As you found this post useful...

Follow us on social media!

We are sorry that this post was not useful for you!

Let us improve this post!

Tell us how we can improve this post?