孫海濱 張敬超



摘 ?要: 隨著物聯網技術的發展和移動終端的普及,人們更加希望能夠隨時隨地方便地獲取信息和服務,這時就涉及到物聯網硬件設備,windows客戶端,手機端,web網頁之間不同平臺,不同語言的信息交互。本文結合MQTT,windows服務,winform程序設計技術,windows消息隊列,串口通信,React Native等,提出了物聯網消息傳輸的一系列方法,實現了在云服務器資源較小的情況下,用戶可以方便快捷地多平臺訪問和控制物聯網硬件信息和設備,節約云服務器開支的同時,提高了數據訪問效率。
關鍵詞: MQTT;物聯網;跨平臺;Winform程序
中圖分類號: TP311.1 ? ?文獻標識碼: A ? ?DOI:10.3969/j.issn.1003-6970.2020.08.045
本文著錄格式:孫海濱, 張敬超. 基于MQTT協議的跨平臺工業級物聯網消息傳輸系統實現與設計[J]. 軟件,2020,41(08):168-171
【Abstract】: With the development of Internet of things technology and the popularization of mobile terminals, people are more willing to obtain information and services conveniently anytime and anywhere. At this time, information interaction between hardware devices of Internet of things, Windows client, mobile terminal and web page on different platforms and in different languages is designed. Based MQTT, Windows services, winform programming technology, Windows message queue, serial communication, the React Native and so on, puts forward the Internet message transmission of a series of methods, realized in the case of a small cloud server resources, the user can more convenient platform to Internet access and control hardware and equipment information, saving cloud server costs at the same time, improve the efficiency of data access.
【Key words】: MQTT; Internet of things; Cross-platform; Winform procedure
0 ?引言
隨著互聯網和移動手機技術的迅猛發展,物聯網平臺的概率廣泛被提及[1],物聯網平臺是提供應用支撐、數據存儲等能力的平臺[2],其物聯網技術已經應用到了各個場景,企業測量設備加入無線模塊后,即可遠程控制。但是在設備測量數據進行存儲時,若將大量數據存入云服務器,就會帶來一些問題。第一,當設備較多時,需要的云服務器的存儲空間比較大,需要前期的投入較大。第二,企業數據都將存入購買的運營商的服務器,數據在傳輸和保存時容易遭到泄露,這就降低了企業自己的測量數據的保密性。所以大多數企業要求將數據存入到自己的本地數據庫,同時要求可以手機,網站等不同方式來訪問數據和控制設備。
面對這些挑戰,我們設計出了一套跨平臺工業級物聯網消息傳輸系統[3],企業員工可以在公司計算機的客戶端上進行設備控制和數據查詢,又可以通過外網使用手機或者網頁訪問保存在企業本地的數據,并控制設備,在保證了數據的安全性的同時,數據在傳輸過程中更加及時、高效、省流量、省資源。
1 ?相關技術研究
1.1 ?MQTT介紹
MQTT是由IBM發布的一種輕量級跨平臺消息傳輸協議[4],MQTT 可以被解釋為一種低開銷,低帶寬占用的即時通訊協議,利用極少的代碼和帶寬的為連接遠程設備提供實時可靠的消息服務,它適用于硬件性能低下的遠程設備以及網絡狀況糟糕的環境下,因此 MQTT 協議在物聯網,小型設備應用,移動應用等方面有較廣泛的應用。
MQTT協議運行在TCP/IP或其他網絡協議,提供有序、無損、雙向連接[5]。其特點包括:
使用的發布/訂閱消息模式。提供了一對多消息分發機制,以實現與應用程序的解耦。對負載內容屏蔽的消息傳輸機制。
本文利用MQTT協議實現Web端與服務端進行交互,實現移動端和網頁端對物聯網設備的控制。
1.2 ?串口通信
串口通信是指以位(bit)為單位發送方和接收字節,且遵守時序的一種通信方式。可以將接收處理器發送的并行字符轉換為連續的串行數據流發送,反之也能將串行數據流發送給處理器。以傳輸方向進行區分通常分為三種模式:單工、半雙工和全工[6]。
本文利用無線模塊轉接串口,實現物聯網設備與服務端的收發消息。
1.3 ?Windows程序介紹
Winform是基于微軟公司開發的C#語言[7],利用.Net平臺開發應用程序,具有Windows窗口開發的特點[8]。
本文利用windows程序開發服務端與企業客戶端,服務端用于與物聯網設備收發消息,客戶端用于數據的解析以及數據庫操作,且面向客戶端用戶進行數據展示以及操作。
1.4 ?React Native介紹
React Native(簡稱RN)是Facebook在2015年4月發布的一款移動應用開發框架,與FaceBook早先發布的UI框架React一樣具有開源的特性。RN既能擁有原生native的交互體驗,又能夠保持web的高效與靈活,且能支持IOS和Android兩大移動端平臺等特點[9]。
RN的優勢在于具有較強擴展性,且可以適用Native的原生動畫,避免了WebView的交互和性能問題。
本文利用RN構建web客戶端,為用戶移動端和瀏覽器訪問設備及其數據提供服務。
2 ?系統架構
整個跨平臺工業級物聯網消息傳輸系統提供給用戶對物聯網設備信息的查詢和設置,幫助用戶在企業局域網和外網上遠程控制設備,用戶通過手機客戶端,電腦客戶端和網址查詢儲存在企業本地服務器的測量設備,整個系統架構如圖1所示。
系統分為四部分,第一部分,物聯網硬件設備,主要負責對企業需要數據統計,對要測量的物體進行測量和分析,將數據通過無線通信模塊進行傳輸;第二部分,企業服務器終端,其中包括windows服務程序、Microsoft Message Queue服務器和監控物聯網設備的客戶端。windows服務程序其功能是接受第一部分物聯網硬件設備發來的數據信息,并解析,將數據保存的企業服務器的數據庫中[7]。Microsoft Message Queue服務器用于將服務信息和監控物聯網設備的客戶端的信息進行通信。第三部分,消息代理服務器(Message Broker)/Web Server,消息代理服務器主要負責實現MQTT協議的各項功能,提供發布/訂閱管理功能、連接管理功能等,為客戶端提供發布/取消發布、訂閱/取消訂閱等服務。通過消息代理各模塊協調工作,形成了完整的發布/訂閱消息推送系統。Web Server主要負責手機客戶端的用戶驗證登錄以及Web網頁對信息管理的實現。第四部分移動終端和web網頁層。主要提供給用戶展示設備狀態和信息的平臺。
MQTT消息處理架構,如圖2所示。
用戶Tom(移動端/Web網頁端)訪問企業服務器,必須通過App的API服務器的登錄驗證,然后會獲取到企業服務器訂閱的factory topic信息。企業的服務器啟動時會自動訂閱factory topic。Tom只需通過MQTT代理服務器將控制信息publish到factory topic上,企業服務器就會接到Tom的控制信息。在Tom的控制信息里包含著Tom所訂閱的Tom topic信息,企業服務器會將此信息保存并將查詢結果publish到Tom的 topic,Tom的移動終端就會獲得信息,以此完成移動端的遠程通信[10]。
這里用戶和企業服務器是多對多的關系,即一個用戶可以向多個企業服務器查詢數據,企業服務器也可以同時服務多個用戶,向用戶返回數據。且在這樣的情況下,對于云服務器(MQTT代理服務器)的負載十分?。ㄒ驗橹皇寝D發數據,并沒有將數據進行處理),所需要的數據存儲空間小,大部分的計算負載和所有的測量數據存儲都分載在不同企業的服務器上,提高了通信效率,保證了數據的安全性,降低了對于云服務器的硬件成本。
3 ?系統流程
3.1 ?企業服務器終端實現
企業服務器終端主要用于接收、發送、解析和計算物聯網設備的控制、數據指令,以此來監控物聯網設備和儲存設備測量的信息[11]。主要分為四個模塊,模塊一,其功能利用設備無線模塊和計算機的串口接收和發送設備指令;模塊二,連接MQTT,訂閱企業的topic,對移動終端設備的遠程控制和查詢提供接口;模塊三,利用消息隊列(MSMQ)實現服務和windows客戶端程序進程之間的通信,通信內容是從物聯網設備接收到的指令代碼;模塊四,客戶端對從服務器中接收到的物聯網設備的指令代碼進行解析顯示,并進行控制和歷史信息的查詢工作。
主要流程分為三部分:
(1)當服務器啟動時,Windows服務程序將自動啟動,檢查設備串口設備、Internet網絡連接情況和數據庫連接情況。并開啟消息隊列服務,等待企業電腦端的客戶端指令。當檢查網絡連接正常的時候,服務程序會自動連接MQTT代理服務器,并訂閱以自己編號為id的話題(topic)。
(2)用戶打開企業電腦端的客戶端對設備進行操作時,服務程序會通過MSMQ消息隊列接受客戶端的指令[12],解析組裝成物聯網設備能夠識別的十六進制指令后,通過串口發送給設備。設備接收指令后進行測量或者其他設置參數的操作,將返回的信息傳回服務,服務通過串口接收十六進制指令根據通信協議進行解析,將數據保存到數據庫中用于客戶端和手機APP的查詢或者將指令直接通過MSMQ轉發給企業電腦端,用于實時顯示設備情況[8]。
(3)服務器訂閱自己的MQTT topic話題,向Internet開放控制和查詢設備的接口,用于解析手機和Web網頁發來的用戶控制指令。當服務接到移動終端用戶通過MQTT發送給自己的指令時,服務將自動開啟線程,對指令進行解析。分析出移動端的用戶topic和指令類型,按照指令的類型進行操作,并將返回結果組裝成JSON字符串,通過MQTT發布(publish)到移動終端用戶的topic中。
在通訊過程中,需要三種通訊協議。
協議一:設備和服務之間的通訊協議。
協議二:服務和windows客戶端之間利用消息隊列傳輸的通訊協議。
協議三:服務和移動終端之間利用MQTT傳輸的通訊協議。
3.2 ?消息代理服務器的實現
實現MQTT的代理服務器的工作,管理訂閱賬號,消息轉發等。同時提供手機和網站查詢和儲存用戶,企業的信息。通過網站來設置用戶的管理權限,實現一個用戶對應管理多個企業服務的關系。在手機端,用戶可以根據自己的id查詢到企業的服務訂閱的MQTT topic,以此來通過手機進行對企業設備的遠程控制。
3.3 ?手機端實現
手機客戶端主要提供給用戶登錄的驗證及自動登錄的實現,對物聯網設備的遠程監控和歷史數據的查詢。
主要分為三個模塊:
(1)登錄模塊,用戶登錄時輸入正確的用戶名和密碼,當服務器驗證通過后,會將該用戶的token發送給手機客戶端??蛻舳送ㄟ^React Native的AsyncStorage將token保存在手機中。當用戶下次開啟軟件時,將直接用token驗證用戶信息,不需要用戶重新輸入用戶名和密碼。
(2)MQTT通信和指令解析,登錄成功后,手機連接MQTT代理服務器,并訂閱以用戶id為topic的話題。同時獲取服務器保存的該用戶所管理的設備信息。當MQTT接收到發往這個topic的信息的時候,進行解析,得出數據信息在手機端進行展示。同時用戶發送控制設備信息時,將用戶、控制、設備、企業服務的話題(topic)信息和發送的數據信息組裝成JSON,publish給企業windows服務器訂閱的話題(topic),并設置callback函數,等企業服務器的待響應,響應成功后會將數據信息呈現到客戶端中。
(3)遠程控制和歷史查詢模塊,用戶選擇設備發送控制指令,手機App將用戶信息和指令信息封裝成JSON,通過MQTT發布到企業服務訂閱的topic。企業服務獲取指令解析出用戶信息,用戶信息中包含著手機訂閱的topic。服務執行完對設備的操作后將結果發布到手機訂閱的topic。
4 ?系統測試
本研究應用某物聯網系統取得良好成果,其測試物聯網設備為激光傳感器、步進電機等組成的測量設備,主要應用于立筒倉內部物料體積和重量測量[13],以及倉內溫濕度監控。通過本系統客戶端和手機端進行控制物聯網設備工作,收發設備的工作狀態,接收到設備采集的數據。測試結果為該系統傳輸效果可靠穩定,能適應復雜的傳輸情況,無數據丟失的現象。
5 ?結論
本文以MQTT協議為基礎,Windows程序開發為核心,遵照消息傳遞的過程,開發了一套物聯網消息傳輸系統,適用復雜條件下消息的收發,解決不同平臺之間消息協議的解析,利用多個協議之間的通信,實現了不同平臺間對設備的控制以及數據的接收,可利用在多種物聯網系統中,降低了數據丟失的概率,極大的提高了消息傳遞的穩定性。
參考文獻
[1] 李燕. 計算機監控系統中物聯網技術應用探究[J]. 軟件, 2018, 39(10): 220-223.
[2] 嚴新巧. 基于移動開發現狀探討React Native[J]. 電腦知識與技術, 2016, 12(32): 76-77+82.
[3] 王歡. 分布式移動性管理協議研究[J]. 軟件, 2015, 36(2): 80-85.
[4] Haripriya A. P.,Kulothungan K.. Secure-MQTT: an efficient fuzzy logic-based approach to detect DoS attack in MQTT protocol for internet of things[J]. EURASIP Journal on Wireless Communications and Networking, 2019, 2019(1).
[5] 耿云飛. 融合通信消息引擎的設計與實現[D]. 中國科學院研究生院(沈陽計算技術研究所), 2016.
[6] 張幼麟. 51單片機串口應用[J]. 內江科技, 2019, 40(10): 32+12.
[7] 孫毓蔓, 左小清, 蘇文豪. 基于ArcGIS Engine與C#.net的地塊合并功能的實現[J]. 軟件, 2018, 39(10): 150-155.
[8] 代鴻元. 基于WinForm的脈沖安防報警系統設計與實現[D]. 天津大學, 2017.
[9] 金昱東. 一種基于ReactNative的代碼壓縮與動態加載的實現方法[J]. 軟件, 2016, 37(02): 81-84.
[10] 明鳴. 以Windows服務為基礎的網口與串口通信設計淺析[J]. 中國新通信, 2018, 20(03):66.
[11] 陳星, 霍珊珊, 劉健. 物聯網信息系統安全測評服務模式的研究[J]. 軟件, 2016, 37(3): 09-15.
[12] 莫洪艷. 在.NET平臺利用MSMQ實現不同應用間的異步通訊[J]. 天津冶金, 2017(06): 46-48.
[13] 楊棟, 劉錚. 淺談激光測距技術對料堆盤庫的應用[J]. 衡器, 2016, 45(12): 15-18.