fbpixel
Etiquetas: ,
4.8
(4)

El NodeMCU ESP8266 es un pequeño microcontrolador con un chip Wi-Fi. Es posible establecer una comunicación entre dos ESP8266, cuando utilizan la misma red. En este tutorial, veremos una arquitectura con dos NodeMCUs que intercambiarán datos a través del protocolo UDP.

Si no tiene acceso a un segundo ESP8266, puede probar la comunicación con el software Packet Sender.

Material

  • Ordenador
  • NodeMCU ESP8266 x2 o más
  • Cable USB A macho/micro B macho x2

Código ESP8266 Servidor UDP

Para el microcontrolador Servidor, crearemos un servidor que gestione las peticiones procedentes de los microcontroladores clientes. Utilizamos la librería ESP8266WiFi.h que permite gestionar el chip WiFi de las tarjetas ESP8266 y la librería WiFiUdp.h que permite gestionar las peticiones UDP.

N.B.: No olvides cambiar los valores de ssid y password, por el nombre y la contraseña de la red wifi que quieres 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

En el código del cliente, nos conectaremos al servidor utilizando la dirección IP utilizada anteriormente.

N.B.: No olvides modificar y utilizar los mismos valores de ssid y password que en el módulo Server para que las dos tarjetas ESP8266 se conecten a la misma red.

#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

Cuando los microcontroladores se conectan al Wifi y se establece la comunicación entre los dos ESP8266, podemos ver que se intercambia información entre las dos tarjetas. Así, es posible controlar un dispositivo conectado al cliente desde el servidor o viceversa.

Aplicaciones

  • Crear una red de Esp8266 NodeMCUs para gestionar diferentes dispositivos o sensores

Fuentes

¿De cuánta utilidad te ha parecido este contenido?

¡Haz clic en una estrella para puntuarlo!

Promedio de puntuación 4.8 / 5. Recuento de votos: 4

Hasta ahora, ¡no hay votos!. Sé el primero en puntuar este contenido.

Ya que has encontrado útil este contenido...

¡Sígueme en los medios sociales!

¡Siento que este contenido no te haya sido útil!

¡Déjame mejorar este contenido!

Dime, ¿cómo puedo mejorar este contenido?