电子说
1 MQTT 通信协议简介
1.1 概述
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基
于发布/订阅(Publish/Subscribe)模式的“轻量级”通讯协议,该协议构建于 TCP/IP 协议上,
由 IBM 在 1999 年发布。MQTT 最大优点在于,可以极少的代码和有限的带宽,为连接远
程设备提供实时可靠的消息服务。
MQTT 是轻量、简单、开放和易于实现的,同时作为一种低开销、低带宽占用的即时
通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。
MQTT 具有如下特点:
(1) 轻量可靠:MQTT 的报文格式精简、紧凑,可在严重受限的硬件设备和低带宽、
高延迟的网络上实现稳定传输。
(2) 发布/订阅模式(Publish/Subscribe):发布/订阅模式的优点在于发布者与订阅者的
解耦,实现异步协议。即订阅者与发布者无需建立直接连接,亦无需同时在线。
(3) 为物联网而生:提供心跳机制、遗嘱消息、QoS 质量等级 + 离线消息、主题和
安全管理等全面的物联网应用特性。
(4) 生态更完善:覆盖范围广,已成为众多云厂商物联网平台的标准通信协议
1.2 应用场景
MQTT 作为一种低开销,低带宽占用的即时通讯协议,可以极少的代码和带宽为联网
设备提供实时可靠的消息服务,适用于硬件资源有限的设备及带宽有限的网络环境。常
见的应用场景如下:
(1) 物联网 M2M 通信,物联网大数据采集。
(2) 移动即时消息及消息推送。
(3) 智能硬件、智能家居、智能电器。
(4) 车联网通信,电动车站桩采集。
(5) 智慧城市、远程医疗、远程教育。
(6) 电力能源、石油能源。
1.3 Mosquitto 工具安装
Mosquitto 是一款开源的 MQTT 消息代理(服务器)软件,提供轻量级的、支持可发
布/可订阅的的消息推送模式。我司提供的评估板文件系统已支持 Mosquitto 工具,本文
mqtt_client 案例采用 Mosquitto 工具演示 MQTT 通信协议的通信功能。由于上位机 Ubuntu
系统作为通信对象,因此需在 Ubuntu 终端执行如下命令安装 Mosquitto 工具。
Host# sudo apt-get install mosquitto-clients
2 mqtt_client 案例
2.1 案例说明
案例功能:使用 libmosquitto(MQTT version 3.1.1 client library)的 API 与 MQTT 代理服
务器通信。基于 MQTT 通信协议,实现发布和订阅消息功能。
程序流程图如下图所示。
2.2 案例测试
本案例使用公网 MQTT HiveMQ 服务器与上位机 Ubuntu Mosquitto 工具通信。请通过
网线将评估板千兆网口 ETH0 RGMII 和上位机连接至公网,确保可正常访问互联网。
下表提供了可用的在线公共 MQTT 服务器,可根据需要自行切换。
评估板启动,将案例 bin 目录下 mqtt_client 可执行文件拷贝至评估板文件系统的任意
目录下,执行如下命令查看程序参数说明。
Target#
./mqtt_client --help
2.2.1
评估板发布/上位机订阅
在上位机执行如下命令,使用 mosquitto_sub 工具订阅 MQTT 主题。
Host# mosquitto_sub -h broker.hivemq.com -p 1883 -t test/data
参数解析:
-h:指定 MQTT 服务器;
-p:指定 MQTT 服务器 TCP 端口;
-t:定义 MQTT 主题,可自定义命名。
=
在评估板文件系统执行如下命令发布消息至 MQTT 服务器。
Target#
./mqtt_client -h broker.hivemq.com -p 1883 -M publish -t test/data -m
'www.tronlong.com'
2.3 案例编译
将案例 src 文件夹拷贝至 Ubuntu 工作目录下,请先确保已参考 Linux 系统使用手册编
译过 LinuxSDK,构建 T507 处理器对应的 GCC 编译器。进入 src 目录执行如下命令,使用
LinuxSDK 开发包目录下的 GCC 编译器进行案例编译。编译完成后,将在当前目录下生成
可执行文件。
Host# CC=/home/tronlong/T507/LinuxSDK/out/t507/tlt507-evm/longan/buildroot/host/usr
/bin/aarch64-linux-gnu-gcc make
2.4 关键代码
(1) 创建 Mosquitto 实例。
(2) 设置回调函数。
(3) 连接 MQTT 服务器。
(4) 发布消息。
(5) 订阅主题
3 mqtt_sinewave_pub 案例
3.1 案例说明
案例功能:使用 libmosquitto(MQTT version 3.1.1 client library)的 API 与 MQTT 代理服
务器通信。评估板生成正弦波数据,每秒发送 512 个采样点的数据至 MQTT 服务器;上
位机通过 Web 页面从 MQTT 服务器接收到数据后,将会绘制波形。
程序流程图如下图所示。
3.2 案例测试
本案例使用公网 MQTT HiveMQ 服务器与上位机 Ubuntu Web 程序通信。请通过网线
将评估板千兆网口 ETH0 RGMII 和上位机连接至公网,确保可正常访问互联网。
评估板启动,将案例 bin 目录下 mqtt_sinewave_pub 可执行文件拷贝至评估板文件系
统的任意目录下,执行如下命令查看程序参数说明。
Target#
./mqtt_sinewave_pub --help
执行如下命令运行程序,连接 MQTT 服务器,并发送正弦波数据至 MQTT 服 务器。
Target#
./mqtt_sinewave_pub -h broker.hive
mq.com -p 1883
评估板程序运行后,将案例"toolsweb_mqtt_sub"目录下 index.html 文件,使用上位
机浏览器打开。在弹出的 Web 页面(如下图),依次输入 MQTT 服务器:broker.hivemq.com,
端口号:8000,最后点击连接,Web 页面将会从 MQTT 服务器获取正弦波数据并进行波
形绘制。
备注:ARM 端 MQTT 通信协议基于 TCP 协议,Web 端 MQTT 通信协议基于 WebSocket 协
议,因此使用的端口号不同。
3.3 案例编译
将案例 src 文件夹拷贝至 Ubuntu 工作目录下,请先确保已参考 Linux 系统使用手册编
译过 LinuxSDK,构建 T507 处理器对应的 GCC 编译器。进入 src 目录执行如下命令,使用
LinuxSDK 开发包目录下的 GCC 编译器进行案例编译。编译完成后,将在当前目录下生成
可执行文件。
Host# CC=/home/tronlong/T507/LinuxSDK/out/t507/tlt507-evm/longan/buildroot/host/usr
/bin/aarch64-linux-gnu-gcc make
3.4 关键代码
(1) 创建 Mosquitto 实例。
(2) 设置回调函数。
(3) 连接 MQTT 服务器。
(4) 发送数据。
审核编辑 黄宇
全部0条评论
快来发表一下你的评论吧 !