目录
【烧录固件时硬件接线】
【烧录固件】
【AT指令WiFi部分】
设置 Wi-Fi 模式 (Station/SoftAP/Station+SoftAP)
查询 Wi-Fi 状态和 Wi-Fi 信息
【AT指令MQTT部分】
Demo:已验证的Wi-Fi连接+MQTT连接、发布与订阅
设置MQTT用户属性
设置MQTT连接属性(测试失败)
连接MQTT Broker
发布MQTT 消息(字符串)
发布长MQTT 消息
订阅 MQTT Topic
取消订阅MQTT Topic
断开MQTT 连接
MQTT AT说明
MQTTS相关资料位置
【注意事项】
【AT指令用户指南官方网页版】
在一些物联网项目中,仅需使用ESP32系列芯片(包括但不限于ESP32-C3/C5/C6等)实现Wi-Fi连接和MQTT通信时,一般采用官方提供的AT固件方案,该方案通过主控MCU下发AT指令控制ESP32。官方的AT指令资料很详细,本文将带您快速掌握ESP32在Wi-Fi和MQTT通信中的核心AT指令使用。
【烧录固件时硬件接线】
补充说明:在该ESP32-C6开发板上,使用Type-C把设备连接到PC上时,会看到有2个COM口,其中一个用于LOG调试串口,另一个直连设备内部USB,如何区分哪个COM口用于串口调试?打开设备管理器看CH343对应的COM口即为用于串口调试的COM口
该开发板详细资料:ESP32-C6-DEV-KIT-N8 - Waveshare Wiki
【烧录固件】
打开flash_download_tool目录下的flash_download_tool_3.9.8_w1.exe
【检查AT固件是否烧录成功】
补充说明:
1.烧录固件后须按下RST复位
2.ESP32 AT指令以换行符结束,其中换行符为CR LF,而SecureCRT默认的换行符是Linux所使用的LF(Line Feed),因此需要设置SecureCRT换行符,否则无法成功响应AT指令。
在Options—Session Option—Terminal—Emulation—Modes下勾选下图的New line mode
【AT指令WiFi部分】
设置 Wi-Fi 模式 (Station/SoftAP/Station+SoftAP)
命令 AT+CWMODE=<mode>[,<auto_connect>]
响应 OK
参数
说明:在命令中,使用多个等级的括号来隔离多个参数,在实际使用中无需加任何括号,如AT+CWMODE=<mode>[,<auto_connect>]的一个示例:AT+CWMODE=1,1
补充:ESP32具有NVS掉电存储功能,当若 AT+SYSSTORE=1,本设置将保存在 NVS 分区,但是如果把掉电存储放在主控上实现,则该从机无需关心该功能。(可用AT+SYSSTORE?查询参数存储模式,0表示不存入flash,1表示存入flash,默认为1存入,若不使用建议在AT命令前使用AT+SYSSTORE=0关闭掉电存储)
注意:后续诸多AT命令的前提都是已设置ESP32为Station模式
查询 Wi-Fi 状态和 Wi-Fi 信息
命令 AT+CWSTATE?
响应 +CWSTATE:<state>,<"ssid">
OK
参数
连接AP(Access Point)
命令
AT+CWJAP=[<"ssid">],[<"pwd">][,<"bssid">][,<pci_en>][,<reconn_interval>][,<listen_interval>][,<scan_mode>][,<jap_timeout>][,<pmf>]
响应 WIFI CONNECTED
WIFI GOT IP
OK
[WIFI GOT IPv6 LL]
[WIFI GOT IPv6 GL]
或者
+CWJAP:<error code>
ERROR
参数
示例:AT+CWJAP="Lansitec-2.4G","lansi@126#163"
说明:即使此前已连接Wi-Fi,仍可以使用该命令并不会产生冲突,因为底层程序在连接前会自动先断开此前的Wi-Fi
ESP-AT固件还支持扫描附近可用的AP、设置断网重连间隔、设置上电是否自动连接AP、开启SmartConfig智能配网(使用乐鑫官方APP配网)等,详见下面链接:
Wi-Fi AT 命令集 - ESP32-C6 - — ESP-AT 用户指南 latest 文档
【AT指令MQTT部分】
Demo:已验证的Wi-Fi连接+MQTT连接、发布与订阅
AT+CWMODE=1 // 设置为Station模式
AT+CWJAP="Lansitec-2.4G","lansi@126#163" // 设置Wi-Fi的用户名和密码AT+MQTTUSERCFG=0,1,"ESP32-C6","espressif","1234567890",0,0,"" // 设置MQTT用户属性
// 参数:LinkID=0,TCP,"client_id","username","password",cert_key_ID,CA_ID,"path"
AT+MQTTCONN=0,"asset.lansitec.com",1883,1 // 连接MQTT Broker,LinkID=0,"服务器地址",端口,断连后自动重连
AT+MQTTPUB=0,"ZZQ/beacon","\"{\"timestamp\":\"2025\"}\"",1,0
AT+MQTTPUB=0,"ZZQ/beacon","1001",1,0 // 发布MQTT消息,参数:LinkID=0,"topic","data",qos,retain,如有特殊字符需要转义
AT+MQTTPUBRAW=0,"ZZQ/beacon",3,1,0 // 发布长MQTT消息,参数:LinkID=0,"topic",length,qos,retain,如有特殊字符需要转义
123 //发送长度为3的数据
AT+MQTTSUB=0,"lansitec/sub/404CCA55835C",1// 订阅MQTT Topic,参数:LinkID=0,"topic",qos
设置MQTT用户属性
命令
AT+MQTTUSERCFG=<LinkID>,<scheme>,<"client_id">,<"username">,<"password">,<cert_key_ID>,<CA_ID>,<"path">
响应 OK
参数
设置MQTT连接属性(测试失败)
命令
AT+MQTTCONNCFG=<LinkID>,<keepalive>,<disable_clean_session>,<"lwt_topic">,<"lwt_msg">,<lwt_qos>,<lwt_retain>
响应 OK
参数
说明:该命令实测失败,但不影响MQTT连接,可能是依赖关系、参数设置方面有问题
连接MQTT Broker
查询已连接的MQTT Broker
命令 AT+MQTTCONN?
响应 +MQTTCONN:<LinkID>,<state>,<scheme>,<"host">,<port>,<"path">,<reconnect>
OK
设置连接MQTT Broker
命令 AT+MQTTCONN=<LinkID>,<"host">,<port>,<reconnect>
响应 OK
参数
发布MQTT 消息(字符串)
命令 AT+MQTTPUB=<LinkID>,<"topic">,<"data">,<qos>,<retain>
响应 OK
参数
说明 每条 AT 命令的总长度不能超过 256 字节,否则使用AT+MQTTPUBRAW命令
本命令不能发送数据 \0,若需要发送该数据,请使用AT+MQTTPUBRAW 命令
补充:最后一个参数为retain,设置为1则发送的消息为保留消息,订阅该主题的设备上线后会收到这一条,如下图:
若想取消该保留消息,取消方法为:发送一条空保留消息
发布长MQTT 消息
命令 AT+MQTTPUBRAW=<LinkID>,<"topic">,<length>,<qos>,<retain>
响应 OK
>
符号 > 表示 AT 准备好接收串口数据,此时您可以输入数据,当数据长度达到参数 <length> 的值时,数据传输开始。
若传输成功,则 AT 返回:+MQTTPUB:OK
若传输失败,则 AT 返回:+MQTTPUB:FAIL
参数
订阅 MQTT Topic
查询已订阅的MQTT Topic
命令 AT+MQTTSUB?
响应 +MQTTSUB:<LinkID>,<state>,<"topic1">,<qos>
+MQTTSUB:<LinkID>,<state>,<"topic2">,<qos>
+MQTTSUB:<LinkID>,<state>,<"topic3">,<qos>
...
OK
设置订阅MQTT Topic(最多订阅10个topic)
命令 AT+MQTTSUB=<LinkID>,<"topic">,<qos>
当 AT 接收到已订阅的 topic 的 MQTT 消息时,返回:
+MQTTSUBRECV:<LinkID>,<"topic">,<data_length>,data
若已订阅过该 topic,则返回:ALREADY SUBSCRIBE
参数
取消订阅MQTT Topic
命令 AT+MQTTUNSUB=<LinkID>,<"topic">
响应 OK
若未订阅过该 topic,则返回 NO UNSUBSCRIBE
OK
参数
断开MQTT 连接
命令 AT+MQTTCLEAN=<LinkID>
响应 OK
参数 <LinkID>:当前仅支持 link ID 0。
MQTT AT说明
- 一般来说,AT MQTT 命令都会在 10 秒内响应,但 AT+MQTTCONN 命令除外。例如,如果路由器不能上网,命令 AT+MQTTPUB 会在 10 秒内响应,但 AT+MQTTCONN 命令在网络环境不好的情况下,可能需要更多的时间用来重传数据包。
- 如果 AT+MQTTCONN 是基于 TLS 连接,每个数据包的超时时间为 10 秒,则总超时时间会根据握手数据包的数量而变得更长。
- 当 MQTT 连接断开时,会提示+MQTTDISCONNECTED:<LinkID>消息。
- 当 MQTT 连接建立时,会提示
+MQTTCONNECTED:<LinkID>,<scheme>,<"host">,port,<"path">,<reconnect>消息。
MQTTS相关资料位置
MQTT AT 连接云示例 - ESP32-C6 - — ESP-AT 用户指南 latest 文档
如何更新 PKI 配置 - ESP32-C6 - — ESP-AT 用户指南 latest 文档
【注意事项】
ESP32 AT指令以“AT”开始,以换行符结束,其中换行符为CR LF
每条命令都会返回 OK 或 ERROR 的响应,应等待上一条命令执行完毕后,再发送下一条命令。如果上一条命令未执行完毕,又发送了新的命令,则会返回 busy p... 提示
【AT指令用户指南官方网页版】
入门指南 - ESP32-C6 - — ESP-AT 用户指南 latest 文档
场景问题汇总:AT FAQ - ESP32-C6 - — ESP-AT 用户指南 latest 文档