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

MQTT物聯網網關的常見類型
MQTT 5協議你知道多少?
MQTT發布特性有哪些
如何使用OneNET平臺的MQTT功能?

評論