# AT命令 [English]s 本文提供了有关 ESP-AT 的常见问题,更多问题请见 [ESP-AT 用户指南](https://docs.espressif.com/projects/esp-at/zh_CN/latest/faq.html). ------------------------------------------ ## 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](https://docs.espressif.com/projects/esp-at/en/latest/Compile_and_Develop/How_to_clone_project_and_compile_it.html#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 消息报告](https://docs.espressif.com/projects/esp-at/zh_CN/latest/esp32/AT_Command_Set/index.html#id5)。 更新时间: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 固件? * 请参考 [如何从 GitHub 下载最新临时版本 AT 固件](https://docs.espressif.com/projects/esp-at/zh_CN/latest/esp32/Compile_and_Develop/How_to_download_the_latest_temporary_version_of_AT_from_github.html)。 更新时间:2022.4.21
------------------------------------------ ## 8. ADV 广播参数超过 32 字节之后应该如何设置? | Supported Targets | ESP32 | | ----------------- | ----- | * [AT+BLEADVDATA](https://docs.espressif.com/projects/esp-at/zh_CN/latest/esp32/AT_Command_Set/BLE_AT_Commands.html#esp32-only-at-bleadvdata-set-bluetooth-le-advertising-data) 指令支持 adv 广播参数最大为 32 字节,如果需要设置更长的广播参数,请调用 [AT+BLESCANRSPDATA](https://docs.espressif.com/projects/esp-at/en/latest/esp32/AT_Command_Set/BLE_AT_Commands.html#esp32-only-at-blescanrspdata-set-bluetooth-le-scan-response) 指令来设置。 更新时间:2022.4.21
------------------------------------------ ## 9. AT 支持 Wi-Fi 漫游功能吗? | Supported Targets | ESP32 | ESP32-S2 | ESP32-C3 | | ----------------- | ----- | -------- | -------- | * 不支持 更新时间:2022.4.21
------------------------------------------ ## 10. 使用 ESP-AT 发送 TCP 数据时,有时数据会混乱/部分丢失,应该如何处理? * 建议添加硬件流控或软件流控: - [硬件流控](https://docs.espressif.com/projects/esp-at/zh_CN/latest/esp32/Get_Started/Hardware_connection.html#id1):CTS 和 RTS 信号 - [软件流控](https://docs.espressif.com/projects/esp-idf/en/release-v4.1/api-reference/peripherals/uart.html) 更新时间: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](https://docs.espressif.com/projects/esp-at/en/release-v2.2.0.0_esp32c3/AT_Command_Set/TCP-IP_AT_Commands.html?highlight=CIPSERVERMAXCONN#at-cipservermaxconn-query-set-the-maximum-connections-allowed-by-a-server) 指令默认设置的允许建立的最大连接数是 5 。 * 可增大 “menuconfig -> Component config -> AT -> Socket Maximum Connection” 参数设置,以支持更大的连接数。 * 若需要支持 10 个以上的连接数,还需要增大 “menuconfig -> Component config -> LWIP -> Max number of open sockets”(默认是 10)配置。 * 但实际运行时允许的最大连接数取决于芯片的剩余可用内存。当无法建立更多连接时建议使用 [AT+SYSRAM](https://docs.espressif.com/projects/esp-at/en/release-v2.2.0.0_esp32c3/AT_Command_Set/Basic_AT_Commands.html?highlight=sysram#at-sysram-query-current-remaining-heap-size-and-minimum-heap-size) 命令来查询当前剩余可用内存。 更新时间: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](https://docs.espressif.com/projects/esp-at/en/latest/esp32/AT_Command_Set/BLE_AT_Commands.html#esp32-only-at-blescanrspdata-set-bluetooth-le-scan-response)。 更新时间:2022.4.21
------------------------------------------ ## 15. WPA2 Enteprise 支持哪些认证方式呢? | Supported Targets | ESP32 | ESP8266 | ESP32-C3 | | ----------------- | ----- | ------- | -------- | * 仅支持 EAP-TLS/EAP-PEAP/EAP-TTLS 三种,详情参考 [AT+CWJEAP](https://docs.espressif.com/projects/esp-at/en/latest/esp32/AT_Command_Set/Wi-Fi_AT_Commands.html#esp32-only-at-cwjeap-connect-to-a-wpa2-enterprise-ap) 指令介绍。 更新时间: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 指令支持: ```c 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 | | ----------------- | ------- | ```c 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 指令如下: ```c AT+BLEINIT=1 AT+BLESCANPARAM=0,0,0,100,50 AT+BLESCAN=1 ``` 有广播包,但没有扫描应答包; 命令回复的日志如图所示: ![日志](../../../_static/pic/AT_BLESCAN_Return_LOG.png) * 若想要获得扫描应答包,那么需要设置的扫描方式是 "active scan",即 "AT+BLESCANPARAM=1, 0, 0, 100, 50" * 且对端设备需要设置 "scan rsp data" ,才能获得扫描应答包; * 可参考[ESP32 AT 指令集与使用示例](https://www.espressif.com/sites/default/files/documentation/esp32_at_instruction_set_and_examples_cn.pdf) 。 更新时间:2022.4.21
------------------------------------------ ## 19. 使用 AT+BLEADVDATA 指令发广播包最大长度有限制吗? * AT+BLEADVDATA 广播包最大长度为 31 字节。 更新时间:2022.4.21
------------------------------------------ ## 20. 使用 ESP32 的 v2.2.0.0 版本的 AT 固件,AT+BLEGATTCWR 指令的 “length” 参数最大可以设置多大? * [AT+BLEGATTCWR](https://docs.espressif.com/projects/esp-at/zh_CN/release-v2.2.0.0_esp32/AT_Command_Set/BLE_AT_Commands.html?highlight=BLEGATTCWR#esp32-only-at-blegattcwr-gattc-writes-characteristics) 指令的 “length” 参数的最大设置对应 [example](https://github.com/espressif/esp-at/blob/release/v2.2.0.0_esp32/components/customized_partitions/raw_data/ble_data/example.csv) 文件的下的 “val_max_len” 参数设置,建议不要超过 512。请参见 [README](https://github.com/espressif/esp-at/blob/release/v2.2.0.0_esp32/tools/README.md) 下的 “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](https://docs.espressif.com/projects/esp-at/zh_CN/release-v2.2.0.0_esp32/AT_Command_Set/Basic_AT_Commands.html#at-sysstore-query-set-parameter-store-mode) 命令设置不保存历史 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](https://github.com/espressif/esp-at/blob/master/tools/README.md) 中生成方法。例如: ```shell 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](https://docs.espressif.com/projects/esp-at/zh_CN/latest/esp32/AT_Command_Set/HTTP_AT_Commands.html#at-httpcpost-post-http) 指令去设置,或者用 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 中? * 可以调用如下指令: ```c 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 描述符: ```c 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 端发送指令的时候,需要对部分字符进行转义,尤其注意对 “” 字符进行转义,示例: ```c 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