1:UDP 傳輸
UDP 傳輸不不區分 server 或者 client ,由指令 AT+CIPSTART 建?立傳輸。
1. 配置 WiFi 模式
AT+CWMODE=3 // softAP+station mode
響應 :
OK
2. 連接路路由器?
AT+CWJAP="SSID","password" // SSID and password of router
響應 :
OK
3. 查詢 ESP8266 設備的 IP 地址
AT+CIFSR
響應 :
+CIFSR:APIP,"192.168.4.1"
+CIFSR:APMAC,"1a:fe:34:a5:8d:c6"
+CIFSR:STAIP,"192.168.101.133"
+CIFSR:STAMAC,"18:fe:34:a5:8d:c6"
OK
4. PC 與 ESP8266 設備連接同?一路路由器?,在 PC 端使?用?網絡調試?工具,建?立?一個 UDP 傳
輸。
- 假設,PC 創建的 UDP ?自身 IP 地址為 192.168.101.116,端?口為 8080。
5. 后?文將基于前述步驟,介紹兩種 UDP 通信的示例例。
?
?
3.1. 固定遠端的 UDP 通信
UDP 通信的遠端固定,由 AT+CIPSTART 指令的最后?一個參數設置為 0 決定。系統將分配
?一個連接號給這個固定連接,UDP 通信雙?方不不會被其他設備替代。
1. 使能多連接
AT+CIPMUX=1
響應 :
?OK
2. 創建 UDP 傳輸。例例如,分配連接號為 4,指令如下:
AT+CIPSTART=4,"UDP","192.168.101.110",8080,1112,0
響應 :
4,CONNNECT
OK
📖 說明:
示例例指令中的參數說明如下:
? "192.168.101.110", 8080 為 UDP 傳輸的遠端 IP 和端?口,即前?文步驟 4 中 PC 建?立的 UDP 端?口;
? 1112 為 ESP8266 本地的 UDP 端?口,?用戶可?自?行行設置,如不不設置則為隨機值;
? 0 表示當前 UDP 傳輸建?立后,UDP 遠端不不會被其他設備更更改;即使有其他設備通過 UDP 協議發數據到
ESP8266 UDP 端?口 1112,ESP8266 的第 4 號 UDP 傳輸的遠端也不不會被替換,使?用指令
“AT+CIPSEND=4, X” 發送數據,仍然是當前固定的 PC 端收到。
3. 發送數據
AT+CIPSEND=4,7 // Send 7 bytes to transmission NO.4
>UDPtest
// enter the data, no CR
? <link ID>:?網絡連接 ID 號 (0 ~ 4),?用于多
連接的情況
? <length>:數字參數,表明發送數據的?長
度,最?大?長度為 2048
響應 :
Recv 7 bytes
SEND OK
? 注意:
? 發送數據時,如果輸?入的字節數超過了了設置?長度(n):
- 系統將提示 busy,并發送數據的前 n 個字節,發送完成后響應 SEND OK。
- 超出?長度的部分數據被認為是?無效數據,不不被接受。
4. 接收數據。 當 ESP8266 設備接收到服務器?發來的數據,將提示如下信息:
+IPD,4,n:xxxxxxxxxx // received n bytes, data=xxxxxxxxxxx
5. 斷開 UDP 傳輸
AT+CIPCLOSE=4
響應 :
4,CLOSED
OK
二:遠端可變的 UDP 通信?
當使?用 AT+CIPSTART 指令創建 UDP 通信,將最后?一個參數設置為 2 時,UDP 通信的遠
端可改變。
1. 創建 UDP 傳輸。
AT+CIPSTART="UDP","192.168.101.110",8080,1112,2
響應 :
CONNNECT
OK
(AT+CIPMUX—設置多連接)
📖 說明:
示例例指令中的參數說明如下:
? "192.168.101.110", 8080 為 UDP 傳輸的遠端 IP 和端?口,即前?文 PC 建?立的 UDP 端?口;
? 1112 為 ESP8266 本地的 UDP 端?口,?用戶可?自?行行設置,如不不設置則為隨機值;
? 2 表示當前 UDP 傳輸建?立后,UDP 傳輸遠端仍然會更更改;UDP 傳輸遠端會?自動更更改為最近?一個與
ESP8266 UDP 通信的遠端。
2. 發送數據
AT+CIPSEND=7 // Send 7 bytes
>UDPtest
// enter the data, no CR
響應 :
Recv 7 bytes
SEND OK
? 注意:
? 發送數據時,如果輸?入的字節數超過了了設置?長度(n):
- 系統將提示 busy,并發送數據的前 n 個字節,發送完成后響應 SEND OK。
- 超出?長度的部分數據被認為是?無效數據,不不被接受。
?
3. 發送數據到其他指定遠端。例例如,發數據到 192.168.101.111, 端?口 1000。
AT+CIPSEND=7,"192.168.101.111",1000 // Send 7 bytes
>UDPtest
// enter the data, no CR
響應 :
Recv 7 bytes
SEND OK
4. 接收數據。 當 ESP8266 設備接收到服務器?發來的數據,將提示如下信息:
+IPD,n:xxxxxxxxxx // received n bytes, data=xxxxxxxxxxx
5. 斷開 UDP 傳輸
AT+CIPCLOSE
響應 :
CLOSED
OK
今日心得:?
1:單連接 TCP Client和UDP 傳輸的區別
1. 連接性質
特性 | TCP Client | UDP 傳輸 |
---|
連接類型 | 面向連接(需三次握手) | 無連接 |
可靠性 | 可靠傳輸(自動重傳、數據校驗) | 不可靠傳輸(可能丟包/亂序) |
數據邊界 | 字節流(無明確邊界) | 數據報文(保留邊界) |
傳輸順序 | 保證數據順序 | 不保證順序 |
?AT指令實現差異(以ESP8266為例)
TCP Client 示例:
AT+CIPSTART="TCP","192.168.1.100",80 # 連接固定服務器
AT+CIPSEND=10 # 發送10字節數據
> HelloWorld # 輸入數據
UDP 傳輸示例:
AT+CIPSTART="UDP","192.168.1.101",9000,0,2 # 可變遠端模式
AT+CIPSEND=5,"192.168.1.102",8000 # 臨時切換目標
> Hi123 # 發送數據
?
何時選擇?
選?TCP Client?當:
需要可靠傳輸(如固件升級)
與固定服務器通信(如MQTT服務器)
傳輸大文件/重要數據
選?UDP 傳輸?當:
需要低延遲(如實時控制)
需廣播或動態切換目標
容忍少量丟包(如傳感器數據上報)
資源受限環境(內存/CPU有限)
?
2:
詳細解釋:UDP通信中的遠端IP與近端IP
1. 遠端IP vs 近端IP
概念 | 遠端IP | 近端IP |
---|
定義 | 通信目標設備的IP地址(數據接收方) | 本地設備自身的IP地址(數據發送方) |
作用 | 指定數據要發送到哪個設備 | 指定從哪個設備端口發出數據 |
AT指令示例 | AT+CIPSTART="UDP","192.168.101.110",8080 | 本地端口在指令中作為第4個參數(如1112 ) |
何時使用 | 當需要發送數據到特定設備時 | 當需要綁定本地固定端口接收數據時 |
關鍵區別:
2. 固定遠端 vs 可變遠端UDP通信
固定遠端(參數=0)
特點:
一旦建立連接,所有數據只能發往初始設定的遠端IP。
指令示例:
AT+CIPSTART="UDP","192.168.101.110",8080,1112,0
(末尾參數0
表示固定遠端)
適用場景:
與單一固定設備通信(如固定服務器)。
可變遠端(參數=2)
特點:
指令示例:
AT+CIPSTART="UDP","192.168.101.110",8080,1112,2
(末尾參數2
表示可變遠端)
適用場景:
需與多個設備通信(如物聯網設備群)
?
3. 為什么后續發送又回到原遠端?
在可變遠端模式下,遠端切換是臨時的:
首次發送到新目標:
bash
AT+CIPSEND=7,"192.168.101.111",1000 # 臨時指定新目標
> UDPtest
后續發送時未指定目標:
bash
AT+CIPSEND=7 # 未指定目標,使用"當前遠端"
> NextData
?
3.遠端自動更新的條件:
只有當其他設備主動發送數據到你的本地端口時,ESP8266才會更新"當前遠端"。
(例如:若192.168.101.111
向你的端口1112
發送數據,后續AT+CIPSEND=7
會發往該設備)
?
核心總結
場景 | 遠端選擇邏輯 |
---|
固定遠端模式 | 永遠發往初始設定的IP |
可變遠端模式 + 指定目標 | 臨時覆蓋目標(僅本次生效) |
可變遠端模式 + 未指定目標 | 發往"當前遠端"(初始值 或 最后一次主動與你通信的設備) |
更新"當前遠端"的方法 | 其他設備需主動發送數據到你的本地端口 |
操作建議:
若需持續與某新設備通信,每次發送時顯式指定目標IP,或確保該設備先向你的端口發送數據以觸發自動更新。
?