ESP-AT

  • at
  • AT
  • ESP-AT
  • AT+CWCOUNTRY
  • AT+BLEADVPARAM
  • AT+BLEINIT
  • AT+BLUFI
  • BLE
  • UART
  • 921600
  • AT+UART_DEF
  • AT+UART_CUR
  • AT+SYSMFG
  • uart_baudrate
  • factory_param_data.csv
  • 波特率
  • 出厂参数

ESP8266通过AT指令使用浏览器进行WiFi配网,每次发送"AT+WEBSERVER=1,80,25"之后就会报错"ERROR"无法成功创建web server

问题出现的原因:默认的 AT 固件并不支持 AT web server 的功能
解决方式:

  1. 基于ESP_AT工程环境通过./build.py menuconfig命令配置开启AT web server 的功能;对于 ESP8266 设备,需要关闭一些不必要的选项来存储必要的 html文件。
  2. 完成配置后保存,然后./build.py进行编译,编译完成后将支持AT web server 功能的固件烧录进ESP8266里。

AT+CWCOUNTRY 指令配置国家代码后,工作信道是否会依据对应法规自动调整,还是仅更新 country_code 字段而不影响信道参数?

当 country_policy 配置为 0 时,模块国家代码将随接入 AP 的不同自动变更,信道参数则完全由路由器分配决定。

模块工作信道一般由路由器下发。如果路由器具备信道跳频功能,相关信道变化可同步至模块。

AT+BLEADVPARAM 指令如何设置广播间隔为 1.6 秒?

AT+BLEADVPARAM 的最小/最大广播间隔由 <adv_int_min> 和 <adv_int_max> 参数控制,单位为 0.625 ms。

如果要设置 1.6 s 广播间隔:

1600 ms / 0.625 = 2560

2560 转换成十六进制为 0xA00,因此最小和最大广播间隔都应填 0xA00:

AT+BLEADVPARAM=0xA00,0xA00,0,0,7,0,,

参考文档:
https://docs.espressif.com/projects/esp-at/zh_CN/latest/esp32/AT_Command_Set/BLE_AT_Commands.html#id31

ESP-AT 执行 "AT+CIPSTART" 阻塞,有指令可以中断吗?

  • AT 层不提供强制中断 CIPSTART 的命令。
  • 在 TCP 连接超时之前,AT+CIPSTART 会处于阻塞状态。

规避/优化方式:

  • 缩短 TCP 连接超时时间(服务端或设备侧配置)。
  • 业务层避免并发下发 BLUFI / 配网类命令 与网络连接命令。
  • 合理规划命令时序,避免在网络不稳定场景下频繁发起 CIPSTART。

ESP-AT 在 STA 模式下 ping 延迟较高,如何降低延迟?

  • 原因说明:

ESP-AT 默认配置为 AT+SLEEP=1,即 Wi-Fi Modem-sleep 模式。在该模式下,当设备工作在 Station (STA) 模式时,Wi-Fi 射频会依据 AP 的 DTIM 周期周期性进入休眠,从而增加数据包(如 ping)的响应延迟。

解决方法:
在设备上电后,将睡眠模式关闭即可显著降低 ping 延迟:

AT+SLEEP=0

该设置会禁用 Modem-sleep,使 Wi-Fi 射频保持常开状态,从而避免因 DTIM 机制引入的延迟问题。

注意事项:

  • 关闭睡眠模式会提升实时性,但同时会增加功耗
  • 该设置仅在 Wi-Fi 工作于 STA 模式时生效

ESP-AT 作为 BLE GATT Server 时,是否支持通过 AT 指令自定义 Service UUID 或 Characteristic UUID?

不支持通过普通 BLE AT 指令动态自定义 Service UUID 或 Characteristic UUID。

ESP-AT 的 GATT 数据库在固件编译阶段已经固定创建,AT 指令仅支持对已有 Attribute 的数值进行读写,不支持动态创建、删除或修改 Service 和 Characteristic UUID。

其中,AT+BLEGATTSSETATTR 仅用于修改已有特征值的数据内容,不能创建新的 Characteristic,也不能修改 UUID。

如果确实需要定制 GATT 表,应在固件侧预先配置或重新编译固件,而不是依赖运行时 AT 指令动态修改。

在 ESP-AT 固件中,AT+BLEINIT=2 与 AT+BLUFI=1 是否可以同时使用?

不建议同时使用。AT+BLEINIT=2 启用 BLE 角色,AT+BLUFI=1 启用蓝牙配网,两项功能会占用相同的蓝牙资源,存在资源冲突,不能稳定同时启用。

推荐流程是:完成蓝牙配网后,先关闭 BLUFI 蓝牙配网功能,再启用需要的 BLE 功能,确保蓝牙任务和 GATT 资源不会互相冲突。

ESP-AT 中修改 BLE UUID 后,会立即生效吗?

不会立即生效。

BLE 的 GATT 表会在初始化时注册到协议栈中,UUID 属于 Attribute Table 的静态属性;同时,客户端在连接建立后通常还会缓存服务结构。因此修改 UUID 后,必须重新初始化 BLE,新的 UUID 才能生效。

如何将 ESP-AT 固件的 UART 通信波特率修改为 921600?

可通过以下任一方式将 UART 通信波特率设置为 921600:

  1. 修改 ESP-AT 源码中的出厂参数配置文件 customized_partitions/raw_data/factory_param/factory_param_data.csv,将 uart_baudrate 字段的值修改为 921600,然后重新编译并将固件烧录至模组。
  2. 使用 AT+UART_DEF 命令设置波特率。该配置会保存至 Flash,设备重新上电后仍然有效。命令说明:https://docs.espressif.com/projects/esp-at/zh_CN/latest/esp32c5/AT_Command_Set/Basic_AT_Commands.html#at-uart-def-uart-flash
  3. 使用 AT+SYSMFG 命令修改出厂默认的 UART 波特率。参考示例:https://docs.espressif.com/projects/esp-at/zh_CN/latest/esp32/AT_Command_Examples/sysmfg_at_examples.html#uart

补充说明:

ESP-AT 提供多种修改 UART 配置的方法:

  • 使用 AT+UART_CUR 或 AT+UART_DEF 设置当前或默认 UART 波特率。
  • 通过 AT+SYSMFG 修改出厂默认参数。
  • 重新编译 AT 固件,修改默认 UART 配置。

使用 ESP32-C3 AT 固件建立蓝牙连接后,发送 “AT+SLEEP=2” 进入 Light-sleep 失败,是什么原因?

如果出现该问题,UART0 通常会输出如下报错日志:

E (40369) at-base: shouldn't enable sleep when softap is enabled

这说明当前设备的 Wi-Fi 工作在 SoftAP 模式,而 AT 固件不支持在 SoftAP 模式下开启睡眠。

解决方法如下:

  1. 发送 AT+CWMODE=1,将设备切换到 Station 模式,关闭 SoftAP。
  2. 再发送 AT+SLEEP=2 开启 Light-sleep。

此外,如果在 BLE 模式下使用 Light-sleep,还需要确保外接 32 KHz 晶振,否则也无法正常休眠。