mqtt_simple例程 nrf9160做主控连接阿里云——( 二 )


文章插图
设置以上选项,本次测试在次创建一个产品设备,本次创建的设备信息如下(区别于上一篇博客的是,为了方便后续讲解在联网方式上选择了wifi,如给你是物联网设备(在板子上需要SIM卡的)请你依然选择蜂窝方式):

mqtt_simple例程 nrf9160做主控连接阿里云——

文章插图
在产品界面我可以看到我们创建好的产品:
mqtt_simple例程 nrf9160做主控连接阿里云——

文章插图
2.3、在产品中创建物联网设备点击管理设备:
mqtt_simple例程 nrf9160做主控连接阿里云——

文章插图
然后添加设备:
mqtt_simple例程 nrf9160做主控连接阿里云——

文章插图
这次随意添加一个设备T123:
mqtt_simple例程 nrf9160做主控连接阿里云——

文章插图
然后我点击产品界面,test产品的查看,发布一下我们的产品(不理解这一步的可以看一下前面的文章)
三、根据三元组计算链接参数——MQTT的CONNECT(连接服务端)报文3.1、获取三元组重要:在创建好设备后就可以获取设备的三元组,然后根据三元组和阿里云的要求计算获得连接参数写到mqtt_simple程序中,即可进行程序连接了,有些云不一定需要,不同的云可能有不同的要求 , 可以咨询提供云服务的官方或者参考相关云的官方文档 。
点击设备,找到刚刚创建的设备,然后点击Devicesecret可以获取到我的三元组信息
mqtt_simple例程 nrf9160做主控连接阿里云——

文章插图
然后一键复制粘贴到剪切板
mqtt_simple例程 nrf9160做主控连接阿里云——

文章插图
3.2、MQTT协议的CONNECT命令解析——并计算连接信息讲到这想要记录一下我学习的MQTT协议连接命令——CONNECT连接服务端命令,可以便于我们在出现连接错误有不知道为什么时,可以抓包进行分析,这一步我觉得是很有必要的 。下面就让我们来一起学习一下 。
MQTT报文一共有14条,下面附图,在本节主要讲解CONNECT报文:
表3.1:
mqtt_simple例程 nrf9160做主控连接阿里云——

文章插图
本节参考了MQTT 协议 3.1.1 中文版,在现有的NCS中使用的也是mqtt-V3.1.1版本 。
由上图可知CONNECT报文一共由三个部分组成分别是固定报头、可变报头、负载 。
在这之前我们先来了解一下MQTT的消息质量是三个等级(句号后的黄色部分是作者自己理解的,如有错误欢迎指正):
  • QoS 0:消息最多传递一次 。如果当时客户端不可用,则会丢失该消息 。只要发送了一条消息就不再关心它有没有发送到对方,也不设置任何重发机制

  • mqtt_simple例程 nrf9160做主控连接阿里云——

    文章插图
  • QoS 1:消息传递至少 1 次 。包含了从传机制,如果服务器来不及应答,就会导致客户端端超时,再次发送一次消息,服务端每次对没一个消息都要回复,在有多条消息时,不会像QoS2一样去和客户端确认说 , 你连续发了这么多 , 是都要执行嘛,还是只执行一次 , 多发的是误发 。

  • mqtt_simple例程 nrf9160做主控连接阿里云——

    文章插图
  • QoS 2:消息恰好传送送一次 。相同的命令值希望执行一次,不会由于如QoS1一样导致说,本来只想执行一次的信息 , 多执行了几次,由于有了这个保证,要完成这个机制(多一个应答机制),导致系统开销会大,但是保证了消息的精准性,QoS2质量的消息只有在比较重要的领域应用 , 如军事 ,航天等 。

mqtt_simple例程 nrf9160做主控连接阿里云——

文章插图
QoS2因此是最高质量的消息,就如我们本次使用的阿里云占时还在不支持这个等级的消息 。
3.2.1、固定报头
mqtt_simple例程 nrf9160做主控连接阿里云——

文章插图
1)第一字节:
mqtt_simple例程 nrf9160做主控连接阿里云——

文章插图
如截图,第一字节,一共8bit,分为两部分,4~7bit定义了每一包报文是一个什么类型,所有报文如表3.1中所示,下图是MQTT协议中对CONNECT报文的定义:
mqtt_simple例程 nrf9160做主控连接阿里云——

推荐阅读