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。
  1. 后⽂文将基于前述步骤,介绍两种 UDP 通信的示例例。


3.1. 固定远端的 UDP 通信
UDP 通信的远端固定,由 AT+CIPSTART 指令的最后⼀一个参数设置为 0 决定。系统将分配
⼀一个连接号给这个固定连接,UDP 通信双⽅方不不会被其他设备替代。

  1. 使能多连接
    AT+CIPMUX=1
    响应 :

OK

  1. 创建 UDP 传输。例例如,分配连接号为 4,指令如下:
    AT+CIPSTART=4,"UDP","192.168.101.110",8080,1112,0
    响应 :
    4,CONNNECT
    OK
    📖 说明:
    示例例指令中的参数说明如下:
    •**"192.168.101.110", 8080UDP传输的远端IP和端⼝口,即前⽂文步骤4PC建⽴立的UDP端⼝口;
    •**1112ESP8266本地的UDP端⼝口,⽤用户可⾃自⾏行行设置,如不不设置则为随机值;
    0表示当前UDP传输建⽴立后,UDP远端不不会被其他设备更更改;即使有其他设备通过UDP协议发数据到**
    ESP8266 UDP端⼝口1112ESP8266的第4UDP传输的远端也不不会被替换,使⽤用指令**
    "AT+CIPSEND=4, X"发送数据,仍然是当前固定的PC端收到。
  2. 发送数据
    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
    *-*超出⻓长度的部分数据被认为是⽆无效数据,不不被接受。
  3. 接收数据。 当 ESP8266 设备接收到服务器器发来的数据,将提示如下信息:
    +IPD,4,n:xxxxxxxxxx // received n bytes, data=xxxxxxxxxxx
  4. 断开 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", 8080UDP 传输的远端IP 和端⼝口,即前⽂文PC 建⽴立的UDP端⼝口;
    • 1112ESP8266 本地的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                          # 输入数据
  • 特点:始终发往同一目标,断开需显式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. 为什么后续发送又回到原远端?

在可变远端模式下,远端切换是临时的

  1. 首次发送到新目标

    bash

    复制代码
    AT+CIPSEND=7,"192.168.101.111",1000  # 临时指定新目标
    > UDPtest
    • 此时数据发往 192.168.101.111:1000

    • 但ESP8266的"当前远端"仍为初始值192.168.101.110:8080)。

  2. 后续发送时未指定目标

    bash

    复制代码
    AT+CIPSEND=7          # 未指定目标,使用"当前远端"
    > NextData
    • 数据会自动发回初始远端192.168.101.110:8080),因为未覆盖目标。

3.远端自动更新的条件

只有当其他设备主动发送数据到你的本地端口 时,ESP8266才会更新"当前远端"。

(例如:若192.168.101.111向你的端口1112发送数据,后续AT+CIPSEND=7会发往该设备)

核心总结

场景 远端选择逻辑
固定远端模式 永远发往初始设定的IP
可变远端模式 + 指定目标 临时覆盖目标(仅本次生效)
可变远端模式 + 未指定目标 发往"当前远端"(初始值 或 最后一次主动与你通信的设备)
更新"当前远端"的方法 其他设备需主动发送数据到你的本地端口

操作建议

若需持续与某新设备通信,每次发送时显式指定目标IP,或确保该设备先向你的端口发送数据以触发自动更新。

相关推荐
编程墨客7 小时前
STM32F103C8T6单片机内部执行原理及启动流程详解
stm32·单片机·嵌入式硬件
Wangshanjie_988 小时前
【STM32】-SPI通讯
stm32
qq_411262429 小时前
整体无需占用任何硬件 UART,即可新增一条全双工软串口
单片机·嵌入式硬件
XINVRY-FPGA11 小时前
XCZU47DR-2FFVG1517I Xilinx FPGA AMD ZynqUltraScale+ RFSoC
人工智能·嵌入式硬件·fpga开发·信息与通信·信号处理·射频工程·fpga
Cyrus_柯11 小时前
单片机基础(STM32-DAY2(GPIO))
单片机·嵌入式硬件
吃货界的硬件攻城狮11 小时前
【STM32 学习笔记】SPI通信协议
笔记·stm32·学习
努力的小帅12 小时前
STM32单片机_3
stm32·单片机·嵌入式硬件·学习·stm32c8t6
逼子格12 小时前
开关电源和线性电源Multisim电路仿真实验汇总——硬件工程师笔记
嵌入式硬件·硬件工程·硬件工程师·开关电源·multisim电路仿真·稳压电源·线性电源
SKYDROID云卓小助手13 小时前
无人设备遥控器之无线电频率篇
服务器·网络·单片机·嵌入式硬件·算法
逼子格15 小时前
振荡电路Multisim电路仿真实验汇总——硬件工程师笔记
笔记·嵌入式硬件·硬件工程·硬件工程师·硬件工程师真题·multisim电路仿真·震荡电流