郭逸帆,王曉曄,呼子昊,林少崴
(天津理工大學(xué) 計算機科學(xué)與工程學(xué)院,天津300384)
物聯(lián)網(wǎng)是在原有互聯(lián)網(wǎng)的基礎(chǔ)上擴展和延伸而出的一個概念,從傳統(tǒng)的計算機互聯(lián)拓展到了物與物之間的互通互聯(lián),利用傳感器對外界信息進(jìn)行采集,通過網(wǎng)絡(luò)設(shè)備進(jìn)行數(shù)據(jù)傳輸與通信.為了解決當(dāng)前物聯(lián)網(wǎng)系統(tǒng)面臨的安全性問題,本文提出了一種基于MQTT協(xié)議的物聯(lián)網(wǎng)通信方案.第一部分提出了系統(tǒng)架構(gòu),第二部分簡述了MQTT協(xié)議的通信流程,第三部分對ESP8266進(jìn)行了介紹,第四部分對設(shè)備接入阿里云平臺進(jìn)行了說明,第五部分對系統(tǒng)模型進(jìn)行了測試和分析,第六部分進(jìn)行了總結(jié)并提出了進(jìn)一步的改進(jìn)方向.
為了能夠快速開發(fā),且方便系統(tǒng)的各個部分可以獨立進(jìn)行設(shè)計與測試,將整個物聯(lián)網(wǎng)系統(tǒng)分為如圖1所示的四層網(wǎng)絡(luò)架構(gòu).
最底層為客戶層(client)由物聯(lián)網(wǎng)體系的終端設(shè)備組成,包括各種單片機和傳感器,用于采集信息并執(zhí)行用戶下發(fā)的命令.與客戶層(client)緊密相連的為網(wǎng)關(guān)層(gateway),網(wǎng)關(guān)層(gateway)主要設(shè)備為WiFi路由器,還有一小部分是基于Zigbee或藍(lán)牙的網(wǎng)關(guān)設(shè)備.與傳統(tǒng)工業(yè)領(lǐng)域相比,智能生活應(yīng)用場景中網(wǎng)關(guān)設(shè)備的數(shù)量要少得多,而在工業(yè)領(lǐng)域中,網(wǎng)關(guān)層中存在著大量的邊緣計算.
云端層(cloud)用于集中處理業(yè)務(wù),是發(fā)送消息和數(shù)據(jù)的中繼站,也可以在此對數(shù)據(jù)進(jìn)行加工和存儲,本文主要涉及阿里云物聯(lián)網(wǎng)平臺以及個人服務(wù)器.應(yīng)用層(application)負(fù)責(zé)與用戶的交互,它可以是計算機的Web瀏覽器、手機應(yīng)用程序,或是帶有屏幕的智能顯示設(shè)備,也可以是無屏幕設(shè)備,作為顯示數(shù)據(jù)與下發(fā)命令的終端.
圖1系統(tǒng)架構(gòu)Fig.1 System architecture diagram
其中與云端層物聯(lián)網(wǎng)平臺直連的設(shè)備都通過MQTT協(xié)議進(jìn)行通信,實現(xiàn)了整個系統(tǒng)的數(shù)據(jù)流轉(zhuǎn),客戶層硬件部分利用ESP8266的串口進(jìn)行通信,再由ESP8266通過MQTT協(xié)議與云平臺間接通信.
MQTT(消息隊列遙測傳輸)是ISO標(biāo)準(zhǔn)(ISO/IEC PRF 20922)下基于客戶端/服務(wù)器的消息發(fā)布/訂閱傳輸協(xié)議,該協(xié)議可以直接運行在TCP/IP協(xié)議棧上[1],能夠提供給網(wǎng)絡(luò)使用者一個實時可靠的在線消息發(fā)送服務(wù),優(yōu)點是代碼簡單并且僅占有很少的網(wǎng)絡(luò)帶寬,適合在低性能的遠(yuǎn)程設(shè)備以及網(wǎng)絡(luò)條件惡劣的環(huán)境中使用,它具有輕量級、簡單性、開放性和易實現(xiàn)性的特點[2],現(xiàn)已成為IoT通信的標(biāo)準(zhǔn).
MQTT是一個占用帶寬低、開銷低的即時通信協(xié)議,其Publish-Subscribe模式非常靈活,易于使用.如圖2所示,其中Client指的是物聯(lián)網(wǎng)設(shè)備,包括手機、個人服務(wù)器以及本系統(tǒng)所使用的ESP8266.Client發(fā)布信息,而其他Client可以訂閱該信息.Broker位于消息訂閱者和發(fā)布者之間,相當(dāng)于消息的管理方,負(fù)責(zé)消息的流轉(zhuǎn),能夠接收Client發(fā)布的應(yīng)用信息,并將應(yīng)用消息轉(zhuǎn)發(fā)給訂閱相應(yīng)主題(Topic)的客戶[3].本方案中阿里云物聯(lián)網(wǎng)平臺充當(dāng)這一角色.Server本質(zhì)上相當(dāng)于一個Client,不同之處在于能夠處理業(yè)務(wù)邏輯.
圖2 MQTT通信流程Fig.2 MQTT communication process
例如,溫度傳感器作為Client1,將采集到溫度數(shù)據(jù)通過MQTT發(fā)送到Broker端的Topic1下,Broker端會將溫度數(shù)據(jù)轉(zhuǎn)發(fā)給訂閱Topic1的Sever端.Server端會根據(jù)溫度判斷是否開啟空調(diào),通過MQTT將指令信息發(fā)送到代理端的Topic2下,再由訂閱Topic2的應(yīng)用程序獲得數(shù)據(jù)后執(zhí)行指令進(jìn)而控制設(shè)備[4].
ESP8266是一款支持高性能無線處理器的SoC(系統(tǒng)級芯片),它將業(yè)界技術(shù)領(lǐng)先的超低功耗32位的微處理器(tensilical106)與16位的精簡微處理器模式相結(jié)合,支持兩個主頻80 mhz和160 mhz,集成了WiFi,板載天線.同時支持tensieee802.11b/g/n協(xié)議和TCP/IP全協(xié)議棧[5].
ESP8266的主要功能包括:串口傳輸、脈沖寬度調(diào)制、GPIO控制等.串口傳輸可將數(shù)據(jù)進(jìn)行可靠傳輸,傳輸速率最高可達(dá)460 800 bps.脈沖寬度調(diào)制可進(jìn)行電壓調(diào)節(jié)、電機調(diào)速與屏幕亮度調(diào)節(jié)等.GPIO控制包括開關(guān)控制與采集數(shù)字信號等.
使用ESP8266有AT指令和SDK編程兩種主要方法.AT指令:使用附加的單片機,通過串口發(fā)送AT指令(串口數(shù)據(jù))到ESP8266,ESP8266則會執(zhí)行相應(yīng)功能,如連接WIFI、發(fā)送網(wǎng)絡(luò)數(shù)據(jù)等.SDK編程:ESP8266本身就集成了微控制器以及片上SRAM,可以通過GPIO等外設(shè)連接傳感器和其他設(shè)備.可以將ESP8266獨立應(yīng)用,程序放在外部Flash中,ESP8266讀取外部Flash中的程序,執(zhí)行相應(yīng)功能.本方案使用SDK編程的方式開發(fā),優(yōu)點是不需要額外的單片機,節(jié)約了成本.
ESP8266具有性能穩(wěn)定、高度集成、低功耗和高性能處理器的優(yōu)點.
性能穩(wěn)定:ESP8266的工作溫度范圍大,且能夠保持穩(wěn)定的性能,能適應(yīng)各種操作環(huán)境.
加快推進(jìn)國際醫(yī)療旅游產(chǎn)業(yè)發(fā)展,是國家賦予海南的重要使命,海南責(zé)無旁貸。泰國、印度等國家醫(yī)療旅游產(chǎn)業(yè)發(fā)展的經(jīng)驗,為海南提供了一定的借鑒和參考。
高度集成:ESP8266中集成了低噪放大器、標(biāo)準(zhǔn)的數(shù)字放大器外設(shè)接口、功率放大器、過濾器和其他電源管理模塊等,PCB占用的空間低,外圍集成電路極少.
低功耗:ESP8266多應(yīng)用于可穿戴電子設(shè)備、移動電子設(shè)備和物聯(lián)網(wǎng)產(chǎn)品,采用了多項專有技術(shù)實現(xiàn)超低功耗.ESP8266的節(jié)電模式非常適合各種小功率的應(yīng)用場合.
高性能處理器:ESP8266具有完整的TCP/IP協(xié)議棧和主控機功能的芯片,內(nèi)置一個Tensilica的32-bit RISC處理器),其時鐘速度可達(dá)160 MHz,最多可使用16 MB的外部SPI閃存,將80%的處理能力留給應(yīng)用程序編程和開發(fā).
阿里云物聯(lián)網(wǎng)平臺為設(shè)備提供了安全可靠的連接通信能力,向下連接海量設(shè)備,支撐設(shè)備數(shù)據(jù)采集上云;向上提供云端API,服務(wù)端通過調(diào)用云端API將指令下發(fā)至設(shè)備端,實現(xiàn)遠(yuǎn)程控制.物聯(lián)網(wǎng)平臺也提供了其他增值能力,如設(shè)備管理、規(guī)則引擎等,為各類IoT場景和行業(yè)開發(fā)者賦能.
阿里云物聯(lián)網(wǎng)平臺的主要功能包括接入設(shè)備、管理設(shè)備和規(guī)則引擎.
接入設(shè)備:物聯(lián)網(wǎng)平臺支持大量設(shè)備接入云,設(shè)備通過IoT Hub與云端進(jìn)行穩(wěn)定、可靠的雙向通信.CoAP、HTTP和MQTT等多種協(xié)議的SDK不僅滿足了長連接的數(shù)據(jù)及時性和安全性要求,而且也充分滿足了短連接的低功耗和可靠性要求.
管理設(shè)備:物聯(lián)網(wǎng)平臺提供了設(shè)備生命周期的管控功能,支持設(shè)備對接、在線調(diào)試、屬性定義、設(shè)備分批管理、數(shù)據(jù)分析、遠(yuǎn)程配置、遠(yuǎn)程維護等功能.
規(guī)則引擎:物聯(lián)網(wǎng)平臺根據(jù)用戶配置的數(shù)據(jù)流轉(zhuǎn)規(guī)則,將指定Topic消息的指定字段流轉(zhuǎn)到目的地,進(jìn)行存儲和計算處理.通過配置簡單規(guī)則,將設(shè)備數(shù)據(jù)無縫流轉(zhuǎn)至其他設(shè)備,實現(xiàn)設(shè)備聯(lián)動.
4.2.1 使用手機與服務(wù)器接入云平臺
本系統(tǒng)利用物聯(lián)網(wǎng)平臺提供的設(shè)備端SDK進(jìn)行開發(fā),其中封裝了設(shè)備端與物聯(lián)網(wǎng)平臺的交互協(xié)議,如圖3所示.設(shè)備開發(fā)完成后,接入物聯(lián)網(wǎng)平臺進(jìn)行設(shè)備激活,平臺將顯示設(shè)備在線狀態(tài).在實際開發(fā)中,根據(jù)開發(fā)時使用的語言、平臺,選用合適的設(shè)備端SDK,包含:C SDK、Android SDK、NodeJS SDK、Java SDK、Python SDK、iOS SDK.本系統(tǒng)中,手機端與服務(wù)器同時采用了Java SDK進(jìn)行開發(fā).
圖3阿里云物聯(lián)網(wǎng)平臺SDK開發(fā)Fig.3 SDK development in Alibaba IoT Cloud Platform
如果嵌入式環(huán)境復(fù)雜,已提供的設(shè)備端SDK不能滿足需求,可以封裝Alink協(xié)議數(shù)據(jù),實現(xiàn)設(shè)備與物聯(lián)網(wǎng)平臺的通訊.Alink協(xié)議接入設(shè)備有兩種方式,一機一密與一型一密.本系統(tǒng)采用一機一密的方式上線,需要提前將設(shè)備證書燒錄到硬件中.
4.2.2 使用ESP8266接入云平臺
本系統(tǒng)采用MCU+模組的組合接入云平臺,將SDK移植到MCU上運行,由于阿里云的SDK需要用戶自己實現(xiàn)硬件控制的邏輯,為了節(jié)省時間成本,選擇ESP8266自有的SDK連接阿里云,模組用于發(fā)起與阿里云物聯(lián)網(wǎng)平臺的連接,如圖4所示.
圖4 MCU+模組接入云平臺Fig.4 MCU+modules access cloud platform
阿里云物聯(lián)網(wǎng)平臺下的設(shè)備各有一組參數(shù).ProductKey是阿里云IoT物聯(lián)網(wǎng)平臺上產(chǎn)品的唯一標(biāo)識,也可理解為產(chǎn)品型號,一個產(chǎn)品下可以有多種類型的設(shè)備.DeviceName是設(shè)備型號,DeviceName是設(shè)備在產(chǎn)品范圍內(nèi)的唯一標(biāo)識;屬于不同產(chǎn)品的設(shè)備的DeviceName可以相同.DeviceSecret是每個設(shè)備用于身份認(rèn)證的的密碼.這組參數(shù)在整個物聯(lián)網(wǎng)平臺內(nèi)具有唯一性,對應(yīng)于現(xiàn)實中的具體設(shè)備.云平臺解析設(shè)備的上線請求,獲取設(shè)備的三個參數(shù)后進(jìn)行判斷,符合物聯(lián)網(wǎng)平臺參數(shù)的設(shè)備會得到接入的許可[6].
為了測試本方案的數(shù)據(jù)流轉(zhuǎn)情況,將Java web項目部署到個人服務(wù)器,作為MQTT的客戶端,手機應(yīng)用程序作為一個客戶端上云.
對于網(wǎng)頁編輯,本系統(tǒng)選擇使用Node-RED進(jìn)函數(shù)、用戶任務(wù)、中斷服務(wù)程序和回調(diào)函數(shù).為了實現(xiàn)在特定條件下觸發(fā)相應(yīng)功能函數(shù)的目的,SDK中多采用回調(diào)機制與軟硬件定時器來實現(xiàn)各功能事件的嵌套[8].本系統(tǒng)設(shè)計具體的程序流程如圖7所示.行界面開發(fā).Node-RED提供了一個基于瀏覽器的流編輯器,利用面板中的各類節(jié)點將程序進(jìn)行邏輯串聯(lián),實現(xiàn)基本的交互功能,并通過Node-RED提供的MQTT相關(guān)邏輯控件,連接MQTT代理進(jìn)行消息的發(fā)布與訂閱,web界面如圖5所示.
圖5 Web界面Fig.5 Web interface
由于射頻性能的需求,搭建ESP8266外圍硬件電路需要四層版/射頻的設(shè)計.在沒有專業(yè)射頻儀器的情況下,設(shè)計的ESP8266電路的射頻性能不能保證,有可能造成ESP8266頻繁掉線等不利影響.本系統(tǒng)采用ESP8266模組ESP-12F[7]進(jìn)行開發(fā),ESP-12F模組與外圍電路構(gòu)成最小系統(tǒng)如圖6所示,通過串口燒寫程序.
對于程序開發(fā),本系統(tǒng)采用ESP8266的Non-OS SDK進(jìn)行開發(fā).Non-OS使用四種類型的函數(shù):應(yīng)用
圖6 ESP-12F最小系統(tǒng)原理圖Fig.6 Schematic diagram of esP-12F minimum system
本系統(tǒng)所實現(xiàn)的模型數(shù)據(jù)流轉(zhuǎn)主要有兩個方向.
上行數(shù)據(jù):DHT11測量溫濕度的數(shù)據(jù)后,由ESP8266發(fā)布給云平臺,云平臺根據(jù)規(guī)則引擎的數(shù)據(jù)流轉(zhuǎn)規(guī)則,將數(shù)據(jù)下發(fā)web客戶端進(jìn)行遠(yuǎn)程可視化監(jiān)測.
圖7硬件代碼流程Fig.7 Hardware code flow
下行數(shù)據(jù):用戶通過web界面下達(dá)控制指令給云平臺,如電器開關(guān)、燈光的控制等,云平臺同樣根據(jù)規(guī)則引擎將數(shù)據(jù)轉(zhuǎn)發(fā)給ESP8266,由ESP8266控制外圍電路執(zhí)行指令內(nèi)容.
其中阿里云物聯(lián)網(wǎng)平臺負(fù)責(zé)終端設(shè)備的上云,并根據(jù)規(guī)則引擎輕松管理設(shè)備間數(shù)據(jù)的流轉(zhuǎn).云平臺同時可以進(jìn)行對數(shù)據(jù)進(jìn)行統(tǒng)計與分析,使中間數(shù)據(jù)透明化,方便調(diào)試.整個模型采用MQTT協(xié)議進(jìn)行通信,因此終端設(shè)備上封裝的MQTT協(xié)議數(shù)據(jù)處理函數(shù)用于解析從云平臺接收到的JSON數(shù)據(jù).阿里云物聯(lián)網(wǎng)平臺查看上行數(shù)據(jù)與下行數(shù)據(jù)的轉(zhuǎn)發(fā)情況,如圖8所示.
模擬測試表明,本文提出的設(shè)計方案結(jié)構(gòu)簡單,降低了云端通信的難度,縮短了開發(fā)周期;使用MQTT協(xié)議解除了應(yīng)用程序耦合,各部分可以單獨調(diào)試;與阿里云平臺對接后,由云平臺接管設(shè)備,可以對設(shè)備進(jìn)行批量開發(fā)與管理,也有效保證了設(shè)備和云端數(shù)據(jù)的安全,不僅為工業(yè)設(shè)備上云提供了便利,更為數(shù)據(jù)向云平臺遷移及大數(shù)據(jù)分析奠定了基礎(chǔ),而這也是本方案下一步改進(jìn)的方向.
圖8云平臺轉(zhuǎn)發(fā)數(shù)據(jù)情況Fig.8 Data forwarding of cloud platform