性无码一区二区三区在线观看,少妇被爽到高潮在线观看,午夜精品一区二区三区,无码中文字幕人妻在线一区二区三区,无码精品国产一区二区三区免费

程序員小哈
認(rèn)證:優(yōu)質(zhì)創(chuàng)作者
作者動態(tài)
自動洗碗機(jī)綜合實例第二講 - 最小系統(tǒng)核心板PCB繪制
2024-07-18 09:21
自動洗碗機(jī)綜合實例第一講 - 最小系統(tǒng)核心板原理圖繪制
2024-07-16 09:40
線路板焊接的干貨都在這里呢
2024-07-14 12:08
基于單片機(jī)的智能風(fēng)扇DIY總結(jié)
2024-07-13 14:42
基于HAL庫實現(xiàn)按鍵(外部中斷)翻轉(zhuǎn)一個LED
2024-06-30 14:02

大白話聊物聯(lián)網(wǎng)通信過程,看不懂算我輸!

大家好,我是程序員小哈,假期結(jié)束了,我們繼續(xù)分享嵌入式相關(guān)知識,喜歡的小伙伴,文末點贊,讓我看到哈。

今天我們來看一下,MQTT客戶端如何與OneNET服務(wù)器進(jìn)行數(shù)據(jù)通信,發(fā)布者(Publish)、代理(Broker)(服務(wù)器)、訂閱者(Subscribe)他們?nèi)咧g是什么樣的關(guān)系。

OneNET平臺的主題

MQTT的服務(wù)器端管理著很多主題(topic),發(fā)布者是指對某個主題發(fā)布消息,訂閱者是指訂閱不同的主題。

發(fā)布者和訂閱者都屬于客戶端,一個客戶端既可以是發(fā)布者,也可以是訂閱者。

發(fā)布者針對某個主題發(fā)布了一條消息至服務(wù)器,服務(wù)器會分發(fā)給所有訂閱了該主題的訂閱者。

因此定閱與發(fā)布必須要有主題,主題相當(dāng)于對發(fā)送給服務(wù)器端的消息進(jìn)行了分類,只有客戶端定閱了某個主題后,才能收到相應(yīng)主題的payload,才能進(jìn)行通信。

一個客戶端可以向服務(wù)器訂閱多個主題。

這里阿里云物聯(lián)網(wǎng)平臺就是MQTT的服務(wù)器(Broker),手機(jī)上的云智能APP和我們做的控制板就屬于客戶端。

手機(jī)控制電燈開關(guān),就是對設(shè)備屬性進(jìn)行設(shè)置,手機(jī)APP端發(fā)布了一個控制燈動作的消息,控制板訂閱了這個消息,控制板就能收到服務(wù)器轉(zhuǎn)發(fā)來的這個消息,進(jìn)而就能實現(xiàn)手機(jī)對控制板的控制。

控制板通過溫濕度傳感器獲取室內(nèi)的溫濕度信息,控制板通過發(fā)布帶有溫濕度信息的消息至服務(wù)器,手機(jī)端因為訂閱了此主題的消息,手機(jī)端也就可以收到此消息了,對此消息進(jìn)行解析,進(jìn)而顯示到手機(jī)APP中,也就實現(xiàn)了控制板上的溫濕度數(shù)據(jù)的上傳,這就是對設(shè)備屬性的上報。

參考官方的文檔,我們得知OneNET平臺的主題格式如下:

其中, {pid} 由產(chǎn)品ID替換,我們上文創(chuàng)建的產(chǎn)品ID為:hg8zt6E3LP。{device-name} 設(shè)備名稱為:XiaoHaLED 。

下面我們使用 MQTT.fx 軟件充當(dāng)客戶端,與OneNET服務(wù)器進(jìn)行通信,我們看看如何發(fā)布和訂閱消息。

發(fā)布消息

MQTT傳輸?shù)南⒎譃椋褐黝}(topic--區(qū)分不同消息)和負(fù)載(payload--消息內(nèi)容)兩部分。

通過上面我們知道,如果設(shè)備的屬性要上報給服務(wù)器,那么其主題為:$sys/{pid}/{device-name}/thing/property/post

替換產(chǎn)品ID和設(shè)備名稱之后為:$sys/hg8zt6E3LP/XiaoHaLED/thing/property/post

{
  "id": "123",
  "version": "1.0",
  "params": {
    "Runtime": {
      "value": 1000
    }
  }
}

使用 MQTT.fx 軟件實現(xiàn)設(shè)備屬性上報,具體操作如下:

也可以同時改變多個參數(shù):

{
 "id": "123",
 "version": "1.0",
 "params": {
  "Runtime": {
   "value": 1000
  },
  "PowerSwitch": {
   "value": true
  }
 }
}

使用 MQTT.fx 軟件實現(xiàn)設(shè)備多屬性上報,具體操作如下:

發(fā)布消息需要填寫 topicpayload和消息的服務(wù)質(zhì)量等級。

MQTT.fx軟件右側(cè)的 QoS0、 QoS1等是消息服務(wù)質(zhì)量等級。

MQTT協(xié)議中有三種消息發(fā)布服務(wù)質(zhì)量:

QoS0:“至多一次”,消息發(fā)布完全依賴底層 TCP/IP 網(wǎng)絡(luò)。會發(fā)生消息丟失或重復(fù)的情況。此級別一般用于環(huán)境傳感器數(shù)據(jù)上傳,即使丟失一次數(shù)據(jù)也無所謂,因為一般傳感器數(shù)據(jù)的上傳都是周期性的。

QoS1:“至少一次”,確保消息到達(dá),但消息重復(fù)可能會發(fā)生。

QoS2:“只有一次”,確保消息到達(dá)一次。這一級別可用于對消息丟失和重復(fù)不能容忍的場景,比如在計費系統(tǒng)中,此服務(wù)質(zhì)量的消息因為系統(tǒng)開銷大,一般物聯(lián)網(wǎng)平臺都是不支持的。

OneNET平臺對協(xié)議特性支持如下:

MQTT的訂閱

通??蛻舳伺cMQTT Broker建立連接之后,客戶端首先要對其感興趣的主題進(jìn)行一下訂閱。

比如設(shè)備屬性設(shè)置,下行:$sys/{pid}/{device-name}/thing/property/set

替換產(chǎn)品ID和設(shè)備名稱之后為:$sys/hg8zt6E3LP/XiaoHaLED/thing/property/set

下面演示一下,使用MQTT.fx軟件訂閱設(shè)備屬性設(shè)置的主題,然后使用OneNET控制臺中的應(yīng)用模擬器(模擬一個客戶端),當(dāng)其改變某個屬性的時候,MQTT.fx軟件會同步收到此主題的消息內(nèi)容,對此消息進(jìn)行解析,就可以知道對設(shè)備屬性設(shè)置的指令的具體內(nèi)容了。

總結(jié)

本文介紹了 MQTT協(xié)議 ,MQTT協(xié)議采用發(fā)布/訂閱(Publish/Subscribe)模式,該協(xié)議主要有三個角色:發(fā)布者(Publish)、代理(Broker)(服務(wù)器)、訂閱者(Subscribe)。

他們?nèi)叩年P(guān)系如下圖所示:

由上圖我們可以看出來,消息傳遞的時候,并不是從消息的發(fā)布方直接送達(dá)到訂閱端,而是經(jīng)過 MQTT Broker 進(jìn)行消息的分發(fā)。

這種發(fā)布/訂閱消息模式,提供了一種一對多的消息分發(fā)機(jī)制,進(jìn)而實現(xiàn)了應(yīng)用程序的解耦。

發(fā)布者(Publish) 是發(fā)送消息的一方,可以為一個應(yīng)用程序或一臺設(shè)備。

代理(Broker)(服務(wù)器) 是管理消息隊列的一方,位于消息發(fā)布者和訂閱者之間。云端(服務(wù)器端)通過主題(Topic)的方式管理各個物聯(lián)網(wǎng)設(shè)備的訂閱,實現(xiàn)將設(shè)備與設(shè)備之間消息進(jìn)行轉(zhuǎn)發(fā)。

訂閱者(Subscribe) 是訂閱主題的一方,主要用于接收消息。

怎么樣?通過上面的描述,物聯(lián)網(wǎng)的通信過程你明白了嗎?

聲明:本內(nèi)容為作者獨立觀點,不代表電子星球立場。未經(jīng)允許不得轉(zhuǎn)載。授權(quán)事宜與稿件投訴,請聯(lián)系:editor@netbroad.com
覺得內(nèi)容不錯的朋友,別忘了一鍵三連哦!
贊 1
收藏 2
關(guān)注 69
成為作者 賺取收益
全部留言
0/200
成為第一個和作者交流的人吧