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