從頭開始做一個(gè)智能家居設(shè)備:MQTT協(xié)議及使用


前言


搞智能家居就不得不說到網(wǎng)絡(luò)通信,因?yàn)槲覀冃枰ㄟ^各種終端去控制我們的智能家居設(shè)備,所以網(wǎng)絡(luò)通信這方面是必備的.而在市面上比較流行的網(wǎng)絡(luò)通訊協(xié)議就是MQTT通信協(xié)議.今天我們就簡單聊聊如何什么叫MQTT協(xié)議,以及基于百度云的MQTT協(xié)議使用.


MQTT


MQTT(Message Queuing Telemetry Transport,消息隊(duì)列遙測傳輸協(xié)議),是一種基于發(fā)布/訂閱(publish/subscribe)模式的"輕量級(jí)"通訊協(xié)議,該協(xié)議構(gòu)建于TCP/IP協(xié)議上,由IBM在1999年發(fā)布。MQTT最大優(yōu)點(diǎn)在于,可以以極少的代碼和有限的帶寬,為連接遠(yuǎn)程設(shè)備提供實(shí)時(shí)可靠的消息服務(wù)。作為一種低開銷、低帶寬占用的即時(shí)通訊協(xié)議,使其在物聯(lián)網(wǎng)、小型設(shè)備、移動(dòng)應(yīng)用等方面有較廣泛的應(yīng)用。邏輯圖例如下所示.

通俗的來說,MQTT類似于即時(shí)通訊的群聊,里面的用戶就是每一個(gè)終端,當(dāng)然了,每一個(gè)用戶在進(jìn)入群的時(shí)候,就相當(dāng)于訂閱了話題(subscribe) . 用戶進(jìn)入的時(shí)候就會(huì)被設(shè)置為是否可以發(fā)言,這個(gè)過程就是發(fā)布過程(push).MQTT的優(yōu)點(diǎn)就是上面說到的可靠性,這是很難得的優(yōu)點(diǎn),因?yàn)楹芏嘀悄茉O(shè)備所處的網(wǎng)絡(luò)環(huán)境并不是十分的穩(wěn)定.所以使用MQTT協(xié)議來解決這一問題.

另外ESP8266的官方Demo已經(jīng)對MQTT做了很好的封裝,所以我們使用MQTT也是非常方便的.只需要在Demo中修改幾個(gè)參數(shù)就可以了.

這里需要單獨(dú)說一個(gè) MQTT的概念名稱,消息質(zhì)量等級(jí)(Qos),在發(fā)送消息的時(shí)候需要帶上消息質(zhì)量等級(jí)信息.下面我們就簡單說一下這個(gè)Qos的概念以及等級(jí).

等級(jí) 特性
Qos0 發(fā)送者只發(fā)送一次消息,不進(jìn)行重試,Broker不會(huì)返回確認(rèn)消息。在Qos0情況下,其他設(shè)備可能沒有接受到消息,不保證消息是否送達(dá)
Qos1 發(fā)送者最少發(fā)送一次消息,確保消息到達(dá)Broker,其他設(shè)備需要返回確認(rèn)消息PUBACK。在Qos1情況下,其他設(shè)備可能接受到重復(fù)消息,保證消息必然送達(dá).
Qos2 Qos2使用兩階段確認(rèn)來保證消息的不丟失和不重復(fù)。在Qos2情況下,Broker肯定會(huì)收到消息,且只收到一次, 保證消息必然送達(dá).


百度智能云


百度云的物接入每個(gè)月有 1000000 條免費(fèi)消息.比較適合入門測試使用.而且后面小范圍設(shè)備的價(jià)格也比較合理,像我買了每一個(gè)400 W 條數(shù)據(jù),一年也就不到一百塊錢而已.而且百度云的物接入沒有公鑰和私鑰各種加密,相對于我這樣的小白比較簡單.OK,扯了這么多.我們來看一下如何進(jìn)行基本的配置吧.

  • 首先我們先進(jìn)入百度云物接入的控制臺(tái),然后選擇附近的地點(diǎn),南方就選華南的,北方的就選華北即可.緊接著就是開通即可.如下所示.
  • 緊接著,我們就需要?jiǎng)?chuàng)建一個(gè)數(shù)據(jù)類型的項(xiàng)目了.視圖如下所示.
  • 這里選擇 數(shù)據(jù)型 的項(xiàng)目,然后填寫完項(xiàng)目名稱和描述之后就可以點(diǎn)擊完成了.這樣我們就創(chuàng)建了一個(gè)項(xiàng)目了.
  • 創(chuàng)建完成之后返回到項(xiàng)目列表中,這時(shí)候需要我們把項(xiàng)目的幾個(gè)數(shù)據(jù)保存下來.主要是連接地址.我們后期主要會(huì)用到第一個(gè)基于TCP的地址.如下所示.(項(xiàng)目已經(jīng)刪除,請自己嘗試創(chuàng)建.)
  • 下面我們就要做的就是類似于注冊操作了.但是和普通的注冊不同的.這里有四個(gè)名詞,分別是用戶,身份,策略,主題.在創(chuàng)建之前,我們先說說這三者都起了怎樣的作用.

物接入用戶(thing):簡稱“用戶”,在項(xiàng)目中創(chuàng)建的虛擬用戶,每個(gè)項(xiàng)目下最多可以創(chuàng)建10000個(gè)用戶。這也是設(shè)備登錄的直接賬號(hào).

物接入身份(principal):簡稱“身份”,在項(xiàng)目中創(chuàng)建的虛擬設(shè)備的身份,每個(gè)設(shè)備可以綁定一個(gè)身份。每個(gè)項(xiàng)目下最多可以創(chuàng)建10000個(gè)身份。身份在在創(chuàng)建過程中會(huì)生成密鑰.由于每個(gè)賬號(hào)需要綁定一個(gè)身份,這就造成多個(gè)用戶設(shè)備會(huì)使用到同一個(gè)身份中的密鑰.

物接入策略(policy):簡稱“策略”,策略中定義了關(guān)于特定主題的收發(fā)權(quán)限,每個(gè)身份可以綁定一個(gè)策略。每個(gè)項(xiàng)目下最多可以創(chuàng)建10000個(gè)策略。

MQTT主題(topic):簡稱“主題”,每個(gè)策略都需要指定主題及主題對應(yīng)的權(quán)限。該主題應(yīng)用于MQTT客戶端。物接入允許主題中帶一個(gè)通配符“#”,例如“temperature/#”就是匹配前綴是temperature/的所有topic;單獨(dú)的“#”表示匹配所有topic。

上面的四個(gè)名稱概念可以用下面的圖例進(jìn)行表示.多個(gè)用戶可以綁定一個(gè)身份,也就是可以使用同一個(gè)密鑰.多個(gè)身份可以綁定一個(gè)策略.也就是省去了每個(gè)身份標(biāo)簽都需要重新創(chuàng)建策略的工作量了.同時(shí).每一個(gè)策略都可以添加多個(gè)話題.

  • 接下來,我們就從創(chuàng)建策略開始.進(jìn)入項(xiàng)目之后,點(diǎn)擊"策略列表".然后點(diǎn)擊"創(chuàng)建策略"按鈕.
  • 打開創(chuàng)建策略窗口之后,如下所示.我們可以給當(dāng)前主題設(shè)定權(quán)限,并且如果想要綁定多個(gè)主題,也可以通過"新增主題"按鈕添加更多的主題.填寫無誤之后就點(diǎn)擊確定創(chuàng)建即可.
  • 創(chuàng)建完策略之后,我們進(jìn)入身份列表創(chuàng)建身份.然后點(diǎn)擊創(chuàng)建進(jìn)入創(chuàng)建身份界面.這時(shí)候,我們填寫完成身份名稱之后,選擇"密碼認(rèn)證"即可.
  • 在創(chuàng)建身份的過程中.我們選擇我們已經(jīng)創(chuàng)建好的策略.如下所示.
  • 上一步操作完成之后,就會(huì)出現(xiàn)登錄所需要的密鑰,這個(gè)密鑰一定要保存好,因?yàn)楹竺媸遣粫?huì)出現(xiàn)了.如果忘記了,那么就只能重置密鑰了.前期測試階段你忘了還好說,如果設(shè)備上線了.密鑰已經(jīng)寫死在內(nèi)存中了,這時(shí)候再去修改就會(huì)相當(dāng)?shù)穆闊┝?所以這個(gè)一定要注意.
  • 創(chuàng)建密鑰完成之后,我們就需要?jiǎng)?chuàng)建用戶.我們先進(jìn)入用戶列表.然后點(diǎn)擊創(chuàng)建進(jìn)入創(chuàng)建用戶界面.根據(jù)實(shí)際情況填寫內(nèi)容即可.第二步和第三步分別選擇身份和策略.在第三步中,如果身份沒有綁定策略,那么系統(tǒng)就會(huì)提醒我們?nèi)?chuàng)建一個(gè)策略.
  • 經(jīng)過上面的一頓搗鼓之后,我們就拿到了MQTT所有的服務(wù)器數(shù)據(jù)了.如下所示.我們留著備用即可.


結(jié)語


下一篇文章我們就會(huì)說一下如何使用官方Demo去開發(fā)ESP 8266 ,哈,終于要寫到了正題了.這篇文章也就是稍微總結(jié)一下,可能百度云官網(wǎng)會(huì)發(fā)生改變.所以可以參考物接入文檔 . 當(dāng)然了,如果自己有服務(wù)器,也可以自行百度如何搭建MQTT服務(wù)器.其實(shí)也比較簡單.就說到了,如果有任何問題,歡迎在評(píng)論區(qū)留言評(píng)論.歡迎指導(dǎo)批評(píng).謝謝大家了.


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容