STM32第十九天 ESP8266-01S和电脑实现串口通信(2)
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 • :⽹网络连接 ID 号 (0 ~ 4),⽤用于多 连接的情况 • :数字参数,表明发送数据的⻓长 度,最⼤大⻓长度为 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 OK4. 接收数据。 当 ESP8266 设备接收到服务器器发来的数据,将提示如下信息: +IPD,n:xxxxxxxxxx // received n bytes, data=xxxxxxxxxxx 5. 断开 UDP 传输 AT+CIPCLOSE 响应 : CLOSED OK
今日心得:
1:单连接 TCP Client和UDP 传输的区别
1. 连接性质
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
AT+CIPSTART=\"UDP\",\"192.168.101.110\",8080
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,或确保该设备先向你的端口发送数据以触发自动更新。