使用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發送的數據了。