当前位置: 首页 > news >正文

双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发送的数据了。

http://www.dtcms.com/a/272224.html

相关文章:

  • LlamaFactory Demo
  • 使用langchain连接llama.cpp部署的本地deepseek大模型开发简单的LLM应用
  • CTFHub————Web{信息泄露[备份文件下载(vim缓存、.DS_Store)]}
  • turbopack打包机制
  • SQL的初步学习(一)(以MySQL为例)
  • 重置 Rust 工具链​
  • 缺乏项目进度对比历史数据,如何建立进度基线
  • 深度学习_全连接神经网络
  • UE5多人MOBA+GAS 17、制作小兵的动画蓝图、攻击GA以及死亡和复活的AI感知开关
  • Ajax之核心语法详解
  • Vue Vue-route (4)
  • Ubuntu基础(Python虚拟环境和Vue)
  • 堆的应用(讲解超详细)
  • Uniapp中的uni.scss
  • 2025.07.09华为机考真题解析-第一题100分
  • 【VLAs篇】05:RDT模型结构和流程分析
  • HTML颜色定义
  • 深入了解Modbus TCP:工业通信的“通用语言”
  • Docker-构建镜像并实现LNMP架构
  • C语言 | 函数核心机制深度解构:从底层架构到工程化实践
  • 西电考研录取:哪些省份考研上岸西电更容易?
  • PyTorch Tensor 的创建与操作入门
  • 低版本hive(1.2.1)UDF实现清除历史分区数据
  • 1.1.1数据类型与变量——AI教你学Django
  • 基于Uniapp+MySQL+PHP的景区多商户小程序源码系统 带完整的搭建指南
  • vue引入应用通义AI大模型-(一)前期准备整理思路
  • idea如何打开extract surround
  • 【CPU】不同核数下的翻译
  • hbuilder开发app记录
  • ReaLTaiizor:WinForms 界面设计利器