雙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.pswp.cn/diannao/90953.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/90953.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/90953.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

BGP 路由優選屬性(7)【MED】官方考試綜合實驗題【bgp】【acl】【ip-prefix】【route-policy】【icmp 環路】精講

目錄 一、MED 屬性介紹 二、實驗 2.1 實驗目的 2.2 拓撲圖 2.2 實驗說明 2.3 配置腳本 2.4 驗證配置 2.5 問題分析 2.7 題目需求解析 2.8 場景 1&#xff1a;只允許在 AS12 上操作 2.9 場景 2&#xff1a;只允許在 AS34 上操作 正文 一、MED 屬性介紹 MED 全稱 mu…

html-初級標簽

一.瀏覽器能識別的標簽 1.1 head標簽里的編碼和title <head><meta charset"UTF-8"><title>Title</title> </head>1.2 標題 <body><h1>Welcome to my website</h1><h2>Welcome to my website</h2><…

【八股消消樂】Kafka集群 full GC 解決方案

&#x1f60a;你好&#xff0c;我是小航&#xff0c;一個正在變禿、變強的文藝傾年。 &#x1f514;本專欄《八股消消樂》旨在記錄個人所背的八股文&#xff0c;包括Java/Go開發、Vue開發、系統架構、大模型開發、具身智能、機器學習、深度學習、力扣算法等相關知識點&#xff…

《Java Web程序設計》實驗報告二 學習使用HTML標簽、表格、表單

目 錄 一、實驗目的 二、實驗環境 三、實驗步驟和內容 1、小組成員分工&#xff08;共計4人&#xff09; 2、實驗方案 3、實驗結果與分析 4、項目任務評價 四、遇到的問題和解決方法 五、實驗總結 一、實驗目的 1、HTML基礎知識、基本概念 2、使用HTML標簽、表格進行…

jenkins使用Jenkinsfile部署springboot+docker項目

文章目錄前言一、前期準備二、編輯構建文件二、Jenkins構建總結前言 前面使用Jenkinsfile部署了前端vue項目&#xff0c;接著學習Jenkinsfile部署springboot項目。 一、前期準備 已經安裝好centos,并且安裝了jenkins和docker。本地新建springboot并上傳到gitee上。 二、編輯…

使用ESM3蛋白質語言模型進行快速大規模結構預測

文章目錄ESM3介紹ESM3在線使用本地使用api批量預測ESM相較于AlphaFold的優勢ESM3介紹 ESM3是由EvolutionaryScale&#xff08;前Meta團隊&#xff09;開發的一款蛋白質大語言模型&#xff0c;于2025年以《用語言模型模擬 5 億年的進化》為題正式發表在Science上 文章鏈接: htt…

PostgreSQL 時間/日期管理詳解

PostgreSQL 時間/日期管理詳解 引言 PostgreSQL是一款功能強大的開源關系型數據庫管理系統&#xff0c;在時間/日期管理方面具有獨特的優勢。本文將詳細介紹PostgreSQL中時間/日期數據類型及其相關功能&#xff0c;幫助讀者更好地理解和應用時間/日期管理。 時間/日期數據類型 …

Agent篇

Agent包含哪些模塊&#xff0c;實現了什么功能Agent 就像一個多功能的接口&#xff0c;它能夠接觸并使用一套工具。根據用戶的輸入&#xff0c;Agent會規劃出一條解決用戶問題的路線&#xff0c;決定其中需要調用哪些工具&#xff0c;并調用這些工具。Agent 大語言模型規劃記憶…

利用 MySQL 進行數據清洗

利用 MySQL 進行數據清洗是數據預處理的重要環節&#xff0c;以下是常見的數據清洗操作及對應 SQL 示例&#xff1a;1. 去除重復數據使用 ROW_NUMBER() 或 GROUP BY 識別并刪除重復記錄。-- 查找重復記錄&#xff08;以 user_id 和 email 為例&#xff09; WITH Duplicates AS …

【MySQL筆記】事務的ACID特性與隔離級別

目錄1. 什么是事務&#xff1f;2. 事務的ACID特性&#xff08;重要&#xff09;3. 事務控制語法4. 隔離級別與并發問題1. 什么是事務&#xff1f; 事務&#xff08;Transaction&#xff09;是由一組SQL語句組成的邏輯單元&#xff0c;這些操作要么全部成功&#xff0c;要么全部…

Mock 數據的生成與使用全景詳解

Mock 數據的生成與使用全景詳解 在后端開發過程中,真實數據往往受限于業務進度、隱私保護或接口未完成等因素,無法及時獲取。這時,Mock數據(模擬數據)就成為開發、測試、聯調不可或缺的利器。本文將從Mock數據的意義、常用場景、主流工具、實戰案例到最佳實踐,帶你全面掌…

HTML 標題標簽

需求&#xff1a;在網頁顯示六級標題標簽。代碼&#xff1a;//需求&#xff1a;在網頁顯示六級標題標簽。 <!DOCTYPE html> <html><head><meta charset"utf-8" /><title></title></head><body><h1>一級標題&l…

(限免!!!)全國青少年信息素養大賽-算法創意實踐挑戰賽小學組復賽(代碼版)

選擇題部分在 C 中&#xff0c;以下代表布爾類型的是&#xff08;  &#xff09;選項&#xff1a;A. double B. bool C. int D. char答案&#xff1a;B解析&#xff1a;C 中布爾類型的關鍵字為bool&#xff0c;用于存儲邏輯值true或false。執行以下程序&#xff0c;輸出的…

編譯器優化——LLVM IR,零基礎入門

編譯器優化——LLVM IR&#xff0c;零基礎入門 對于大多數C開發者而言&#xff0c;我們的代碼從人類可讀的文本到機器可執行的二進制文件&#xff0c;中間經歷的過程如同一個黑箱。我們依賴編譯器&#xff08;如GCC, Clang, MSVC&#xff09;來完成這項復雜的轉換。然而&#x…

react中為啥使用剪頭函數

在 React 中使用箭頭函數&#xff08;>&#xff09;主要有以下幾個原因&#xff1a;1. 自動綁定 this傳統函數的問題&#xff1a;在類組件中&#xff0c;普通函數的this指向會根據調用方式變化&#xff0c;導致在事件處理函數中無法正確訪問組件實例&#xff08;this為undef…

JavaSE-多態

多態的概念在完成某個行為時&#xff0c;不同的對象在完成時會呈現出不同的狀態。比如&#xff1a;動物都會吃飯&#xff0c;而貓和狗都是動物&#xff0c;貓在完成吃飯行為時吃貓糧&#xff0c;狗在完成吃飯行為時吃狗糧&#xff0c;貓和狗都會叫&#xff0c;狗在完成這個行為…

TDengine 使用最佳實踐(2)

TDengine 使用最佳實踐&#xff08;1&#xff09; 安裝部署 目錄規劃 軟件安裝 參數配置 時鐘同步 驗證環境 集群部署 寫入查詢 連接方式 數據寫入 數據查詢 運維巡檢 運維規范 數據庫啟停 狀態檢查 運維技巧 日常巡檢 數據庫升級 故障排查 故障定位 日志調試 故障反饋 關于 T…

如何通過公網IP訪問部署在kubernetes中的服務?

背景說明我們有些私有化部署的項目&#xff0c;使用k8s來承載服務&#xff0c;通過ingress-nginx轉發外部的請求到集群。有時候業主的域名沒有申請下來&#xff0c;我們會配置臨時的域名&#xff0c;測試同事配置主機hosts來完成功能驗證&#xff0c;等功能驗證完畢后&#xff…

Datawhale AI 夏令營2025科大訊飛AI大賽<夏令營:用AI做帶貨視頻評論分析>

賽題題目 任務一&#xff1a;商品識別 基于視頻內容識別對應的商品 【情感分析】對評論文本進行多維度情感分析&#xff0c;涵蓋維度見數據說明&#xff1b; 任務二&#xff08;文本分類&#xff09;&#xff1a;從非結構化評論中提取情感傾向 評論聚類】按商品對歸屬指定維度的…

AI 時代的分布式多模態數據處理實踐:我的 ODPS 實踐之旅、思考與展望

AI 時代的分布式多模態數據處理實踐&#xff1a;我的 ODPS 實踐之旅、思考與展望 &#x1f31f;嗨&#xff0c;我是LucianaiB&#xff01; &#x1f30d; 總有人間一兩風&#xff0c;填我十萬八千夢。 &#x1f680; 路漫漫其修遠兮&#xff0c;吾將上下而求索。 目錄 1. 什…