双esp8266-01之间UDP透传传输,自定义协议

使用AT模式的透传,串口打印的数据包含+pd1,4,数据

打印的数据不是直接将数据打印出来,包含了+pd1,4,特殊字符,针对想要直接开机直接透传,打印数据且按照自主协议帧头的功能进行开发。

1.server程序:

/*************SERVER***CLENIT**************** */
#include 
#include 

// 配置网络参数
const char* ssid = "ESP8266_UDP_SERVER";
const char* password = "12345678";

const IPAddress SERVER_IP(192, 168, 1, 100);  // 服务器固定IP
const unsigned int SERVER_UDP_PORT = 8888;            // 通信端口

IPAddress gateway(192,168,4,1);
IPAddress subnet(255,255,255,0);

const IPAddress CLIENT_IP(192, 168, 1, 101);  // 客户端固定IP
const unsigned int CLIENT_UDP_PORT = 8888;            // 通信端口

WiFiUDP Udp;
char packetBuffer[512];  // UDP接收缓冲区
/*************SERVER******************* */
void setup() {
  Serial.begin(115200);
  
  // 连接WiFi
  // WiFi.begin(ssid, password);
  //Wifi热点
  WiFi.softAPConfig(SERVER_IP,gateway,subnet);
  WiFi.softAP(ssid,password);
  // Serial.print("Connecting to WiFi");
  // Serial.printf("WIFI-ssid:%s;WIFI-password:%s;WIFI-Server_IP:%s;WIFI-Server_udp_port:%d;WIFI-client_IP:%s;WIFI-Client_udp_port:%d",ssid,password, SERVER_IP.toString(),SERVER_UDP_PORT,CLIENT_IP.toString(),CLIENT_UDP_PORT);

  // Serial.println("\nConnected! IP: " + SERVER_IP.toString());
  
  // 启动UDP服务
  Udp.begin(CLIENT_UDP_PORT);
  Serial.println("UDP server started on port " + String(CLIENT_UDP_PORT));
}

void loop() {
  // 处理串口输入 (发送到客户端)
  if (Serial.available()) {
    String serialData = Serial.readStringUntil('\n');//截止符
    Udp.beginPacket(CLIENT_IP, CLIENT_UDP_PORT);
    // int W_len=Udp.write(serialData.c_str(),serialData.length());
    Udp.write(serialData.c_str(),serialData.length());
    Udp.endPacket();
    // Serial.println("[Sent] " + serialData);
    // Serial.println(W_len);
    // Serial.println(serialData.length());
    Serial.println(serialData);
  }
  
  // 处理UDP数据 (接收并输出到串口)
  int packetSize = Udp.parsePacket();
  // if(packetSize>0)
  //   Serial.println(packetSize);
  if (packetSize) {
    int len = Udp.read(packetBuffer, packetSize);
    if (len > 0) {
      packetBuffer[len] = '\0';
      // Serial.println("[Received] " + String(packetBuffer));
      // Serial.println(len);
      Serial.println(String(packetBuffer));
    }
  }
}

2.client程序:

/*************SERVER***CLENIT**************** */
#include 
#include 

// 配置网络参数
const char* ssid = "ESP8266_UDP_SERVER";
const char* password = "12345678";

const IPAddress SERVER_IP(192, 168, 1, 100);  // 服务器固定IP
const unsigned int SERVER_UDP_PORT = 8888;            // 通信端口

IPAddress gateway(192,168,4,1);
IPAddress subnet(255,255,255,0);

const IPAddress CLIENT_IP(192, 168, 1, 101);  // 客户端固定IP
const unsigned int CLIENT_UDP_PORT = 8888;            // 通信端口

WiFiUDP Udp;
char packetBuffer[512];  // UDP接收缓冲区

/**************client**************** */
// 配置网络参数
void setup() {
  Serial.begin(115200);
  
  // 连接WiFi
  WiFi.begin(ssid, password);
  Serial.print("Connecting to WiFi");
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("\nConnected! IP: " + WiFi.localIP().toString());
  
  // 启动UDP服务
  Udp.begin(SERVER_UDP_PORT);
  Serial.println("UDP client started. Target: " + SERVER_IP.toString());
}

void loop() {
  // 处理串口输入 (发送到服务器)
  int len = Serial.available();
  if (len) {
    String serialData = Serial.readStringUntil('\n');//截止符
    Udp.beginPacket(SERVER_IP, SERVER_UDP_PORT);
    // int W_len=Udp.write(serialData.c_str(),serialData.length());
    Udp.write(serialData.c_str(),serialData.length());
    Udp.endPacket();
    // Serial.println("[Sent] " + serialData);
    // Serial.println(W_len);
    // Serial.println(serialData.length());
    Serial.println( serialData);
  }
  
  // 处理UDP数据 (接收并输出到串口)
  int packetSize = Udp.parsePacket();
  // if(packetSize>0)
  //   Serial.println(packetSize);
  if (packetSize) {
    int len = Udp.read(packetBuffer, packetSize);
    if (len > 0) {
      packetBuffer[len] = '\0';
      // Serial.println("[Received] " + String(packetBuffer));
      // Serial.println(len);
      Serial.write(packetBuffer,len);
    }
  }
}

分别下载两个esp8266-01里面,双esp8266上电,自动建立链接,由Server串口发送数据,通过UDP发送至client的串口,就可以看到server发送的数据了。

你可能感兴趣的:(udp,单片机,网络协议)