前言
搞智能家居就不得不說(shuō)到網(wǎng)絡(luò)通信,因?yàn)槲覀冃枰ㄟ^(guò)各種終端去控制我們的智能家居設(shè)備,所以網(wǎng)絡(luò)通信這方面是必備的.而在市面上比較流行的網(wǎng)絡(luò)通訊協(xié)議就是MQTT通信協(xié)議.今天我們就簡(jiǎn)單聊聊如何什么叫MQTT協(xié)議,以及基于百度云的MQTT協(xié)議使用.
MQTT
MQTT(Message Queuing Telemetry Transport,消息隊(duì)列遙測(cè)傳輸協(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ù)汹族。作為一種低開(kāi)銷(xiāo)、低帶寬占用的即時(shí)通訊協(xié)議其兴,使其在物聯(lián)網(wǎng)顶瞒、小型設(shè)備、移動(dòng)應(yīng)用等方面有較廣泛的應(yīng)用元旬。邏輯圖例如下所示.
通俗的來(lái)說(shuō),MQTT類(lèi)似于即時(shí)通訊的群聊,里面的用戶就是每一個(gè)終端,當(dāng)然了,每一個(gè)用戶在進(jìn)入群的時(shí)候,就相當(dāng)于訂閱了話題(subscribe) . 用戶進(jìn)入的時(shí)候就會(huì)被設(shè)置為是否可以發(fā)言,這個(gè)過(guò)程就是發(fā)布過(guò)程(push).MQTT的優(yōu)點(diǎn)就是上面說(shuō)到的可靠性,這是很難得的優(yōu)點(diǎn),因?yàn)楹芏嘀悄茉O(shè)備所處的網(wǎng)絡(luò)環(huán)境并不是十分的穩(wěn)定.所以使用MQTT協(xié)議來(lái)解決這一問(wèn)題.
另外ESP8266的官方Demo已經(jīng)對(duì)MQTT做了很好的封裝,所以我們使用MQTT也是非常方便的.只需要在Demo中修改幾個(gè)參數(shù)就可以了.
這里需要單獨(dú)說(shuō)一個(gè) MQTT的概念名稱(chēng),消息質(zhì)量等級(jí)(Qos),在發(fā)送消息的時(shí)候需要帶上消息質(zhì)量等級(jí)信息.下面我們就簡(jiǎn)單說(shuō)一下這個(gè)Qos的概念以及等級(jí).
等級(jí) | 特性 |
---|---|
Qos0 | 發(fā)送者只發(fā)送一次消息榴徐,不進(jìn)行重試,Broker不會(huì)返回確認(rèn)消息匀归。在Qos0情況下坑资,其他設(shè)備可能沒(méi)有接受到消息,不保證消息是否送達(dá) |
Qos1 | 發(fā)送者最少發(fā)送一次消息,確保消息到達(dá)Broker穆端,其他設(shè)備需要返回確認(rèn)消息PUBACK袱贮。在Qos1情況下,其他設(shè)備可能接受到重復(fù)消息,保證消息必然送達(dá). |
Qos2 | Qos2使用兩階段確認(rèn)來(lái)保證消息的不丟失和不重復(fù)体啰。在Qos2情況下字柠,Broker肯定會(huì)收到消息,且只收到一次狡赐, 保證消息必然送達(dá). |
百度智能云
百度云的物接入每個(gè)月有 1000000 條免費(fèi)消息.比較適合入門(mén)測(cè)試使用.而且后面小范圍設(shè)備的價(jià)格也比較合理,像我買(mǎi)了每一個(gè)400 W 條數(shù)據(jù),一年也就不到一百塊錢(qián)而已.而且百度云的物接入沒(méi)有公鑰和私鑰各種加密,相對(duì)于我這樣的小白比較簡(jiǎn)單.OK,扯了這么多.我們來(lái)看一下如何進(jìn)行基本的配置吧.
- 首先我們先進(jìn)入百度云物接入的控制臺(tái),然后選擇附近的地點(diǎn),南方就選華南的,北方的就選華北即可.緊接著就是開(kāi)通即可.如下所示.
- 緊接著,我們就需要?jiǎng)?chuàng)建一個(gè)數(shù)據(jù)類(lèi)型的項(xiàng)目了.視圖如下所示.
- 這里選擇 數(shù)據(jù)型 的項(xiàng)目,然后填寫(xiě)完項(xiàng)目名稱(chēng)和描述之后就可以點(diǎn)擊完成了.這樣我們就創(chuàng)建了一個(gè)項(xiàng)目了.
- 創(chuàng)建完成之后返回到項(xiàng)目列表中,這時(shí)候需要我們把項(xiàng)目的幾個(gè)數(shù)據(jù)保存下來(lái).主要是連接地址.我們后期主要會(huì)用到第一個(gè)基于TCP的地址.如下所示.(項(xiàng)目已經(jīng)刪除,請(qǐng)自己嘗試創(chuàng)建.)
- 下面我們就要做的就是類(lèi)似于注冊(cè)操作了.但是和普通的注冊(cè)不同的.這里有四個(gè)名詞,分別是用戶,身份,策略,主題.在創(chuàng)建之前,我們先說(shuō)說(shuō)這三者都起了怎樣的作用.
物接入用戶(thing):簡(jiǎn)稱(chēng)“用戶”,在項(xiàng)目中創(chuàng)建的虛擬用戶枕屉,每個(gè)項(xiàng)目下最多可以創(chuàng)建10000個(gè)用戶搀擂。這也是設(shè)備登錄的直接賬號(hào).
物接入身份(principal):簡(jiǎn)稱(chēng)“身份”西潘,在項(xiàng)目中創(chuàng)建的虛擬設(shè)備的身份,每個(gè)設(shè)備可以綁定一個(gè)身份哨颂。每個(gè)項(xiàng)目下最多可以創(chuàng)建10000個(gè)身份。身份在在創(chuàng)建過(guò)程中會(huì)生成密鑰.由于每個(gè)賬號(hào)需要綁定一個(gè)身份,這就造成多個(gè)用戶設(shè)備會(huì)使用到同一個(gè)身份中的密鑰.
物接入策略(policy):簡(jiǎn)稱(chēng)“策略”品姓,策略中定義了關(guān)于特定主題的收發(fā)權(quán)限寝并,每個(gè)身份可以綁定一個(gè)策略。每個(gè)項(xiàng)目下最多可以創(chuàng)建10000個(gè)策略腹备。
MQTT主題(topic):簡(jiǎn)稱(chēng)“主題”衬潦,每個(gè)策略都需要指定主題及主題對(duì)應(yīng)的權(quán)限镀岛。該主題應(yīng)用于MQTT客戶端友驮。物接入允許主題中帶一個(gè)通配符“#”,例如“temperature/#”就是匹配前綴是temperature/的所有topic卸留;單獨(dú)的“#”表示匹配所有topic。
上面的四個(gè)名稱(chēng)概念可以用下面的圖例進(jìn)行表示.多個(gè)用戶可以綁定一個(gè)身份,也就是可以使用同一個(gè)密鑰.多個(gè)身份可以綁定一個(gè)策略.也就是省去了每個(gè)身份標(biāo)簽都需要重新創(chuàng)建策略的工作量了.同時(shí).每一個(gè)策略都可以添加多個(gè)話題.
- 接下來(lái),我們就從創(chuàng)建策略開(kāi)始.進(jìn)入項(xiàng)目之后,點(diǎn)擊"策略列表".然后點(diǎn)擊"創(chuàng)建策略"按鈕.
- 打開(kāi)創(chuàng)建策略窗口之后,如下所示.我們可以給當(dāng)前主題設(shè)定權(quán)限,并且如果想要綁定多個(gè)主題,也可以通過(guò)"新增主題"按鈕添加更多的主題.填寫(xiě)無(wú)誤之后就點(diǎn)擊確定創(chuàng)建即可.
- 創(chuàng)建完策略之后,我們進(jìn)入身份列表創(chuàng)建身份.然后點(diǎn)擊創(chuàng)建進(jìn)入創(chuàng)建身份界面.這時(shí)候,我們填寫(xiě)完成身份名稱(chēng)之后,選擇"密碼認(rèn)證"即可.
- 在創(chuàng)建身份的過(guò)程中.我們選擇我們已經(jīng)創(chuàng)建好的策略.如下所示.
- 上一步操作完成之后,就會(huì)出現(xiàn)登錄所需要的密鑰,這個(gè)密鑰一定要保存好,因?yàn)楹竺媸遣粫?huì)出現(xiàn)了.如果忘記了,那么就只能重置密鑰了.前期測(cè)試階段你忘了還好說(shuō),如果設(shè)備上線了.密鑰已經(jīng)寫(xiě)死在內(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í)際情況填寫(xiě)內(nèi)容即可.第二步和第三步分別選擇身份和策略.在第三步中,如果身份沒(méi)有綁定策略,那么系統(tǒng)就會(huì)提醒我們?nèi)?chuàng)建一個(gè)策略.
- 經(jīng)過(guò)上面的一頓搗鼓之后,我們就拿到了MQTT所有的服務(wù)器數(shù)據(jù)了.如下所示.我們留著備用即可.
結(jié)語(yǔ)
下一篇文章我們就會(huì)說(shuō)一下如何使用官方Demo去開(kāi)發(fā)ESP 8266 ,哈,終于要寫(xiě)到了正題了.這篇文章也就是稍微總結(jié)一下,可能百度云官網(wǎng)會(huì)發(fā)生改變.所以可以參考物接入文檔 . 當(dāng)然了,如果自己有服務(wù)器,也可以自行百度如何搭建MQTT服務(wù)器.其實(shí)也比較簡(jiǎn)單.就說(shuō)到了,如果有任何問(wèn)題,歡迎在評(píng)論區(qū)留言評(píng)論.歡迎指導(dǎo)批評(píng).謝謝大家了.