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