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 与手机端的连接
仅 BLE client 支持设置 GATT MTU 长度,并且需要先建立 BLE 连接,才能设置 MTU 长度。最终实际的 MTU 长度需经过协商,设置指令返回 OK 仅表示尝试协商 MTU,因此,设置长度不一定有效,建议设置后,使用查询指令 AT+BLECFGMTU? 查询实际的 MTU 长度。
使用 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 |
---|---|
可以将数据放到 BLE scan response 中,指令为 AT+BLESCANRSPDATA。
更新时间: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