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

article/2025/7/3 23:35:24

目录

【烧录固件时硬件接线】

【烧录固件】

【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.hkcw.cn/article/meNgLNycZe.shtml

相关文章

重温经典算法——并归排序

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 基本原理 归并排序基于分治思想&#xff0c;递归地将数组拆分为两个子数组&#xff0c;分别排序后合并。时间复杂度为 O(n log n)&#xff0c;空间复杂度 O(n)&#xff08;…

05-power BI高级筛选器filter与Values人工造表

返回一个表&#xff0c;用于表示另一个表或表达的子集&#xff0c;不能够单独使用&#xff0c; fileter函数对筛选的表进行横向的逐行扫描&#xff0c;这样的函数也叫迭代函数 例&#xff1a;countrows(fileter(表筛选条件))filter的第一参数必须是唯一值得表&#xff0c; 如果…

贪心算法应用:欧拉路径(Fleury算法)详解

Java中的贪心算法应用&#xff1a;欧拉路径&#xff08;Fleury算法&#xff09;详解 一、欧拉路径与欧拉回路基础 1.1 基本概念 欧拉路径&#xff08;Eulerian Path&#xff09;是指在一个图中&#xff0c;经过图中每一条边且每一条边只经过一次的路径。如果这条路径的起点和…

【CF】Day73——Codeforces Round 887 (Div. 2) B (思维 + 模拟)

B. Fibonaccharsis 题目&#xff1a; 思路&#xff1a; 比C题有意思&#xff0c;但也么意思 对于这一题我们可以考虑最小的情况&#xff0c;即 f0 0&#xff0c;f1 1 时&#xff0c;然后看看什么时候会超过 n 的最大值&#xff0c;我们可以发现 k > 30 时就炸了&#xff…

工作流引擎-16-开源审批流项目之 整合Flowable官方的Rest包

工作流引擎系列 工作流引擎-00-流程引擎概览 工作流引擎-01-Activiti 是领先的轻量级、以 Java 为中心的开源 BPMN 引擎&#xff0c;支持现实世界的流程自动化需求 工作流引擎-02-BPM OA ERP 区别和联系 工作流引擎-03-聊一聊流程引擎 工作流引擎-04-流程引擎 activiti 优…

Windows+VSCode搭建小智(xiaozhi)开发环境

作为一名DIY达人&#xff0c;肯定不会错过最近很火的“小智AI聊天机器人”&#xff0c;网上教程非常丰富&#xff0c;初级玩家可以直接在乐鑫官方下载ESP-IDF安装包并经过简单的菜单式配置后&#xff0c;即可进行代码编译和烧录&#xff08;详见&#xff1a;Docs&#xff09;。…

《仿盒马》app开发技术分享-- 购物车业务逻辑完善(端云一体)

开发准备 之前我们已经实现了购物车相关的内容&#xff0c;实现了购物车数据列表的展示&#xff0c;但是我们结算订单之后我们的购物车列表并没有刷新&#xff0c;而且底部的状态栏并没有明显的数据展示来提醒用户&#xff0c;而且当我们在商品详情页添加新商品&#xff0c;底…

谷歌CEO皮查伊眼中的“下一代平台“与未来图景

目录 前言 一、从"能力秀"到"平台重构"&#xff1a;AI的"第二乐章" 二、"万物皆可创"&#xff1a;AI如何引爆每个人的创造力&#xff1f; 三、AI走出屏幕&#xff1a;XR眼镜与机器人的未来交响曲 四、Web不死&#xff0c;只是换了…

DDC Learning Record(2)

这些是 “UV 生成策略”&#xff0c;决定了 Houdini 如何分析模型空间&#xff0c;并分配 UV 坐标。它们只影响 UV 坐标的生成方式&#xff0c;不影响后续贴图的读取行为。 face得到的结果是&#xff1a; 每个面都被映射到了整张贴图&#xff08;[0,1]&#xff09;&#xff0c;…

MySQL数据库从0到1

目录 数据库概述 基本命令 查询命令 函数 表的操作 增删改数据和表结构 约束 事务 索引 视图 触发器 存储过程和函数 三范式 数据库概述 SQL语句的分类&#xff1a; DQL&#xff1a;查询语句&#xff0c;凡是select语句都是DQL。 DML&#xff1a;insert,delete,up…

STM32CubeDAC及DMA配置

STM32CubeDAC及DMA配置 一&#xff0c;问题1二&#xff0c;解决11&#xff0c;宏观思路CubeMX配置2&#xff0c;HAL_TIM_Base_Start(&htim6) 的作用1&#xff0c;作用1&#xff1a;使能TIM6的时钟并让它开始计数2&#xff0c;作用2&#xff1a;当 TIM6 溢出时&#xff0c;会…

c++ 赋值函数和拷贝构造函数的调用时机

测试代码&#xff1a; void testcopyAndFuzhi() {class Dog {private:string name;public:Dog(string myname) : name(myname) {}Dog(Dog& otherDog) {std::cout << "调用拷贝构造函数." << endl;this->name otherDog.name;}Dog& operator …

Python列表、字典、元组、集合

列表 list 基本格式&#xff1a;列表名 [元素1,元素2,元素3] 所有元素放在[ ]之中&#xff0c;元素之间用逗号","隔开&#xff0c;元素可以是不同的类型 列表的类型也是列表 li [1,"hello",2] print(type(li)) 列表是可迭代对象&#xff0c;可以用fo…

sctpscan:用于发现 SCTP 网络扫描器!全参数详细教程!Kali Linux教程!

简介 用于发现和安全的 SCTP 网络扫描器 sctpscan 是一款 SCTP 协议端口扫描工具&#xff0c;主要用于识别目标主机上开放的 SCTP&#xff08;Stream Control Transmission Protocol&#xff09;服务端口。 sctpscan 的主要功能是&#xff1a; 探测目标主机 SCTP 协议是否开…

力扣题解654:最大二叉树

一、题目内容 题目要求根据一个不重复的整数数组 nums 构建最大二叉树。最大二叉树的构建规则如下&#xff1a; 创建一个根节点&#xff0c;其值为 nums 中的最大值。递归地在最大值左边的子数组前缀上构建左子树。递归地在最大值右边的子数组后缀上构建右子树。返回由 nums 构…

车载诊断架构 --- DTC消抖参数(Trip Counter DTCConfirmLimit )

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…

75.解决当编辑完用户消息,确认重新生成AI回答时,已有的AI回答还是存在,并且新生成的回答并没有显示到气泡里bug

在上一个bug解决完后&#xff0c;又出来一个bug&#xff0c;我真是服了哈哈哈 新的bug是&#xff1a; 当编辑完用户消息&#xff0c;确认重新生成AI回答时&#xff0c;已有的AI回答还是存在&#xff0c;并且新生成的回答并没有显示到气泡里 出现这个bug的原因还是出现在rege…

C# 用户控件(User Control)详解:创建、使用与最佳实践

在C#应用程序开发中&#xff0c;用户控件&#xff08;User Control&#xff09;是一种强大的工具&#xff0c;它允许开发者将多个标准控件组合成一个可复用的自定义组件。无论是Windows Forms还是WPF&#xff0c;用户控件都能显著提高UI开发的效率&#xff0c;减少重复代码&…

SpringBoot-配置Spring MVC

一、Spring MVC回顾 Spring MVC是一种常用的Java Web框架&#xff0c;它提供了一种基于MVC模式的开发方式&#xff0c;可以方便地实现Web应用程序。在Spring MVC中&#xff0c;WebMvcConfigurer是一种常用的配置方式&#xff0c;可以允许我们自定义Spring MVC的行为&#xff0c…

Python训练营打卡 Day26

知识点回顾&#xff1a; 函数的定义变量作用域&#xff1a;局部变量和全局变量函数的参数类型&#xff1a;位置参数、默认参数、不定参数传递参数的手段&#xff1a;关键词参数传递参数的顺序&#xff1a;同时出现三种参数类型时 ——————————————————————…