当前位置: 首页 > 科技观察

通俗易懂的说说物联网的通信过程,不懂我输!

时间:2023-03-21 12:09:36 科技观察

大家好,我是程序员小哈。十一假期结束,我们将继续分享嵌入式技术知识。喜欢的朋友,请在文末点个赞,让我看看。在上一篇连接OneNET服务器的初体验中,我们介绍了使用MQTT.fx软件连接OneNET服务器。今天我们就来看看MQTT客户端是如何与OneNET服务器通信的,以及发布者(Publish)、代理者(Broker)(服务器)、订阅者(Subscribe)之间是什么关系。OneNET平台的主题MQTT的服务器端管理着很多主题。发布者是指发布关于某个主题的消息,订阅者是指订阅不同的主题。发布者和订阅者都属于客户端,客户端既可以是发布者也可以是订阅者。发布者针对某个主题向服务器发布消息,服务器将其分发给所有订阅该主题的订阅者。因此,订阅和发布必须有主题。主题相当于对发送到服务器的消息进行分类。只有客户端订阅了一个主题后,才能接收到相应主题的负载并进行通信。客户端可以从服务器订阅多个主题。比如我们分享的综合示例:基于ZigBee的智能家居。这里阿里云物联网平台就是MQTT服务器(Broker),手机端的云智能APP和我们做的控制面板都属于客户端。手机控制电灯开关,就是设置设备的属性。手机APP端发布消息控制灯的动作。仪表板控件。控制板通过温湿度传感器获取室内温湿度信息,控制板将温湿度信息发布到服务器。因为手机订阅了这个话题的消息,所以手机可以收到这条消息。对消息进行解析后显示在手机APP中,实现温湿度数据在控制板上的上传,即设备属性的上报。参考官方文档得知,OneNET平台的topic格式如下:TopictyperequesttopicResponsetopicDevicepropertyreportupstream:$sys/{pid}/{device-name}/thing/property/post$sys/{pid}/{device-name}/thing/property/post/reply设备属性设置行:$sys/{pid}/{device-name}/thing/property/set$sys/{pid}/{device-name}/thing/property/set_reply设备属性获取下游:$sys/{pid}/{device-name}/thing/property/get$sys/{pid}/{device-name}/thing/property/get_reply上游设备事件报告:$sys/{pid}/{device-name}/thing/event/post$sys/{pid}/{device-name}/thing/event/post/reply其中{pid}被替换通过产品ID,我们上面创建的产品ID是:hg8zt6E3LP。{device-name}设备名称为:XiaoHaLED。下面我们使用MQTT.fx软件作为客户端与OneNET服务器通信,看看如何发布和订阅消息。发布消息MQTT传输的消息分为两部分:主题(topic--distinguishingdifferentmessages)和payload(payload--消息内容)。由上可知,如果要向服务器上报设备的属性,替换产品ID和设备后主题为:$sys/{pid}/{device-name}/thing/property/post名称为:$sys/hg8zt6E3LP/XiaoHaLED/thing/property/post{"id":"123","version":"1.0","params":{"Runtime":{"value":1000}}}使用MQTT.fx软件实现设备属性上报,具体操作如下:也可以同时更改多个参数:{"id":"123","version":"1.0","params":{"Runtime":{"value":1000},"PowerSwitch":{"value":true}}}使用MQTT.fx软件上报设备多属性。具体操作如下:发布一条消息,需要填写消息的主题、负载和服务质量等级。MQTT.fx软件右侧的QoS0、QoS1等为消息服务质量等级。在MQTT协议中,消息发布服务质量分为三种:QoS0:“最多一次”,消息发布完全依赖于底层的TCP/IP网络。消息可能会丢失或重复。该级别一般用于上传环境传感器数据,即使数据丢失一次也没关系,因为一般传感器数据的上传是周期性的。QoS1:“至少一次”,确保消息到达,但可能会出现消息重复。QoS2:“Onlyonce”,确保消息到达一次。该级别可用于不能容忍消息丢失和重复的场景。例如,在计费系统中,由于系统开销高,一般物联网平台不支持这种服务质量的消息。OneNET平台支持的协议特性如下:MQTT订阅通常,客户端在与MQTTBroker建立连接后,首先需要订阅自己感兴趣的主题。例如设备属性设置,下行:$sys/{pid}/{device-name}/thing/property/set替换产品ID和设备名称后为:$sys/hg8zt6E3LP/XiaoHaLED/thing/property/set下面演示,使用MQTT.fx软件订阅设备属性设置的topic,然后在OneNET控制台使用应用模拟器(模拟一个客户端),当某个属性改变时,MQTT.fx软件会同步接收到该主题的消息内容,通过解析该消息,您可以知道设置设备属性的指令的具体内容。总结本文介绍了MQTT协议。MQTT协议采用发布/订阅(Publish/Subscribe)模型。该协议具有三个主要角色:发布者(Publish)、代理者(Server)和订阅者(??Subscribe)。三者的关系如下图所示:从上图我们可以看出,消息在投递时,并不是直接从消息的发布者发送到订阅者,而是通过MQTTBroker进行分发。这种发布/订阅消息模式提供了一对多的消息分发机制,从而实现了应用程序的解耦。发布者(Publish)是发送消息的一方,可以是应用程序也可以是设备。Broker(服务器)是管理消息队列的一方,位于消息发布者和订阅者之间。云端(服务器端)通过主题(Topic)管理各个物联网设备的订阅,从而实现设备间消息的转发。订阅者(Subscribe)是订阅主题的一方,主要是为了接收消息。如何?通过上面的描述,你了解物联网的通信过程了吗?本文转载自微信公众号《嵌入从0到1》,可通过以下二维码关注。转载本文请联系嵌入式从0到1公众号。