当前位置: 首页 > ops >正文

ESP32系列AT固件快速开发——Wi-Fi MQTT

目录

【烧录固件时硬件接线】

【烧录固件】

【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所使用的LFLine 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命令的前提都是已设置ESP32Station模式

查询 Wi-Fi 状态和 Wi-Fi 信息

命令        AT+CWSTATE?

响应        +CWSTATE:<state>,<"ssid">
                OK

参数       

连接APAccess 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(最多订阅10topic

命令        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 文档

http://www.xdnf.cn/news/10543.html

相关文章:

  • 【笔记】Windows系统部署suna基于 MSYS2的Poetry 虚拟环境backedn后端包编译失败处理
  • 汽车安全体系:FuSa、SOTIF、Cybersecurity 从理论到实战
  • 绿盟 IPS 设备分析操作手册
  • Nuxt3部署
  • TS 星际通信指南:从 TCP 到 UDP 的宇宙漫游
  • (Python)列表的操作(增删改查、排序)
  • 2025年ESWA SCI1区TOP,改进成吉思汗鲨鱼算法MGKSO+肝癌疾病预测,深度解析+性能实测
  • 网络攻防技术四:网络侦察技术
  • 重温经典算法——快速排序
  • 探秘集成学习:从基础概念到实战应用
  • 微软PowerBI考试 PL-300学习指南
  • DeepSeek 赋能车路协同:智能交通的破局与重构
  • 模块二:C++核心能力进阶(5篇) 篇一:《STL源码剖析:vector扩容策略与迭代器失效》
  • 核心机制:滑动窗口
  • 相机--相机标定
  • 芝麻酱工作创新点分享1——SpringBoot下使用mongo+Redis做向量搜索
  • PyTorch——卷积操作(2)
  • [网页五子棋][匹配对战]落子实现思路、发送落子请求、处理落子响应
  • Python 在金融中的应用- Part 1
  • JSP、HTML和Tomcat
  • Linux运维笔记:服务器感染 netools 病毒案例
  • Windows+VSCode搭建小智(xiaozhi)开发环境
  • 通信革新与网络安全探索与创新:开启未来之门
  • ShenNiusModularity项目源码学习(33:ShenNius.Admin.Mvc项目分析-18)
  • 【看到哪里写到哪里】C的指针-3(函数指针)
  • P1115 最大子段和
  • 打卡第43天
  • 【Ragflow】24.Ragflow-plus开发日志:增加分词逻辑,修复关键词检索失效问题
  • 从 AMQP 到 RabbitMQ:核心组件设计与工作原理(一)
  • [Java恶补day13] 53. 最大子数组和