前言
本文簡(jiǎn)單介紹了MQTT的基礎(chǔ)知識(shí)和使用方法,以藍(lán)牙WIFI雙模芯片W801作為硬件設(shè)備,接入到華為云。
一、MQTT是什么?
MQTT(消息隊(duì)列遙測(cè)傳輸協(xié)議),是一種基于 發(fā)布/訂閱 (publish/subscribe)模式的"輕量級(jí)"通訊協(xié)議, 該協(xié)議構(gòu)建于TCP/IP協(xié)議上 。MQTT最大優(yōu)點(diǎn)在于,可以以極少的代碼和有限的帶寬,為連接遠(yuǎn)程設(shè)備提供實(shí)時(shí)可靠的消息服務(wù)。作為一種低開(kāi)銷、低帶寬占用的即時(shí)通訊協(xié)議,使其在物聯(lián)網(wǎng)、小型設(shè)備、移動(dòng)應(yīng)用等方面有較廣泛的應(yīng)用。
好了,以上都是一些文縐縐的說(shuō)辭,了解一下即可。然后我們要知道,它是如何實(shí)現(xiàn)通信的??
MQTT協(xié)議中有三種身份:發(fā)布者(Publish)、服務(wù)器(Broker)、訂閱者(Subscribe)。
如下圖,每個(gè)設(shè)備之間都已經(jīng)建立了MQTT連接。某手機(jī)和某電腦訂閱了“溫度”主題,充當(dāng)訂閱者,溫度計(jì)充當(dāng)發(fā)布者。當(dāng)溫度計(jì)向“溫度”主題發(fā)布一條消息時(shí),那么訂閱了“溫度”主題的訂閱者都會(huì)收到這條消息。而服務(wù)器只是充當(dāng)轉(zhuǎn)發(fā)的角色 。
下面是在MQTT中的一些操作:
- Connect:與服務(wù)器進(jìn)行MQTT連接;
- Disconnect:與服務(wù)器斷開(kāi)MQTT連接;
- Subscribe:訂閱某個(gè)主題;
- UnSubscribe:取消訂閱某個(gè)主題;
- Publish:發(fā)布消息;
以下是通信過(guò)程中使用到的報(bào)文,在下文中會(huì)使用到。
二、接入物聯(lián)網(wǎng)平臺(tái)(以華為云為例)
下面是物聯(lián)網(wǎng)應(yīng)用的一個(gè)典型的示意圖。現(xiàn)在舉一個(gè)例子加以說(shuō)明:假設(shè)設(shè)計(jì)一個(gè)溫度監(jiān)測(cè)的應(yīng)用。設(shè)備端(溫度傳感器+可以聯(lián)網(wǎng)的芯片)進(jìn)行數(shù)據(jù)采集,將數(shù)據(jù)通過(guò)MQTT協(xié)議傳輸?shù)轿锫?lián)網(wǎng)平臺(tái)(服務(wù)器、Broker)。與此同時(shí),應(yīng)用端(手機(jī)APP、小程序或電腦網(wǎng)頁(yè)等)從物聯(lián)網(wǎng)平臺(tái)接收數(shù)據(jù)進(jìn)行顯示監(jiān)測(cè)。應(yīng)用端和物聯(lián)網(wǎng)平臺(tái)之間的通信協(xié)議并非只限于MQTT,也可能是HTTP、AMQP等。
1.創(chuàng)建產(chǎn)品和新增設(shè)備
首先我們需要在物聯(lián)網(wǎng)平臺(tái)上新建一個(gè)產(chǎn)品并新增一個(gè)測(cè)試設(shè)備,具體設(shè)置如下:
2.建立TCP連接
因?yàn)镸QTT是建立在TCP連接上的。因此,在建立MQTT連接之前需要建立TCP連接。具體一般是使用套接字進(jìn)行建立TCP連接,需要的參數(shù)包括 域名(解析出IP地址),端口(一般是1883) 。
從騰訊云的文檔中找到域名和端口:
調(diào)用函數(shù)建立TCP連接
static int mqtt_init_socket(mqtt_broker_handle_t *broker, const char *hostname, short port);
//broker:MQTT信息的結(jié)構(gòu)體
//hostname:域名
//port:端口
3.建立MQTT連接
設(shè)備端與服務(wù)器建立MQTT連接的步驟如下:1、發(fā)送CONNECT報(bào)文;2、接收CONNACK報(bào)文;3、定時(shí)發(fā)送心跳包。
1、CONNECT報(bào)文
CONNECT報(bào)文的內(nèi)容如下:
- client id:客戶端id
- username:用戶名
- password:密碼
- clean session:清除會(huì)話
- keepalive:心跳時(shí)間
其中前三個(gè)參數(shù)可以在華為云提供的工具中獲?。ㄈ缦聢D):華為云MQTT報(bào)文內(nèi)容生成工具。填入上圖生成的設(shè)備ID和密鑰即可生成。
參數(shù)clean session與Qos(服務(wù)質(zhì)量)有關(guān),保持默認(rèn)即可;心跳時(shí)間的設(shè)置建議60-300,單位是s。
2、接收CONNACK報(bào)文
發(fā)送CONNECT報(bào)文后會(huì)接收到連接確認(rèn)報(bào)文CONNACK。
3、發(fā)送心跳包
Keepalive指定連接最大空閑時(shí)間T,當(dāng)客戶端檢測(cè)到連接空閑時(shí)間超過(guò)T時(shí),必須向Broker發(fā)送心跳報(bào)文PINGREQ,Broker收到心跳請(qǐng)求后返回心跳響應(yīng)PINGRESP。若Broker超過(guò)1.5T時(shí)間沒(méi)收到心跳請(qǐng)求則斷開(kāi)連接,并且投遞遺囑消息到訂閱方;同樣,若客戶端超過(guò)一定時(shí)間仍沒(méi)收到心跳響應(yīng)PINGRESP則斷開(kāi)連接。 簡(jiǎn)單來(lái)說(shuō),心跳包是讓對(duì)方知道設(shè)備還在線,沒(méi)有斷開(kāi)連接 。
完成上述步驟后,即可激活設(shè)備。
-
藍(lán)牙
+關(guān)注
關(guān)注
114文章
5823瀏覽量
170329 -
WIFI
+關(guān)注
關(guān)注
81文章
5297瀏覽量
203722 -
MQTT
+關(guān)注
關(guān)注
5文章
651瀏覽量
22506
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論