本帖最后由 Tronlong创龙 于 2023-6-14 11:23 编辑
前 言本案例适用开发环境: Windows开发环境:Windows 7 64bit、Windows 10 64bit Linux开发环境:Ubuntu 18.04.4 64bit 拟机:VMware15.1.0 U-Boot:U-Boot-2020.04 Kernel:Linux-5.4.70 Linux SDK:5.4.70_2.3.0 本文主要介绍NXP i.MX 6ULL处理器基于MQTT通信协议的开发案例,主要包括mqtt_client案例和mqtt_sinewave_pub案例,位于产品资料“4-软件资料\Demo\mqtt-demos\”目录下。
该案例中采用的NXPi.MX 6ULL工业评估板为Tronlong创龙科技TLIMX6U-EVM,它是一款基于NXP i.MX 6ULL的ARM Cortex-A7高性能低功耗处理器设计的评估板,由核心板和评估底板组成。核心板经过专业的PCB Layout和高低温测试验证,稳定可靠,可满足各种工业应用环境。评估板接口资源丰富,引出双路网口、双路RS485、双路CAN、三路USB、多路DI/DO、LCD等接口,板载WIFI、Bluetooth模块,支持LoRa、NB-IoT、Zigbee、4G模块,可选配外壳直接应用于工业现场,方便用户快速进行产品方案评估与技术预研。 正面外观图:
表 1 案例目录 | 说明 | mqtt_client | bin | 可执行程序 | libmosquitto | libmosquitto压缩包 | src | 程序源码 | mqtt_sinewave_pub | bin | 可执行程序 | libmosquitto | libmosquitto压缩包 | src | 程序源码 | tools | 前端Web |
1 MQTT通信协议简介1.1 概述MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(Publish/Subscribe)模式的“轻量级”通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。MQTT最大优点在于,可以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。 MQTT是轻量、简单、开放和易于实现的,同时作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。
图 1
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
2 mqtt_client案例
2.1 案例说明案例功能:使用libmosquitto(MQTT version 3.1.1 client library)的API与MQTT代理服务器通信。基于MQTT通信协议,实现发布和订阅消息功能。 程序流程图如下图所示。
图 3
2.2 案例测试本案例使用公网MQTT HiveMQ服务器与上位机Ubuntu Mosquitto工具通信。请通过网线将评估板网口ETH1 RMII和上位机连接至公网,确保可正常访问互联网。 下表提供了可用的在线公共MQTT服务器,可根据需要自行切换。
服务器名称 | Broker地址 | TCP端口 | WebSocket | HiveMQ | broker.hivemq.com | 1883 | 8000 | Mosquitto | test.mosquitto.org | 1883 | 80 | Eclipse | mqtt.eclipseprojects.io | 1883 | 80/443 | EMQ X(国内) | broker-cn.emqx.io | 1883 | 8083/8084 |
评估板启动,将案例bin目录下mqtt_client可执行文件拷贝至评估板文件系统的任意目录下,执行如下命令查看程序参数说明。 Target# ./mqtt_client --help
图 4
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主题,可自定义命名。
图 5
在评估板文件系统执行如下命令发布消息至MQTT服务器。 Target# ./mqtt_client -h broker.hivemq.com -p 1883 -M publish -t test/data -m 'www.tronlong.com'
图 6 评估板发布
消息发布成功后,上位机将从MQTT服务器接收到对应的消息。
图 7 上位机订阅
2.2.2 评估板订阅/上位机发布在评估板文件系统执行如下命令订阅MQTT主题。 Target# ./mqtt_client -h broker.hivemq.com -p 1883 -M subscribe -t test/data
图 8
在上位机执行如下命令发布消息至MQTT服务器。 Host# mosquitto_pub -h broker.hivemq.com -p 1883 -t test/data -m www.tronlong.com
图 9 上位机发布
消息发布成功后,评估板将从MQTT服务器接收到对应消息。
图 10 评估板订阅
2.3 案例编译将案例src文件夹、libmosquitto文件夹下的libmosquitto.tar.gz压缩包拷贝至Ubuntu工作目录下。执行如下命令,将libmosquitto.tar.gz压缩包解压至与src文件夹同一目录下。 Host# tar -zxf libmosquitto.tar.gz -C .
图 11
执行如下命令,进入src目录使能Linux SDK环境变量并编译。编译完成后,将在当前目录下生成可执行文件。 Host# cd src/ Host# source /home/tronlong/SDK/environment-setup-cortexa7t2hf-neon-poky-linux-gnueabi Host# make
图 12
2.4 关键代码(1) 创建Mosquitto实例。
图 13
(2) 设置回调函数。
图 14
(3) 连接MQTT服务器。
图 15
(4) 发布消息。
图 16
(5) 订阅主题。
图 17
3 mqtt_sinewave_pub案例
3.1 案例说明案例功能:使用libmosquitto(MQTT version 3.1.1 client library)的API与MQTT代理服务器通信。评估板生成正弦波数据,每秒发送512个采样点的数据至MQTT服务器;上位机通过Web页面从MQTT服务器接收到数据后,将会绘制波形。 程序流程图如下图所示。
图 18
3.2 案例测试本案例使用公网MQTT HiveMQ服务器与上位机Ubuntu Web程序通信。请通过网线将评估板网口ETH1 RMII和上位机连接至公网,确保可正常访问互联网。 评估板启动,将案例bin目录下mqtt_sinewave_pub可执行文件拷贝至评估板文件系统的任意目录下,执行如下命令查看程序参数说明。 Target# ./mqtt_sinewave_pub --help
图 19
执行如下命令运行程序,连接MQTT服务器,并发送正弦波数据至MQTT服务器。 Target# ./mqtt_sinewave_pub -h broker.hivemq.com -p 1883
图 20
评估板程序运行后,将案例"tools\web_mqtt_sub\"目录下index.html文件,使用上位机浏览器打开。在弹出的Web页面(如下图),依次输入MQTT服务器:broker.hivemq.com,端口号:8000,最后点击连接,Web页面将会从MQTT服务器获取正弦波数据并进行波形绘制。 备注:ARM端MQTT通信协议基于TCP协议,Web端MQTT通信协议基于WebSocket协议,因此使用的端口号不同。
图 21
图 22
3.3 案例编译将案例src文件夹、libmosquitto文件夹下的libmosquitto.tar.gz压缩包拷贝至Ubuntu工作目录下。执行如下命令,将libmosquitto.tar.gz压缩包解压至与src文件夹同一目录下。 Host# tar -zxf libmosquitto.tar.gz -C .
图 23
执行如下命令,进入src目录使能Linux SDK环境变量并编译。编译完成后,将在当前目录下生成可执行文件。 Host# cd src/ Host# source /home/tronlong/SDK/environment-setup-cortexa7t2hf-neon-poky-linux-gnueabi Host# make
图 24
3.4 关键代码(1) 创建Mosquitto实例。
图 25
(2) 设置回调函数。
图 26
(3) 连接MQTT服务器。
图 27
(4) 发送数据。
图 28 如果你还想了解更多嵌入式应用的相关知识,欢迎关注Tronlong创龙科技~
|