前  言

本指导文档适用开发环境:

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服务器,可根据需要自行切换。

表 2

服务器名称

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创龙科技~

基于NXP i.MX 6ULL——MQTT通信协议的开发案例的更多相关文章

  1. 基于面向对象js的弹窗的组件的开发案例

    var aInput = document.getElementsByTagName("input"); 2 aInput[0].onclick = function() { 3 ...

  2. 高性能嵌入式核心板新标杆!米尔推出基于NXP i.MX8M处理器的MYC-JX8MX核心板

    随着嵌入式及物联网技术的飞速发展,高性能计算的嵌入式板卡已经成为智能产品的基础硬件平台.为响应行业应用和满足客户需求,米尔电子推出基于NXP公司i.MX8M系列芯片的开发平台MYD-JX8MX系列开发 ...

  3. Cortext-A7_i.MX 6ULL——多模式DDR控制器(MMDC)

    1.概述 i.MX 6ULL系列芯片的MMDC是一个多模式DDR控制器,支持DDR3/DDR3Lx16和LPDDR2x16的存储类型,MMDC是可配置,高性能,优化的内存控制器. 注:DDR3/DDR ...

  4. 基于Netty的IdleStateHandler实现Mqtt心跳

    基于Netty的IdleStateHandler实现Mqtt心跳 IdleStateHandler解析 最近研究jetlinks编写的基于Netty的mqtt-client(https://githu ...

  5. 基于.net C# Socket WinForm MQTT 客户端开发

    1.什么是MQTT? MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的&quo ...

  6. MQTT是IBM开发的一个即时通讯协议,构建于TCP/IP协议上,是物联网IoT的订阅协议,借助消息推送功能,可以更好地实现远程控制

    最近一直做物联网方面的开发,以下内容关于使用MQTT过程中遇到问题的记录以及需要掌握的机制原理,主要讲解理论. 背景 MQTT是IBM开发的一个即时通讯协议.MQTT构建于TCP/IP协议上,面向M2 ...

  7. [入门级] 基于 visual studio 2010 mvc4 的图书管理系统开发初步 (二)

    [入门级] 基于 visual studio 2010 mvc4 的图书管理系统开发初步 (二) Date  周六 10 一月 2015 By 钟谢伟 Category website develop ...

  8. GPS部标平台的架构设计(三) 基于struts+spring+hibernate+ibatis+quartz+mina框架开发GPS平台

    注意,此版本是2014年研发的基于Spring2.5和Struts2的版本,此版本的源码仍然销售,但已不再提供源码升级的服务,因为目前我们开发的主流新版本是2015-2016年近一年推出的基于spri ...

  9. 【Hades】ades是一个开源库,基于JPA和Spring构建,通过减少开发工作量显著的改进了数据访问层的实现

    几乎每个应用系统都需要通过访问数据来完成工作.要想使用领域设计方法,你就需要为实体类定义和构建资源库来实现领域对象的持久化.目前开发人员经常使用JPA来实现持久化库.JPA让持久化变得非常容易,但是仍 ...

  10. HubbleDotNet 最新绿色版,服务端免安装,基于eaglet 最后V1.2.8.9版本开发,bug修正,支持一键生成同步表

    HubbleDotNet 是一个基于.net framework 的开源免费的全文搜索数据库组件.开源协议是 Apache 2.0.HubbleDotNet提供了基于SQL的全文检索接口,使用者只需会 ...

随机推荐

  1. USB3.0与Type-C接口的关系

    USB全称为Universal Serial Bus,翻译过来就是通用串行总线,是连接计算机与外部设备的一种串口总线标准.USB的发展经历了一下阶段: USB1.0:1.5Mbps(192KB/s)低 ...

  2. Wordpress小技巧(一)

    ​★★★ Wordpress发表Post文章时,页面会出现评论框,如何禁止出现评论框.步骤如下: 一.使用wordpress的后台功能关闭文章评论依次进入"后台"-"设置 ...

  3. Arrays类的常用方法

    Arrays类的常用方法 Array数组的工具类java.util.Arrays Arrays类中的方法都是static修饰的静态方法,在使用的时候可以直接使用类名进行调用,而不用使用对象来调用 Ar ...

  4. Oracle用户创建、赋权、查询及删除操作

    首发微信公众号:SQL数据库运维 原文链接:https://mp.weixin.qq.com/s?__biz=MzI1NTQyNzg3MQ==&mid=2247485212&idx=1 ...

  5. 80x86汇编—分支循环程序设计

    文章目录 查表法: 实现16进制数转ASCII码显示 计算AX的绝对值 判断有无实根 地址表形成多分支 从100,99,...,2,1倒序累加 输入一个字符,然后输出它的二进制数 大小写转换 大写转小 ...

  6. 【.NET项目分享】免费开源的静态博客生成工具EasyBlog,5分钟拥有自己的博客

    EasyBlog 说明 本博客系统通过构建工具生成纯静态的博客网站,借助GitHub Pages,你可以在5分钟内免费拥有个人博客. 它具有以下特点 生成纯静态网站,访问速度极快 使用markdown ...

  7. 通过 Wireshark 解密 Kerberos 票据

    前言 在使用 Wireshark 分析 Active Directory 的 Kerberos 的流量时,会遇到加密票据的情况,这对进一步探究 AD 下的漏洞篡改事件的详细过程造成了影响.在查询资料时 ...

  8. CSS——圆角

    例子1: <!DOCTYPE html> <html lang="en"> <head> <style> div { width: ...

  9. Android 13 - Media框架(6)- NuPlayer

    关注公众号免费阅读全文,进入音视频开发技术分享群! 上一节我们通过 NuPlayerDriver 了解了 NuPlayer 的使用方式,这一节我们一起来学习 NuPlayer 的部分实现细节. ps: ...

  10. uniapp 判断当前是保存还是修改操作

    步骤分析: 首先得确定你进入表单后传入了id或者整个对象[这里使用id来进行讲解]其次就是两个请求:POST(保存的) 和 PUT(修改的)最后就是通过传入的id是否存在进行判断即可  POST 请求 ...