目录


一、前言

大家好,这里是 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,点击"新建连接",填入以下参数后点击连接:

  • Hostlocalhost(或 127.0.0.1
  • Port1883(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 继续带你从原理到实践,掌握嵌入式上位机开发的核心技能,敬请关注~

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐