STM32第十九天 ESP8266-01S和电脑实现串口通信(2)
OK
2. 创建 UDP 传输。例例如,分配连接号为 4,指令如下:

二:远端可变的 UDP 通信

今日心得:
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 # 输入数据
特点:始终发往同一目标,断开需显式
AT+CIPCLOSE
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 ) |
何时使用 | 当需要发送数据到特定设备时 | 当需要绑定本地固定端口接收数据时 |
关键区别:
远端IP是目标:你发给谁(如服务器/另一设备)。
近端IP是源:你是谁(本地设备身份),通常由路由器分配,无需手动设置。
2. 固定远端 vs 可变远端UDP通信
固定远端(参数=0)
特点:
一旦建立连接,所有数据只能发往初始设定的远端IP。指令示例:
AT+CIPSTART="UDP","192.168.101.110",8080,1112,0
(末尾参数0
表示固定远端)适用场景:
与单一固定设备通信(如固定服务器)。
可变远端(参数=2)
特点:
可动态切换目标设备。
自动更新机制:当其他设备向你的本地端口发送数据时,ESP8266会自动将该设备设为新远端。
手动覆盖:可通过指令临时指定新目标。
指令示例:
AT+CIPSTART="UDP","192.168.101.110",8080,1112,2
(末尾参数2
表示可变远端)适用场景:
需与多个设备通信(如物联网设备群)
3. 为什么后续发送又回到原远端?
在可变远端模式下,远端切换是临时的:
首次发送到新目标:
bash
AT+CIPSEND=7,"192.168.101.111",1000 # 临时指定新目标 > UDPtest
此时数据发往
192.168.101.111:1000
。但ESP8266的“当前远端”仍为初始值(
192.168.101.110:8080
)。
后续发送时未指定目标:
bash
AT+CIPSEND=7 # 未指定目标,使用"当前远端" > NextData
数据会自动发回初始远端(
192.168.101.110:8080
),因为未覆盖目标。
3.远端自动更新的条件:
只有当其他设备主动发送数据到你的本地端口时,ESP8266才会更新"当前远端"。
(例如:若192.168.101.111
向你的端口1112
发送数据,后续AT+CIPSEND=7
会发往该设备)
核心总结
场景 | 远端选择逻辑 |
---|---|
固定远端模式 | 永远发往初始设定的IP |
可变远端模式 + 指定目标 | 临时覆盖目标(仅本次生效) |
可变远端模式 + 未指定目标 | 发往"当前远端"(初始值 或 最后一次主动与你通信的设备) |
更新"当前远端"的方法 | 其他设备需主动发送数据到你的本地端口 |
操作建议:
若需持续与某新设备通信,每次发送时显式指定目标IP,或确保该设备先向你的端口发送数据以触发自动更新。