• 大白话聊物联网通信过程,看不懂算我输!~


    大家好,我是程序员小哈,十一假期结束了,我们继续分享嵌入式相关知识,喜欢的小伙伴,文末点赞,让我看到哈。

    上一篇网文 与OneNET服务器连接初体验 我们介绍了使用 MQTT.fx 软件连接上了OneNET服务器。

    今天我们来看一下,MQTT客户端如何与OneNET服务器进行数据通信,发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe)他们三者之间是什么样的关系。

    OneNET平台的主题

    MQTT的服务器端管理着很多主题(topic),发布者是指对某个主题发布消息,订阅者是指订阅不同的主题。

    发布者和订阅者都属于客户端,一个客户端既可以是发布者,也可以是订阅者。

    发布者针对某个主题发布了一条消息至服务器,服务器会分发给所有订阅了该主题的订阅者。

    因此定阅与发布必须要有主题,主题相当于对发送给服务器端的消息进行了分类,只有客户端定阅了某个主题后,才能收到相应主题的payload,才能进行通信。

    一个客户端可以向服务器订阅多个主题。

    比如我们分享过的的综合实例:基于ZigBee的智能家居

    这里阿里云物联网平台就是MQTT的服务器(Broker),手机上的云智能APP和我们做的控制板就属于客户端。

    手机控制电灯开关,就是对设备属性进行设置,手机APP端发布了一个控制灯动作的消息,控制板订阅了这个消息,控制板就能收到服务器转发来的这个消息,进而就能实现手机对控制板的控制。

    控制板通过温湿度传感器获取室内的温湿度信息,控制板通过发布带有温湿度信息的消息至服务器,手机端因为订阅了此主题的消息,手机端也就可以收到此消息了,对此消息进行解析,进而显示到手机APP中,也就实现了控制板上的温湿度数据的上传,这就是对设备属性的上报。

    参考官方的文档,我们得知OneNET平台的主题格式如下:

    主题类型请求topic响应topic
    设备属性上报上行:$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–区分不同消息)和负载(payload–消息内容)两部分。

    通过上面我们知道,如果设备的属性要上报给服务器,那么其主题为:$sys/{pid}/{device-name}/thing/property/post

    替换产品ID和设备名称之后为:$sys/hg8zt6E3LP/XiaoHaLED/thing/property/post

    {
      "id": "123",
      "version": "1.0",
      "params": {
        "Runtime": {
          "value": 1000
        }
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    使用 MQTT.fx 软件实现设备属性上报,具体操作如下:

    也可以同时改变多个参数:

    {
    	"id": "123",
    	"version": "1.0",
    	"params": {
    		"Runtime": {
    			"value": 1000
    		},
    		"PowerSwitch": {
    			"value": true
    		}
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    使用 MQTT.fx 软件实现设备多属性上报,具体操作如下:

    发布消息需要填写 topicpayload和消息的服务质量等级。

    MQTT.fx软件右侧的 QoS0QoS1等是消息服务质量等级。

    MQTT协议中有三种消息发布服务质量:

    QoS0:“至多一次”,消息发布完全依赖底层 TCP/IP 网络。会发生消息丢失或重复的情况。此级别一般用于环境传感器数据上传,即使丢失一次数据也无所谓,因为一般传感器数据的上传都是周期性的。

    QoS1:“至少一次”,确保消息到达,但消息重复可能会发生。

    QoS2:“只有一次”,确保消息到达一次。这一级别可用于对消息丢失和重复不能容忍的场景,比如在计费系统中,此服务质量的消息因为系统开销大,一般物联网平台都是不支持的。

    OneNET平台对协议特性支持如下:

    MQTT的订阅

    通常客户端与MQTT Broker建立连接之后,客户端首先要对其感兴趣的主题进行一下订阅。

    比如设备属性设置,下行:$sys/{pid}/{device-name}/thing/property/set

    替换产品ID和设备名称之后为:$sys/hg8zt6E3LP/XiaoHaLED/thing/property/set

    下面演示一下,使用MQTT.fx软件订阅设备属性设置的主题,然后使用OneNET控制台中的应用模拟器(模拟一个客户端),当其改变某个属性的时候,MQTT.fx软件会同步收到此主题的消息内容,对此消息进行解析,就可以知道对设备属性设置的指令的具体内容了。

    总结

    本文介绍了 MQTT协议 ,MQTT协议采用发布/订阅(Publish/Subscribe)模式,该协议主要有三个角色:发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe)。

    他们三者的关系如下图所示:

    由上图我们可以看出来,消息传递的时候,并不是从消息的发布方直接送达到订阅端,而是经过 MQTT Broker 进行消息的分发。

    这种发布/订阅消息模式,提供了一种一对多的消息分发机制,进而实现了应用程序的解耦。

    发布者(Publish) 是发送消息的一方,可以为一个应用程序或一台设备。

    代理(Broker)(服务器) 是管理消息队列的一方,位于消息发布者和订阅者之间。云端(服务器端)通过主题(Topic)的方式管理各个物联网设备的订阅,实现将设备与设备之间消息进行转发。

    订阅者(Subscribe) 是订阅主题的一方,主要用于接收消息。

    欢迎关注

    加我微信[chengxuyuanxiaoha]进技术交流群,与更多同道中人一起成长。

    如果想了解小哈哥的知识星球,可以点击下方链接,查看球友的福利,我们可以一起交流、一起玩耍。

    知识星球简介链接:
    https://mp.weixin.qq.com/s/LIZlGiqExmSVohLgkUbkoA

    声明:此软件仅供学习使用,请支持正版。

    小贴士

    小哈哥公众号新出版块,以后每个网文后面一个小tip,希望对你有所帮助。

    内容涉及但不限于STM32、单片机、鸿蒙、Qt、小程序,感兴趣的可以持续关注哈,以后的网文,篇篇文末都有的!~

    Q: MQTT官网?

    A: https://mqtt.org/

    在上面链接可以详细了解MQTT协议及官方推荐的各种服务器和客户端使用的各种语言的API库。

  • 相关阅读:
    Maven实战: 从工程创建自定义archetype
    Java方法中不使用的对象应该手动赋值为NULL吗?
    看完这篇 教你玩转渗透测试靶机Vulnhub——Hacksudo: Aliens
    s2019nh62分数减法
    自签名SSL证书的安全隐患和风险有哪些?
    IPv6通信实验
    【信息安全】-虚拟专用网络
    SpringBoot学习(二)---基础配置
    星巴克推出Web3平台;天啦噜,AI绘画能007了;『决策算法』电子书;合成人脸数据集;面向数据的版本控制;前沿论文 | ShowMeAI资讯日报
    Python整数规划— 0−1型规划
  • 原文地址:https://blog.csdn.net/rsd102/article/details/120639997