找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2|回复: 0
打印 上一主题 下一主题
收起左侧

ESP32 MQTT 入门教程

[复制链接]
跳转到指定楼层
楼主
ID:81365 发表于 2026-7-26 07:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
《启蒙之路》ESP32 入门教程 —ESP32 连接 MQTT Broke
今天这份教程主要讲怎么让 ESP32 单片机连上 MQTT 服务器,实现物联网数据收发。整个实验分成电脑端调试准备、ESP32 代码开发、联合测试三大部分。

第一部分:准备公共 MQTT 服务器与电脑调试工具
想要调试 MQTT 通信,我们需要一台 MQTT 代理服务器 Broker。自己搭建服务器比较麻烦,所以直接选用国内可用的公共免费服务器 broker-cn.emqx.io,不用安装部署,拿来直接测试。

同时电脑上安装 MQTTX 客户端软件,作用相当于调试助手。我们在 MQTTX 里新建连接,填写服务器地址、端口 1883,名称、客户端 ID、账号密码可以随便自定义。连接成功之后,订阅主题/test/topic1,QoS 等级选择 1。
后面 ESP32 和电脑之间所有收发的数据,都能在 MQTTX 上直观看到,方便排查通信故障。

第二部分:ESP32 程序设计思路
ESP32 想要连接 MQTT 有一个前提:必须先连上 WiFi。所以程序第一步先完成 WiFi STA 模式联网。
我在 WiFi 驱动里写了事件回调函数,用来捕捉 WiFi 启动、成功连上路由器、意外断开等状态。一旦 WiFi 掉线,程序会自动发起重连,保证网络稳定性。

这里用到 FreeRTOS 事件组做任务同步。主函数上电之后,先初始化 NVS 存储,再启动 WiFi。主线程会持续等待,直到 WiFi 成功拿到 IP 地址,才允许启动 MQTT 客户端,避免网络没就绪就发起 MQTT 连接导致报错。

WiFi 联网成功后,调用mqtt_start()初始化 MQTT 客户端。代码里配置好服务器地址、端口、客户端 ID、账号密码,并且注册 MQTT 事件回调函数。

MQTT 回调函数负责处理各类事件:
  • MQTT 成功连上服务器:立刻订阅主题 /test/topic1;
  • MQTT 断开连接:更新连接状态标志;
  • 收到订阅应答、发布应答:打印日志,方便观察流程;
  • 收到主题消息:直接把主题字符串和消息内容从串口打印输出;
  • 发生通信错误:打印错误提示。

主循环里面每隔 2 秒自动向/test/topic1发送一条心跳消息,携带设备运行时间戳,模拟设备周期性上传传感器数据。

第三部分:整体运行效果
程序烧录进 ESP32 开发板之后:

  • 开发板自动连接 WiFi;
  • 网络就绪后连接 emqx 公共 MQTT 服务器;
  • 电脑 MQTTX 可以持续收到 ESP32 定时发上来的心跳数据;
  • 同时我们在 MQTTX 手动向同一个主题发送消息,ESP32 串口能打印收到的内容。

这样就实现了双向通信:ESP32 可以上传数据,电脑端也能下发指令控制设备。

学到的核心要点
  • MQTT 基于 TCP,ESP32 必须保证 WiFi 网络正常,才能建立连接;
  • ESP-IDF 的 MQTT 采用事件回调方式处理所有通信事件;
  • 发布者、订阅者必须使用完全一致的 Topic 主题名称,才能收到消息;
  • 使用公共 MQTT Broker 适合前期学习调试,不用本地搭建服务器;
  • 通过事件组同步任务顺序,保证 “先联网、再连 MQTT”,规避时序 bug

123.docx

26.03 KB, 下载次数: 0, 下载积分: 黑币 -5

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表