AT命令

[English]s

本文提供了有关 ESP-AT 的常见问题,更多问题请见 ESP-AT 用户指南.


1. 如何使用 ESP8266 AT 固件下载重定向的资源?

  • ESP8266 AT HTTP 指令不支持重定向,在获取到服务器返回的状态码 301(永久性重定向)或者 302(临时性重定向)后不会自动跳转到新的 URL 地址。

  • 可以使用 wireshark 或者 postman 获取到实际访问的 URL,然后通过 HTTP 指令访问。

  • 需要注意的是,当前 ESP8266-IDF-AT_V2.1.0.0 默认不支持 HTTP 指令,若想要使用 HTTP 的指令,需要基于 esp-at 编译,参考 ESP8266 platform。编译时需要在 menuconfig 中使能 HTTP:menuconfig -> Component config -> AT -> [*] AT http command support

更新时间:2022.4.21


2. ESP8266 v2.1.0.0 版本 AT 固件,如何关闭默认的 power save 模式?

  • 使用 AT+SLEEP=0 指令即可关闭 AT 固件默认的 power save 模式。

更新时间:2022.4.21


3. 发送 AT 命令,返回如下日志,是什么原因?

busy p...
OK
  • 检查发送的 AT 命令是否存在多余的字节,例如多了换行和回车(CR 和 LF),更进一步,您也可以抓下通信线上的数据。

  • 更多消息请参考:ESP-AT 消息报告

更新时间:2022.4.21


4. AT+BLEGATTSNTFY 和 AT+BLEGATTSIND 的 length 最大可以支持到多少?

Supported Targets ESP32
  • length 的最大值为 MTU - 3,MTU 最大可以支持到 517 字节,因此 length 的最大值为 514 字节。

更新时间:2022.4.21


5. ESP8266 NONOS AT 固件如何使能全校准模式?

  • NONOS AT 固件默认使用部分校准,可通过如下方式使用全校准: 修改文件 esp_init_data_default_v08.bin,byte[114] = 3 (部分校准 byte[114] = 1,全校准 byte[114] = 3)

更新时间:2022.4.21


6. ESP32 AT BLE UART 透传的最大传输率是?

  • 办公室开放环境下,串口波特率为 2000000 时:ESPAT BT 平均传输速率为 0.56 Mb,ESPAT BLE 平均传输速率为 0.101 Mb。

  • 屏蔽箱数据后续会继续补充测试。

更新时间:2022.4.21


7. 如何获取到模组 ESP32-MINI-1(内置芯片 ESP32-U4WDH) 的 AT 固件?

更新时间:2022.4.21


8. ADV 广播参数超过 32 字节之后应该如何设置?

Supported Targets ESP32
  • AT+BLEADVDATA 指令支持 adv 广播参数最大为 32 字节,如果需要设置更长的广播参数,请调用 AT+BLESCANRSPDATA 指令来设置。

更新时间:2022.4.21


9. AT 支持 Wi-Fi 漫游功能吗?

Supported Targets ESP32 ESP32-S2 ESP32-C3
  • 不支持

更新时间:2022.4.21


10. 使用 ESP-AT 发送 TCP 数据时,有时数据会混乱/部分丢失,应该如何处理?

  • 建议添加硬件流控或软件流控:

更新时间:2022.4.21


11. ESP32 进行 BLE OTA 时,使用 BLE 连接手机、UART 连接 MCU ,对 MCU 进行 OTA。手机设置 MTU 增大后,ESP32 与 MCU 端数据传输仍然很慢。可以从哪方面排查?

  • 可能由于 ESP32 和手机端设置 MTU 时没有成功,或者 ESP32 和 MCU 端通信时 UART 限制。所以建议从以下几点进行排查/改进:

  • ESP32 与手机端的连接

    1. 仅 BLE client 支持设置 GATT MTU 长度,并且需要先建立 BLE 连接,才能设置 MTU 长度。最终实际的 MTU 长度需经过协商,设置指令返回 OK 仅表示尝试协商 MTU,因此,设置长度不一定有效,建议设置后,使用查询指令 AT+BLECFGMTU? 查询实际的 MTU 长度。

    2. 使用 BLE SPP,即 BLE 透传模式,可增大传输速率。

  • ESP32 与 MCU 端的连接:适当调大 UART 的波特率,可增大传输速率。

更新时间:2022.4.21


12. 使用 ESP32-C3 作为 Server 且 AT 固件版本为 v2.2.0.0 时,AT+CIPSERVERMAXCONN 指令允许建立的最大连接数是多少?

  • AT+CIPSERVERMAXCONN 指令默认设置的允许建立的最大连接数是 5 。

  • 可增大 “menuconfig -> Component config -> AT -> Socket Maximum Connection” 参数设置,以支持更大的连接数。

  • 若需要支持 10 个以上的连接数,还需要增大 “menuconfig -> Component config -> LWIP -> Max number of open sockets”(默认是 10)配置。

  • 但实际运行时允许的最大连接数取决于芯片的剩余可用内存。当无法建立更多连接时建议使用 AT+SYSRAM 命令来查询当前剩余可用内存。

更新时间:2022.4.21


13. 使用 release/v2.1.0.0 版本的 AT 固件,ESP32 最多支持保存多少个 BLE 设备的绑定配对信息?

  • ESP32 最多支持保存 15 个 BLE 设备的绑定配对信息。

更新时间:2022.4.21


14. AT+BLEADVDATA 广播数据支持的最大长度为 31,如何支持更大的数据长度?

Supported Targets ESP32

更新时间:2022.4.21


15. WPA2 Enteprise 支持哪些认证方式呢?

Supported Targets ESP32 ESP8266 ESP32-C3
  • 仅支持 EAP-TLS/EAP-PEAP/EAP-TTLS 三种,详情参考 AT+CWJEAP 指令介绍。

更新时间:2022.4.21


16. AT+HTTPCPOST 有哪些使用示例?

Supported Targets ESP8266
  • 在 ESP-AT master 版本下面手动编译固件,需要将 at process task stack size 大小改到 4096 以上, 具体的操作步骤如下:

    • ./build.py menuconfig—–>AT—–>(5120)。表示 AT 仓库中任务运行的栈大小,将用于运行 AT 指令。

    • [*] AT http 指令支持:

AT+CWMODE=1     //设置为 station 模式
OK
AT+CWJAP="iot","123456789"
WIFI CONNECTED
WIFI GOT IP
AT+HTTPCPOST="http://61.172.47.198:8082/hello/test",172
OK
>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAA
SEND OK

更新时间:2022.4.21


17. 是否有 AT+CIPRECVDATA 接收服务器端缓存数据示例?

Supported Targets ESP8266
AT+CWMODE=1     //设置为 station 模式
OK
AT+CWJAP="iot","123456789"
WIFI CONNECTED
WIFI GOT IP
AT+CIPSTART="TCP","192.168.3.129",8080
CONNECT
OK
AT+CIPRECVMODE=1
OK
//服务器端发送数据给客户端 16字节
AT+CIPRECVLEN?    //查询服务器端缓存数据
+CIPRECVLEN:16    //确保查询长度不为 0,否则获取数据会返回 ERROR
AT+CIPRECVDATA=1080
+CIPRECVDATA:16,http://en.usr.cn
OK

更新时间:2022.4.21


18. 使用 ESP32 的 AT 固件,发送 BLE 扫描命令,没有收到扫描应答包,是什么原因?

Supported Targets ESP8266
  • 使用的 AT 指令如下:

AT+BLEINIT=1
AT+BLESCANPARAM=0,0,0,100,50
AT+BLESCAN=1

有广播包,但没有扫描应答包; 命令回复的日志如图所示:

日志

  • 若想要获得扫描应答包,那么需要设置的扫描方式是 “active scan”,即 “AT+BLESCANPARAM=1, 0, 0, 100, 50”

  • 且对端设备需要设置 “scan rsp data” ,才能获得扫描应答包;

  • 可参考ESP32 AT 指令集与使用示例

更新时间:2022.4.21


19. 使用 AT+BLEADVDATA 指令发广播包最大长度有限制吗?

  • AT+BLEADVDATA 广播包最大长度为 31 字节。

更新时间:2022.4.21


20. 使用 ESP32 的 v2.2.0.0 版本的 AT 固件,AT+BLEGATTCWR 指令的 “length” 参数最大可以设置多大?

  • AT+BLEGATTCWR 指令的 “length” 参数的最大设置对应 example 文件的下的 “val_max_len” 参数设置,建议不要超过 512。请参见 README 下的 “val_max_len” 参数说明。

更新时间:2022.4.21


21. ESP32 使用 v2.2.0.0 版本的 AT 固件连接上 AP,重新复位上电后会自动连接 AP,如何取消这个设置?

  • 建议使用 AT+SYSSTORE=0 指令。调用该指令后,相关受影响的指令对应的配置信息不会保存到 flash。比如,在使用 AT+CWJAP 命令连接 AP 前,先使用 AT+SYSSTORE=0 命令设置不保存历史 AP 信息到 flash。

更新时间:2022.4.21


22. ESP32-AT 支持 PPP 吗?

  • 不支持。

更新时间:2022.4.21


23. AT 如何使能 Wi-Fi Debug?

Supported Targets ESP32 ESP8266 ESP32-C3 ESP32-S2
  • 使能 log 等级:./build.py menuconfig -> Component Config -> Log output -> Default log verbosity 设置到 Verbose。

  • 使能 Wi-Fi debug:./build.py menuconfig-> Component config -> Wi-Fi -> Enable WiFi debug log -> Wi-Fi debug log level(Wi-Fi Debug log Verbose)。

更新时间:2022.4.21


24. 使用 AT+SYSFLASH 指令更新证书应注意什么?

  • 证书长度必须 4 字节对齐。

  • 证书 bin 需要通过 tools/AtPKI.py 生成,参考 esp-at/tools/README.md 中生成方法。例如:

python AtPKI.py generate_bin -b mqtt_cert_v2.bin cert mqtt_client.crt

更新时间:2022.4.21


25. AT+HTTPCPOST 指令中 content-type 默认类型是什么?

Supported Targets ESP32 ESP8266 ESP32-C3
  • 默认类型是 application/x-www-form-urlencoded。 更新时间:2022.4.21


26. AT+HTTPCLIENT 发送数据到服务器有长度限制吗?

  • 有限制,AT 命令总长度不能超过 256 字节。数据是在指令参数中,导致 HTTP POST 请求数据长度会有限制,如果发送的数据比较长,建议通过 AT+HTTPCPOST 指令去设置,或者用 TCP 指令模拟 HTTP 发送数据。

更新时间:2022.4.21


27. AT 支持 哪些 TLS 版本?

  • 支持 TLS1.0、TLS 1.1、TLS1.2,具体支持的版本号可以在 menuconfig–>Component config–>mbedTLS 中查看。

更新时间:2022.4.21


28. 如何存储 BLE 名称到 flash 中?

  • 可以调用如下指令:

AT+SYSTORE=1            //使能设置到flash
AT+BLEINIT=2            // 设置为 BLE server 模式
AT+BLENAME?             //查询默认的 BLE 名称
AT+BLENAME="ESP-123"    // 设置新的 BLE 名称
AT+RST                  // 重启模组
AT+BLEINIT=2            // 设置为 BLE server 模式
AT+BLENAME?             // 查看 BLE 名称是否设置成功

更新时间:2022.4.21


29. BLE 客户端如何使能 notify 和 indicate 功能?

  • BLE 的特征的属性除了读写还有 notify 和 indicate。这两种都是服务端向客户端发送数据的方式,但是要想真的发送成功需要客户端提前注册 notification,也就是写 CCCD 的值。

  • 如果要使能 notify,需要写 0x1;如果要使能 indicate,需要写 0x2(写 0x2902 这个描述符);如果是既想使能 notify 又想使能 indicate,需要写 0X03。

  • 比如,ESP-AT 的默认的服务中,0xC305 是可 notify 的,0xC306 是可 indicate 的。我们分别写这两个特征下面的 0x2902 描述符:

AT+BLEGATTCWR=0,3,6,1,2>     //使能设置到flash
// 写 0x01
OK
// server+WRITE:0,1,6,1,2,<0x01>,<0x00>
AT+BLEGATTCWR=0,3,7,1,2>
// 写 0x02
OK
// server+WRITE:0,1,6,1,2,<0x02>,<0x00>
 ccc  server 可以发送 notify  indicate 的前提条件

更新时间:2022.4.21


30. ESP32 端作为 slave 时,MCU 端如何定义 json 格式的 MQTT 数据,字符串如何转义?

  • 原指令发送: AT+MQTTPUB=0, ”topic”, ”{“timestamp”:”20201121085253”}”, 1, 0。MCU 端发送指令的时候,需要对部分字符进行转义,尤其注意对 “” 字符进行转义,示例:

sendData(TX_TASK_TAG, "AT+MQTTPUB=0,\"topic\",\"{\\\"timestamp\\\":\\\"20201121085253\\\"}\",1,0\r")   //MCU 端定义

更新时间:2022.4.21


31. ESP8266-NONOS 版本的 AT 固件,默认使用的 AT 指令传输串口是哪个?

  • ESP8266-NONOS(V2.0 版本以下的)版本的 AT 固件,默认使用的 AT 指令传输串口是 UART0(GPIO1 和 GPIO3)。 更新时间:2022.4.21