电子说
1.项目介绍
本项目基于物联量平台远程的视频监控项目,通过MQTT协议实现两个设备间的数据上报与订阅。通过这个项目来演示,两个MQTT设备如何互相订阅,进行消息流转。在阿里云服务器上创建2个设备,分为为设备A和设备B;设备A负责采集本地摄像头画面上传,设备B负责接收设备A上传的数据然后解析显示出来。在阿里云服务器上需要配置云产品流转,让设备A的数据上传后自动发送给设备B。这样就完成了视频画面数据的流转。不过因为阿里云的最大数据限制,每次最大发送10240字节的数据。
1.1 硬件平台
操作系统:Ubuntu18.04
硬件设备:电脑自带或USB免驱摄像头(V4L2框架)
服务器:阿里云物联网平台(基于MQTT协议)
图像渲染:GTK2.0
1.2 开发流程
设备A:获取摄像头的数据–>缩放成240*320–>编码成JPEG格式—>base64-编码–>组合成MQTT报文–>发布到服务器。
设备B:订阅设备A上传的数据–>base64解码–>解码JPEG数据格式–>GTK图像渲染。
2.MQTT协议介绍
MQTT(消息队列遥测传输)是ISO 标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息协议。它工作在 TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议,为此,它需要一个消息中间件 。
MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。由IBM在1999年发布。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。在很多情况下,包括受限的环境中,作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。如:机器与机器(M2M)通信和物联网(IoT)。其在通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备中已广泛使用。
MQTT最大优点在于,用极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。
2.1 MQTT特点
本协议运行在 TCP/IP,或其它提供了有序、可靠、双向连接的网络连接上。MQTT属于应用层协议,它有以下特点:
使用发布/订阅消息模式,提供了一对多的消息分发和应用之间的解耦。
消息传输不需要知道负载内容。
提供三种等级的服务质量: .
QS0:“最多一次”,尽操作环境所能提供的最大努力分发消息。消息可能会丢失。
例如,这个等级可用于环境传感器数据,单次的数据丢失没关系,因为不久之后会再次发送。
QS1:“至少一次”,保证消息可以到达,但是可能会重复。
QS2:“仅一次”,保证消息只到达一次。例如,这个等级可用在一个计费系统中,这里如果消息重复或丢失会导致不正确的收费。很小的传输消耗和协议数据交换,最大限度减少网络流量。
在MQTT连接建立时,客户端需要通过TCP连接到MQTT服务器,并进行握手协商,包括协议版本、客户端标识符、遗嘱消息、 QoS级别等信息,以确保双方能够正确地交换数据。一旦握手成功,客户端和服务器之间就建立了一个持久化的TCP连接,可以随时进行消息传输。
由于TCP协议本身已经提供了一定程度的可靠性保证,因此MQTT协议只需要在TCP的基础上实现发布/订阅机制、 QoS级别控制、保留消息等特性即可,从而使得它成为一种轻量级且高效的物联网通信协议。
2.2 MQTT协议数据量限制
MQTT协议本身没有限制数据包的大小,但是它需要遵循底层传输协议(TCP/IP)的限制和约束。在实际应用中,MQTT协议能够传输的有效数据量是受多种因素影响的,如网络带宽、QoS级别、MQTT消息头部信息等。一般来说,在默认情况下,MQTT协议对于单个消息的有效载荷有一个限制,即不超过256MB。这个限制主要由MQTT协议的消息长度字段决定,该字段的最大值是4字节,因此最大能表示2^32-1个字节的消息长度,即约为4GB。然而,在实际应用中,由于网络带宽和设备性能等方面的限制,很难实现传输如此巨大的消息。
另外,需要注意的是,如果使用较高级别的QoS,如“至少一次”或“恰好一次”,则MQTT协议会对每条消息进行确认和重传,这可能会导致更多的网络流量和延迟。因此,在选择QoS级别时,需要根据应用场景和网络环境的实际情况进行优化和调整,以充分利用MQTT协议的特点和优势。
3.阿里云物联网平台搭建
3.1 搭建阿里云物联网平台
2.创建产品
3.功能定义, 添加自 定义功能, 发布上线。
4.添加设备
3.2 设备登录
MQTT 连接阿里云需要三个参数: 客户端 id、 用户名、 密码。 此信息可直接在设备中获取。
3.3 消息订阅与消息发布
Topic 是消息发布( Pub) 者和订阅( Sub) 者之间的传输中介。 设备可通过 Topic 实现消息的发送和接收, 从而实现服务端与设备端的通信。 为方便海量设备基于 Topic 进行通信,简化授权操作, 物联网平台定义了产品 Topic 类和设备 Topic。
3.4 数据上报格式
MQTT 上报数据格式为 JSON 格式。 内容格式如下:
发布主题: "/sys/{产品 ID}/{设备名 }/thing/service/property/set"
数据内容格式: {"method":"thing.event.property.post","params":{"image":"hello,world"}}
设备端订阅消息内容:
订阅主题: "/sys/{产品 ID}/{设备名 }/thing/event/property/post"
审核编辑 黄宇
全部0条评论
快来发表一下你的评论吧 !