AT FAQ

[English]

AT 固件

我的模组没有官方发布的固件,如何获取适用的固件?

如果 AT 固件 章节中没有发布相关固件,您可考虑以下选择:

如何获取 AT 固件源码?

esp-at 项目以源代码和预编译库的组合形式在此仓库中分发。预编译的核心库(位于 esp-at/components/at/lib/ 目录下)是闭源的,无开源计划。

官网上放置的 AT 固件如何下载?

如何整合 ESP-AT 编译出来的所有 bin 文件?

可以使用 Flash 下载工具 的 combine 按钮进行整合。

模组出厂 AT 固件是否支持流控?

AT 命令与响应

AT 提示 busy 是什么原因?

  • 提示 “busy” 表示正在处理前⼀条命令,⽆法响应当前输⼊。因为 AT 命令的处理是线性的,只有处理完前⼀条命令后,才能接收下⼀条命令。

  • 当有多余的不可⻅字符输⼊时,系统也会提示 “busy” 或 “ERROR”,因为任何串⼝的输⼊,均被认为是命令输⼊。

    • 串⼝输⼊ AT+GMR (换⾏符 CR LF) (空格符),由于 AT+GMR (换⾏符 CR LF) 已经是⼀条完整的 AT 命令了,系统会执⾏该命令。此时如果系统尚未完成 AT+GMR 操作,就收到了后⾯的空格符,将被认为是新的命令输⼊,系统提示 “busy”。但如果是系统已经完成了 AT+GMR 操作,再收到后⾯的空格符,空格符将被认为是⼀条错误的命令,系统提示 “ERROR”。

    • MCU 发送 AT+CIPSEND 后,收到 busy p.. 响应,MCU 需要重新发送数据。因为 busy p.. 代表上一条命令正在执行,当前输入无效。建议等 AT 上一条命令响应后,MCU 再重新发送新命令。

AT 固件,上电后发送第一个命令总是会返回下面的信息,为什么?

ERR CODE:0x010b0000
busy p...
  • 此信息代表的是”正在处理上一条命令”。

  • 一般情况下只会显示”busy p…”,显示 ERR CODE 是因为打开了错误代码提示。

  • 如果是上电的第一条命令就返回了这个错误码信息,可能的原因是:这条命令后面多跟了换行符/空格/其他符号,或者连续发送了两个或多个 AT 命令。

在不同模组上的默认 AT 固件支持哪些命令,以及哪些命令从哪个版本开始支持?

  • 如果您想了解 ESP-AT 在不同模组上默认固件都支持哪些命令,您可以参考 ESP-AT 固件差异

  • 如果您想查找某个命令从哪个版本开始支持,以及各个版本上修复了哪些问题,您可以参考 release notes

主 MCU 给 ESP32-S2 设备发 AT 命令无返回,是什么原因?

当主 MCU 给 ESP32-S2 设备发送 AT 命令后需要添加结束符号,在程序中的写法为:”AT\r\n”。可参见 检查 AT 固件是否烧录成功

Wi-Fi 断开(打印 WIFI DISCONNECT) 是为什么?

您可以在 AT 日志端口 查看到 Wi-Fi 断开的原因,通常会打印 “wifi disconnected, rc:<reason_code>”。此处的 <reason_code> 请参考: Wi-Fi 原因代码

Wi-Fi 常见的兼容性问题有哪些?

  • AMPDU 兼容性问题。

    • 如果路由器不支持 AMPDU,那么 ESP32-S2 会在和路由器交互时,自动关闭 AMPDU 功能。

    • 如果路由器支持 AMPDU,但是路由器和 ESP32-S2 之间的 AMPDU 传输存在兼容性问题,那么建议关闭路由器的 AMPDU 功能或者 ESP32-S2 的 AMPDU 功能。如果您要禁用 ESP32-S2 的 AMPDU 功能,请自行 编译 ESP-AT 工程,在第五步配置工程里选择:

      • 禁用 Component config -> Wi-Fi -> WiFi AMPDU TX

      • 禁用 Component config -> Wi-Fi -> WiFi AMPDU RX

  • phy mode 兼容性问题。如果路由器和 ESP32-S2 之间的 phy mode 存在兼容性问题,那么建议切换路由器的 phy mode 或者 ESP32-S2 的 phy mode。如果您要切换 ESP32-S2 的 phy mode,请参考 AT+CWSTAPROTO 命令。

ESP-AT 命令是否支持 ESP-WIFI-MESH?

ESP-AT 当前不支持 ESP-WIFI-MESH。

是否有 AT 命令连接阿里云以及腾讯云示例?

若使用 通用 AT 固件,可参考以下示例:

AT 命令是否可以设置低功耗蓝牙发射功率?

可以。ESP32-S2 的 Wi-Fi 和 Bluetooth LE 共用一根天线,可使用 AT+RFPOWER 命令设置。

如何支持那些默认固件不支持但可以在配置和编译 ESP-AT 工程后支持的命令?

例如在 ESP32-S2 系列支持连接 WPA2 企业级路由器功能,需编译时在 menuconfig 中开启该功能 ./build.py menuconfig > Component config > AT > [*]AT WPA2 Enterprise command support

AT 命令中特殊字符如何处理?

可以参考 AT 命令分类 章节中的转义字符语法。

AT 命令中串口波特率是否可以修改?(默认:115200)

AT 命令串口的波特率是可以修改的。

ESP32-S2 使用 AT 命令进入透传模式,如果连接的热点断开,ESP32-S2 能否给出相应的提示信息?

  • 可以通过命令 AT+SYSMSG 进行配置,可设置 AT+SYSMSG=4,如果连接的热点断开,串口会上报 “WIFI DISCONNECT\r\n”。

  • 需要注意的是,该命令在 AT v2.1.0 之后添加,v2.1.0 及之前的版本无法使用该命令。

低功耗蓝牙客户端如何使能 notify 和 indicate 功能?

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

  • 如果要使能 notify,需要写 0x01;如果要使能 indicate,需要写 0x02 (写 0x2902 这个描述符);如果是既想使能 notify 又想使能 indicate,需要写 0x03

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

AT+BLEGATTCWR=0,3,6,1,2
>
// 写低位 0x01 高位 0x00(如果要使用 hex 格式写的话就是:0100)
OK
// server: +WRITE:0,1,6,1,2,<0x01>,<0x00>
AT+BLEGATTCWR=0,3,7,1,2
>
// 写低位 0x02 高位 0x00(如果要使用 hex 格式写的话就是:0200)
OK
// server: +WRITE:0,1,6,1,2,<0x02>,<0x00>
// 写 ccc 是 server 可以发送 notify 和 indicate 的前提条件

硬件

在不同模组上的 AT 固件要求芯片 flash 多大?

AT 固件如何查看 error log?

AT 在 ESP32-S2 模组上的 UART1 通信管脚与 ESP32-S2 模组的 datasheet 默认 UART1 管脚不一致?

  • ESP32-S2 支持 IO 矩阵变换,在编译 ESP-AT 的时候,可以在 menuconfig 中通过软件配置修改 UART1 的管脚配置,所以就会出现和 datasheet 管脚不一致的情况。

  • 管脚详情可以参阅 factory_param_data.csv

性能

AT Wi-Fi 连接耗时多少?

  • 在办公室场景下,AT Wi-Fi 连接耗时实测为 5 秒。但在实际使用中,Wi-Fi 连接时间取决于路由器性能,⽹络环境,模块天线性能等多个条件。

  • 可以通过 AT+CWJAP<jap_timeout> 参数,来设置最大超时时间。

ESP-AT 固件中 TCP 发送窗口大小是否可以修改?

  • TCP 发送窗口当前无法通过命令修改,需要配置和编译 ESP-AT 工程生成新的固件。

  • 可以重新配置 menuconfig 参数,Component config > LWIP > TCP > Default send buffer size

ESP32-S2 AT 吞吐量如何测试及优化?

  • AT 吞吐量测试的影响因素较多,建议使⽤ esp-idf 中的 iperf 示例进行测试(用 AT 测试时,请使用透传方式,并将数据量调整为 1460 字节连续发送)。

  • 若测试速率不满⾜需求,您可以参考 如何提高 ESP-AT 吞吐性能 来提高速率。

如何修改 ESP32-S2 AT 默认 TCP 数据段最大重传次数?

默认情况下,AT 的 TCP 数据段重传最大次数为 6 次。您可以通过以下方式重新配置 TCP 数据段重传最大次数(取值范围为:[3-12]):

  • 请参考 本地编译 ESP-AT 工程 文档自行编译 AT 固件,在第五步中,请配置 Maximum number of retransmissions of data segments

    python build.py menuconfig > Component config > LWIP > TCP > Maximum number of retransmissions of data segments
    
  • 请参考 网页编译 ESP-AT 工程 文档自行编译 AT 固件,在第五步的第三小点中,请修改 CONFIG_LWIP_TCP_MAXRTX 的值。

其他

乐鑫芯片可以通过哪些接口来传输 AT 命令?

ESP32-S2 AT 如何指定 TLS 协议版本?

编译 ESP-AT 工程时,可以在 ./build.py menuconfig > Component config > mbedTLS 目录下,可以将不需要的版本关闭使能。

AT 固件如何修改 TCP 连接数?

  • 目前 AT 默认固件的 TCP 最大连接数为 5。

  • ESP32-S2 AT 最大支持 16 个 TCP 连接,可以在 menuconfig 中进行配置,配置方法如下:

    • ./build.py menuconfig > Component config > AT > (16)AT socket maximum connection number

    • ./build.py menuconfig > LWIP > (16)Max number of open sockets

ESP32-S2 AT 支持 PPP 吗?

AT 如何使能调试日志?

  • 使能 log 等级: ./build.py menuconfig > Component Config > Log output > Default log verbosity 设置到 Debug

    • 使能 Wi-Fi debug: ./build.py menuconfig > Component config > Wi-Fi > Wi-Fi debug log level 设置到 Debug

    • 使能 TCP/IP debug: ./build.py menuconfig > Component config > LWIP > Enable LWIP Debug > 将具体想要调试的部分 log 等级设置到 Debug

    • 使能 BLE debug: ./build.py menuconfig > Component config > Bluetooth > Bluedroid Options > Disable BT debug logs > BT DEBUG LOG LEVEL > 将具体想要调试的部分 log 等级设置到 Debug

AT 指令如何实现 HTTP 断点续传功能?

  • 目前 AT 指令提供两种方法:

    • 通过 HTTP 的 Range 字段指定读取的数据范围,具体详情请参考 AT+HTTPCHEAD 示例

    • 可以使用 AT TCP 系列指令自行构造 HTTP GET 请求。在 ESP32-S2 设备获取被动接收模式下的套接字数据示例 的第 6 步和第 7 步之间,添加一步:设备使用 AT+CIPSEND 命令发送您自行构造的 HTTP GET 请求包给服务端即可。在被动接收模式下,对于从服务端获取的 HTTP GET 请求数据,MCU 需要通过主动下发 AT+CIPRECVDATA 命令来读取这些数据,以避免因服务端传输大量数据而导致 MCU 端无法及时处理的情况。