双esp8266-01之间UDP透传传输,自定义协议
使用AT模式的透传,串口打印的数据包含+pd1,4,数据
打印的数据不是直接将数据打印出来,包含了+pd1,4,特殊字符,针对想要直接开机直接透传,打印数据且按照自主协议帧头的功能进行开发。
1.server程序:
/*************SERVER***CLENIT**************** */
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>// 配置网络参数
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 <ESP8266WiFi.h>
#include <WiFiUdp.h>// 配置网络参数
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);// 连接WiFiWiFi.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发送的数据了。