嵌入式上位机开发入门(二十三):MQTT 协议初体验
本文介绍了MQTT协议的基本概念和应用场景,详细讲解了如何在PC端搭建MQTT环境。主要内容包括:MQTT协议的发布/订阅模型、三种角色(发布者、代理、订阅者)的关系;使用emqx作为MQTT Broker服务器和MQTTX客户端的安装配置步骤;通过实际演示展示了主题订阅、消息发布和转发的过程。文章特别强调了Broker的核心转发功能以及客户端断线重连的重要性,为后续将MQTT移植到嵌入式系统Fr
目录
一、前言
大家好,这里是 Hello_Embed。上篇完成了 RTU/TCP 双协议并行的核心设计,通信层已经全部打通。
本篇开始进入新阶段——MQTT 协议。各类工业网关产品都支持 MQTT:
- 方向 ①:设备将采集到的传感器数据通过 MQTT 协议发给服务器,服务器再转发给其他客户端;
- 方向 ②:其他客户端将控制命令通过 MQTT 服务器转发到设备,进而控制设备。
本篇先做"体验"——在 PC 上搭起 MQTT 环境,跑通发布/订阅流程,为后续移植到 FreeRTOS 打好基础。
二、MQTT 是什么
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议)是物联网最常用的应用层协议,运行在 TCP/IP 的应用层,底层依赖 TCP,因此具有很高的可靠性。
| 特性 | 说明 |
|---|---|
| 协议层级 | 应用层,基于 TCP |
| 通信模型 | 发布 / 订阅(Pub/Sub) |
| 消息分发 | 一对多,服务器转发给所有订阅者 |
| 耦合度 | 低——发布者和订阅者彼此不感知 |
| 典型应用 | 物联网平台(阿里云、腾讯云、华为云等均支持) |
解析:MQTT 的核心优势在于"解耦"——设备只管发布消息,不需要知道谁在接收;客户端只管订阅主题,不需要知道消息从哪里来。这种模型非常适合设备数量多、拓扑动态变化的物联网场景。
三、三种角色:发布者、代理、订阅者
MQTT 协议中有三种身份:
[发布者 Publisher] [订阅者 Subscriber]
│ 发布消息 ↑ 接收消息
▼ │
┌─────────────────────────────────────┐
│ Broker(消息代理服务器) │
│ ① 接受客户端连接 │
│ ② 接收发布者的消息 │
│ ③ 处理订阅 / 取消订阅请求 │
│ ④ 将消息转发给匹配的订阅者 │
└─────────────────────────────────────┘
用"电视台"来类比:
| 角色 | 电视台类比 | MQTT 术语 |
|---|---|---|
| 消息代理 Broker | 电视台 | 服务器,负责转发 |
| 发布者 Publisher | 记者 | 客户端,推送数据 |
| 订阅者 Subscriber | 观众 | 客户端,接收数据 |
解析:发布者和订阅者都是"客户端",可以同时兼任两种角色。Broker 只负责转发,不存储业务逻辑,因此可以作为独立的云服务运行。
四、软件安装:emqx + MQTTX
在 PC 上体验 MQTT,需要两款软件:
| 软件 | 作用 | 安装方式 |
|---|---|---|
| emqx | MQTT Broker(服务器) | 解压 zip 到无中文路径目录即可 |
| MQTTX | MQTT 客户端(图形界面) | 双击安装 exe |
emqx 安装步骤:
将 emqx-5.3.0-windows-amd64.zip 解压到无中文路径的目录,例如:
D:\abc\emqx-5.3.0-windows-amd64\
MQTTX 安装步骤:
双击运行 MQTTX-Setup-1.7.2-x64.exe,按提示完成安装即可。
解析:emqx 是目前最流行的开源 MQTT Broker 之一,支持百万级并发连接,企业版还支持规则引擎和数据持久化。本地体验用社区版即可。
五、启动与访问 MQTT 服务
5.1 启动服务
在命令行执行(将路径替换为实际安装目录):
D:\abc\emqx-5.3.0-windows-amd64\bin\emqx start
5.2 访问管理控制台
服务启动后,打开浏览器访问:
http://localhost:18083
默认登录凭据:
| 字段 | 值 |
|---|---|
| 用户名 | admin |
| 密码 | public |
登录后可查看客户端连接数、消息吞吐量等监控指标:

5.3 停止服务
D:\abc\emqx-5.3.0-windows-amd64\bin\emqx stop
解析:EMQX Dashboard 是 Broker 的管理后台,可以实时查看哪些客户端在线、订阅了哪些主题、消息收发速率等。在调试阶段非常有用,可以快速确认设备是否连上了服务器。
六、MQTTX 客户端体验
6.1 建立连接
启动 MQTTX,点击"新建连接",填入以下参数后点击连接:
- Host:
localhost(或127.0.0.1) - Port:
1883(MQTT 默认端口) - Client ID:随意填写

6.2 订阅主题
连接成功后,点击"添加订阅",输入主题名,例如:
/topic/humiture

6.3 发布消息(自测)
在消息输入框填写内容,选择同一个主题 /topic/humiture,点击发送:

由于客户端同时订阅了该主题,发送后会立刻在订阅栏看到自己发的消息——这就验证了 Broker 的转发逻辑。
6.4 验证断开行为
执行 emqx stop 停止服务后,MQTTX 会显示连接断开,无法继续收发消息。这说明 MQTT 客户端必须依赖 Broker,Broker 不可用时通信即中断。
解析:这个现象在实际项目中很重要——嵌入式设备需要实现断线重连逻辑(与 Broker 断开后自动重试),否则网络波动时设备就会"失联"。后续移植 Paho MQTT 时会专门处理这一点。
七、总结
| 知识点 | 要点 |
|---|---|
| MQTT 定位 | 应用层协议,基于 TCP,轻量级 Pub/Sub |
| 三种角色 | Publisher / Broker / Subscriber |
| Broker 软件 | emqx,本地端口 1883,Dashboard 端口 18083 |
| 客户端软件 | MQTTX,图形化界面,适合调试 |
| 核心体验 | 自发自收,验证 Broker 转发逻辑 |
| 注意事项 | 客户端必须实现断线重连,否则 Broker 故障时设备失联 |
八、结尾
本篇完成了 MQTT 协议的本地体验:搭起了 emqx Broker,用 MQTTX 跑通了发布/订阅流程,验证了 Broker 转发和断开行为。
下一篇将分析 Paho MQTT 源码,为后续将其移植到 FreeRTOS 做准备,敬请期待~
Hello_Embed 继续带你从原理到实践,掌握嵌入式上位机开发的核心技能,敬请关注~
更多推荐



所有评论(0)