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做主控連接阿里云——

推薦閱讀