在物聯(lián)網(wǎng)領域,傳感器與服務器的通信、信息的收集以及MQTT協(xié)議都是可以考慮的方案之一。MQTT通常用于需要低功耗和低帶寬的場景,如物聯(lián)網(wǎng)設備、傳感器網(wǎng)絡、移動應用等。它的輕量級和高效特性使其非常適合在資源受限的設備和不可靠網(wǎng)絡環(huán)境中使用。
什么是MQTT協(xié)議?
MQTT(Message Queuing Telemetry Transport)是一種輕量級的消息傳遞協(xié)議,專為資源受限的設備和低帶寬、不可靠網(wǎng)絡環(huán)境設計。它最初由IBM開發(fā),現(xiàn)已成為物聯(lián)網(wǎng)領域的標準協(xié)議之一。MQTT的主要特點包括:
①發(fā)布/訂閱模型:MQTT使用發(fā)布/訂閱(Pub/Sub)通信模式,這與傳統(tǒng)的請求/響應模型不同。在這種模式下,客戶端可以發(fā)布消息到某個主題(Topic),而其他對該主題感興趣的客戶端可以訂閱該主題,并接收相應的消息。
②輕量級和高效:MQTT協(xié)議頭部非常小,開銷低,適用于帶寬受限的網(wǎng)絡環(huán)境。
③可靠性:MQTT提供了三種不同的服務質量(QoS)級別,確保消息的傳遞可靠性:
QoS 0:最多一次傳遞(At most once)
QoS 1:至少一次傳遞(At least once)
QoS 2:只有一次傳遞(Exactly once)
④持久會話:MQTT支持持久會話,即客戶端斷開連接后,服務器可以保存該客戶端的訂閱信息和未接收的消息,當客戶端重新連接時,可以繼續(xù)接收未接收的消息。
⑤保留消息:發(fā)布者可以發(fā)送一條帶有保留標志的消息,服務器會保存這條消息,并在有新的訂閱者訂閱該主題時,將這條消息發(fā)送給訂閱者。
⑥遺囑消息:客戶端可以在連接時指定一條遺囑消息,當客戶端意外斷開連接時,服務器會將這條遺囑消息發(fā)布到指定的主題。
⑦安全性:MQTT可以通過TLS/SSL進行加密,確保傳輸數(shù)據(jù)的安全性。此外,MQTT還支持用戶名和密碼認證機制。
OneNet平臺準備
首先,在OneNet平臺創(chuàng)建一個產(chǎn)品。OneNET平臺官網(wǎng)地址:https://open.iot.10086.cn
在「物聯(lián)網(wǎng)開放平臺」中找到「產(chǎn)品開發(fā)」,然后創(chuàng)建一個新的產(chǎn)品。
在產(chǎn)品品類中,提供了一些預設的模版,可以直接使用。
根據(jù)實際使用情況填入信息即可。為了方便后續(xù)數(shù)據(jù)觀察,數(shù)據(jù)協(xié)議選擇數(shù)據(jù)流協(xié)議,以便后續(xù)建立可視化模版。
確保接入?yún)f(xié)議為MQTT,其他信息根據(jù)實際情況進行設置。確認無誤后創(chuàng)建新的產(chǎn)品。
成功創(chuàng)建產(chǎn)品后,可以在產(chǎn)品開發(fā)頁面看到剛才創(chuàng)建的產(chǎn)品。接著,進入產(chǎn)品開發(fā)頁面。
添加一個數(shù)據(jù)流模版,數(shù)據(jù)流名稱、單位名稱及單位符號根據(jù)實際情況填寫。這里為了演示,模擬采集環(huán)境的溫濕度情況。
創(chuàng)建成功后,記錄下創(chuàng)建的數(shù)據(jù)流模版名稱,稍后發(fā)布消息需要用到。
接下來需要創(chuàng)建新的設備。在設備接入管理中的設備管理頁面,點擊添加設備。
在所屬產(chǎn)品中選擇剛才創(chuàng)建的產(chǎn)品,在設備名稱中自定義設置一個設備名稱。其他信息根據(jù)情況設置。
成功配置后,可以在設備管理中看到剛才創(chuàng)建的設備。
隨后,點擊詳情,進入設備相關頁面。可以看到一些基本信息,如設備ID、產(chǎn)品ID、設備名稱及設備密鑰。記錄下這些數(shù)據(jù),之后連接與通訊需要用到。
MQTT連接通訊元素
成功創(chuàng)建OneNet產(chǎn)品后,準備MQTT連接通訊所需的三要素及訂閱發(fā)布主題。
MQTT三要素
使用標準的MQTT三要素通訊,需要了解產(chǎn)品的連接地址、端口、ClientID、UserName、Password。連接地址、端口在產(chǎn)品相關手冊中可以找到。在產(chǎn)品文檔中搜索“MQTT地址”即可快速定位到接入地址及端口。
注意:
MQTT接入地址可能發(fā)生變化,實際接入地址請以實際文檔說明為準。
ClientID、UserName在設備詳情中可以直接得到,Password需要經(jīng)過key計算得到token。
具體的Token算法可以通過產(chǎn)品手冊了解。這里使用官方提供的工具進行計算。
官方下載地址:https://open.iot.10086.cn/college/video/onenet-portal/2024-04-19/17134946071850.exe
軟件中的「res」在手冊中闡述了相關參數(shù)?!竐t」為時間戳:
根據(jù)手冊中的介紹格式:products/{產(chǎn)品ID}/devices/{設備名稱},將產(chǎn)品ID與設備名稱進行修改,即可得到res值。
et為時間戳,填寫過期時間。這里為了演示,直接填寫「9999999999」。
注意:et是unix時間,通常不建議直接設置為9999999999。
key是設備密鑰,將對應的值填入即可。確認填入信息無誤后,即可生成MQTT連接需要的Password。
到這里我們就準備好了MQTT連接的所有要素:連接地址、端口、ClientID,UserName,Password。
訂閱與發(fā)布主題
接下來,還需要獲取上報與接收的訂閱發(fā)布主題。同樣,這里我們通過手冊也可以找到官方發(fā)布的訂閱與發(fā)布主題屬性。
需要根據(jù)實際的使用情況選用適合的訂閱與發(fā)布。這里找到我們需要的訂閱與發(fā)布主題。本次演示使用【訂閱全部主題】以及【上報數(shù)據(jù)點】這兩個訂閱與發(fā)布主題。
訂閱全部物模型相關主題:$sys/{pid}/{device-name}/#
設備上傳數(shù)據(jù)點請求:$sys/{pid}/{device-name}/dp/post/json
根據(jù)手冊中的要求,將「設備名稱」以及「產(chǎn)品ID」填入即可。
發(fā)布消息
確認連接地址與訂閱發(fā)布主題后,了解發(fā)布消息時使用的格式。這里演示使用數(shù)據(jù)流payload格式進行發(fā)布。payload示例如下:
{
"id": 123,
"dp": {
"數(shù)據(jù)流名稱": [{
"v": #值
}],
"數(shù)據(jù)流名稱": [{
"v": #值
}]
}
}
這里演示上報的是溫度與濕度,將準備的溫度與濕度名稱填入即可。
連接測試
接下來,即可開始使用設備連接。這里首先我們確認下得到的參數(shù)是否能夠正常連接與通訊。
MQTTX模擬通訊
使用MQTT相關軟件進行模擬,演示使用的是MQTTX軟件進行模擬,首先將連接要素填入對應的位置。
注意:這里可能會由于MQTT版本導致連接錯誤。目前嘗試「MQTT 3.1.1」版本可以正常連接。需要特別留意版本。
隨后將準備好的發(fā)布與訂閱主題填入對應的位置。隨后嘗試連接,如果成功連接到OneNet平臺,在設備管理中我們可以看到設備在線的提示。
接下來我們再把訂閱與發(fā)布主題填入對應的位置。
準備就緒,接下來即可開始嘗試進行發(fā)布消息,根據(jù)前面準備好的payload消息填入對應的位置。然后發(fā)布消息。
可以看到,成功發(fā)送消息后,服務器返回了一個消息,告訴我們“id:xxx”的消息已經(jīng)收到。我們返回OneNet平臺的設備管理中的數(shù)據(jù)流可以看到剛才發(fā)布的消息已經(jīng)成功收到。
實物連接與通訊
確認獲取的參數(shù)都無誤后,接下來我們可以通過一個實際的設備進行模擬實際使用中的情況。在實際使用中,設備可能多種多樣,這里為了方便,使用一個串口服務器進行模擬。關于產(chǎn)品的使用可以根據(jù)產(chǎn)品手冊或者相關視頻了解,這里具體不展開講解。首先將產(chǎn)品設置為MQTT工作模式,并將對應的參數(shù)分別填入。
確認無誤后,保存參數(shù)并重啟,稍等片刻,在OneNet中的設備管理頁面查看是否正常接入。
這里為了方便演示,我們使用電腦模擬溫度采集模塊,將采集到的溫濕度數(shù)據(jù)進行處理后通過串口發(fā)送給串口服務器。這里使用一個串口工具,將剛才我們準備好的上報消息,直接通過串口發(fā)送至串口服務器。
然后觀察OneNet平臺是否能夠正常收到數(shù)據(jù)。
可以看到,OneNet成功收到了串口服務器上報的消息。
可視化界面
到這里,關于產(chǎn)品的MQTT連接與通訊就全部完成了。但目前觀察產(chǎn)品上報的數(shù)據(jù)有些繁瑣,OneNet可以自行開發(fā)簡單的云平臺。我們根據(jù)這里的演示,建立個數(shù)據(jù)可視化的平臺。我們在物聯(lián)網(wǎng)平臺中,找到應用開發(fā)中的數(shù)據(jù)可視化。
首先,我們新建一個項目。這里OneNet提供了一些模版可以直接使用,我們可以直接使用或者自己新建。
這里我們只是為了演示,所以使用一個空白模版,自己創(chuàng)建一個頁面。
完成后,進入項目進行編輯。
接下來我們就可以看到一個可視化的編輯頁面,可以根據(jù)自己喜好進行設計。這里我們只是為了演示效果,所以任意選擇一個圖標表示即可。
隨后,我們將數(shù)據(jù)綁定。在右側的數(shù)據(jù)頁面中,選擇管理數(shù)據(jù)源。
數(shù)據(jù)類型選擇物聯(lián)網(wǎng)平臺。其中名稱設定為我們的數(shù)據(jù)流名稱,UserID是OneNet用戶管理頁面中可以找到。
accessKey就是設備密鑰,產(chǎn)品ID、設備名稱都可以在設備的詳情中可以找到。
填寫完成后,數(shù)據(jù)流會自動匹配,下拉即可看到剛才我們設置的兩個屬性。
刷新時間與獲取點數(shù)任意設置即可。完成后點擊創(chuàng)建。
隨后下拉剛才我們創(chuàng)建的數(shù)據(jù)源,即可看到已經(jīng)獲取到了數(shù)據(jù)。
同樣,我們用同樣的方法再把濕度創(chuàng)建為濕度數(shù)據(jù)。
接下里即可開始綁定數(shù)據(jù)。選擇剛才創(chuàng)建的數(shù)據(jù)源,隨后,需要根據(jù)要求,在數(shù)據(jù)過濾器中設置對應數(shù)據(jù)。
然后點擊數(shù)據(jù)處理結果,檢查輸出數(shù)據(jù)是否符合要求。
同樣的方法,設置濕度、溫度顯示。
隨后,確認無誤后,保存發(fā)布項目,即可通過鏈接訪問。
復制連接,然后確認發(fā)布,通過鏈接,檢查是否能夠成功訪問。
隨后,我們再使用串口工具上報數(shù)據(jù),檢查數(shù)據(jù)是否能夠同步刷新。
產(chǎn)品推薦
億佰特串口服務器產(chǎn)品涵蓋單串口服務器、多串口服務器、Wi-Fi串口服務器以及串口服務器模組等,可提供串口轉網(wǎng)絡功能,能夠將串口數(shù)據(jù)轉換成TCP/IP協(xié)議數(shù)據(jù),實現(xiàn)串口與網(wǎng)絡的雙向透明傳輸。被廣泛應用于考勤系統(tǒng)、機房監(jiān)控、電力監(jiān)控等場景。