文 /龔成瑩 常瑋 何輝 韓瑋 石全民 吳國杰
提供物聯(lián)網(wǎng)節(jié)點(diǎn)數(shù)據(jù)的接入、存儲(chǔ)、展示、查詢功能,為IPv6物聯(lián)網(wǎng)節(jié)點(diǎn)的多用戶管理、控制和監(jiān)測(cè)提供了一個(gè)可借鑒的解決方案。
近年來,物聯(lián)網(wǎng)相關(guān)的創(chuàng)新產(chǎn)品層出不窮,如智能插座、智能手表、智能音響等,同時(shí),物聯(lián)網(wǎng)也是大學(xué)生進(jìn)行創(chuàng)新技術(shù)設(shè)計(jì)開發(fā)的重要領(lǐng)域。物聯(lián)網(wǎng)的高速發(fā)展使得接入的設(shè)備越來越多,網(wǎng)絡(luò)的地址需求呈指數(shù)級(jí)增長,地址不足已經(jīng)成為影響其發(fā)展的瓶頸之一,將物聯(lián)網(wǎng)與IPv6網(wǎng)絡(luò)相結(jié)合,是解決該問題的重要手段。
在校大學(xué)生在進(jìn)行物聯(lián)網(wǎng)技術(shù)類的創(chuàng)新作品設(shè)計(jì)時(shí)[1],經(jīng)常會(huì)遇到測(cè)試數(shù)據(jù)存儲(chǔ)難、查詢不便的問題。針對(duì)此問題,設(shè)計(jì)基于IPv6網(wǎng)絡(luò)和HTTP協(xié)議的物聯(lián)網(wǎng)數(shù)據(jù)Web平臺(tái),旨在提供物聯(lián)網(wǎng)節(jié)點(diǎn)數(shù)據(jù)的接入、存儲(chǔ)、展示、查詢功能,實(shí)現(xiàn)了多用戶數(shù)據(jù)接入,多節(jié)點(diǎn)數(shù)據(jù)并發(fā)傳輸,并提出一種利用HTTP Header驗(yàn)證的物聯(lián)網(wǎng)節(jié)點(diǎn)接入密鑰機(jī)制。平臺(tái)的實(shí)現(xiàn)為IPv6物聯(lián)網(wǎng)節(jié)點(diǎn)的多用戶管理、控制和監(jiān)測(cè)提供了一個(gè)可借鑒的解決方案。
圖1是一種典型的IPv6物聯(lián)網(wǎng)結(jié)構(gòu),其無線傳感節(jié)點(diǎn)采集的數(shù)據(jù)經(jīng)由物聯(lián)網(wǎng)傳送至網(wǎng)關(guān)節(jié)點(diǎn),再通過網(wǎng)關(guān)節(jié)點(diǎn)接入IPv6網(wǎng)絡(luò),數(shù)據(jù)最終上傳至數(shù)據(jù)平臺(tái)。其中,網(wǎng)關(guān)節(jié)點(diǎn)一般是帶有簡單操作的IPv6嵌入式設(shè)備[2]。
圖1 典型的IPv6物聯(lián)網(wǎng)結(jié)構(gòu)
設(shè)計(jì)IPv6物聯(lián)網(wǎng)數(shù)據(jù)平臺(tái),主要考慮三方面的因素。
1.傳感數(shù)據(jù)接入
數(shù)據(jù)從網(wǎng)關(guān)節(jié)點(diǎn)經(jīng)由IPv6網(wǎng)絡(luò)上傳至服務(wù)器,軟件一般基于TCP或UDP協(xié)議開發(fā),考慮到校園網(wǎng)IPv6帶寬足夠滿足需求,為了適配不同類型的網(wǎng)關(guān)節(jié)點(diǎn)設(shè)備(如STM32、Arduino、ESP32、CC2538、樹莓派等主流的嵌入式硬件),平臺(tái)在應(yīng)用層采用HTTP協(xié)議,并實(shí)現(xiàn)相應(yīng)的編程接口。
2.平臺(tái)功能
如圖2所示,將平臺(tái)的用戶分為兩類:傳感節(jié)點(diǎn)所屬的設(shè)備用戶(普通用戶)和管理員,除了數(shù)據(jù)接入功能(程序開發(fā)接口)之外,應(yīng)面向傳感節(jié)點(diǎn)所屬用戶提供友好的注冊(cè)、登錄、節(jié)點(diǎn)設(shè)備管理、傳感數(shù)據(jù)曲線繪制、數(shù)據(jù)管理等功能。
圖2 IPv6物聯(lián)網(wǎng)數(shù)據(jù)平臺(tái)功能
3.技術(shù)路線選擇
綜合考慮系統(tǒng)的易用性和后期的可維護(hù)性等因素后,選擇開源Linux、Apache、PHP、MySQL這一Web服務(wù)器組合作為底層架構(gòu),通過程序設(shè)計(jì)實(shí)現(xiàn)數(shù)據(jù)接入、管理等功能。
傳感數(shù)據(jù)接入服務(wù)器端的方法、用戶設(shè)備的安全秘鑰機(jī)制、數(shù)據(jù)的展示是平臺(tái)的核心功能。
由于平臺(tái)基于IPv6網(wǎng)絡(luò)的特點(diǎn),嵌入式網(wǎng)關(guān)節(jié)點(diǎn)與服務(wù)器(上位機(jī))應(yīng)使用網(wǎng)絡(luò)通訊方式,并選擇合理、便捷的協(xié)議,在服務(wù)器端設(shè)計(jì)程序接口,以接入物聯(lián)網(wǎng)傳感數(shù)據(jù)。
1.網(wǎng)絡(luò)通信方式選擇
傳統(tǒng)的嵌入式系統(tǒng)網(wǎng)絡(luò)通信多使用Socket通信,Socket是應(yīng)用層和傳輸層之間的一個(gè)抽象層,將TCP/IP復(fù)雜的操作抽象為接口函數(shù)供應(yīng)用層調(diào)用,其本質(zhì)是一種編程接口。Socket作為一種特殊的文件,使用“Open→Write/Read→Close”操作過程實(shí)現(xiàn)對(duì)應(yīng)的函數(shù)接口,具有較高的通信效率,但不易實(shí)現(xiàn)標(biāo)準(zhǔn)化的數(shù)據(jù)接口,對(duì)下位機(jī)嵌入式系統(tǒng)的程序開發(fā)要求較高。
隨著各地IPv6網(wǎng)絡(luò)帶寬的不斷擴(kuò)容,加之物聯(lián)網(wǎng)數(shù)據(jù)具有流量平穩(wěn)、格式固定的特點(diǎn),主流的物聯(lián)網(wǎng)平臺(tái)都選擇了更易于在網(wǎng)關(guān)節(jié)點(diǎn)上實(shí)現(xiàn)標(biāo)準(zhǔn)化數(shù)據(jù)接口的應(yīng)用層HTTP協(xié)議(或輕量級(jí)的HTTP協(xié)議)。
2.HTTP協(xié)議報(bào)文結(jié)構(gòu)
HTTP是一種基于請(qǐng)求(Request)與響應(yīng)(Response)方式、無狀態(tài)的應(yīng)用層協(xié)議。如圖3所示,HTTP協(xié)議的報(bào)文由報(bào)文首部和報(bào)文主體組成,報(bào)文首部包含服務(wù)器或者客戶端需要處理的請(qǐng)求或者響應(yīng)的內(nèi)容及其屬性,報(bào)文主體為需要發(fā)送的數(shù)據(jù)[3]。
圖3 HTTP請(qǐng)求報(bào)文
圖3顯示了使用平臺(tái)的物聯(lián)網(wǎng)網(wǎng)關(guān)節(jié)點(diǎn)作為HTTP協(xié)議的客戶端向服務(wù)器發(fā)送的報(bào)文結(jié)構(gòu)。其中服務(wù)器端的地址為“240e:635:220::5beb”,端口號(hào)為“8080”,采用POST方式;在HTTP協(xié)議的Header頭部自定義“WSN-Key”字段作為用戶的驗(yàn)證密鑰;物聯(lián)網(wǎng)節(jié)點(diǎn)采集的數(shù)據(jù)使用JSON格式[4]作為報(bào)文主體發(fā)送至服務(wù)器,JSON數(shù)據(jù)包括節(jié)點(diǎn)設(shè)備ID和各傳感器的值對(duì),例如,{"id":"12","temp":"23.6","humi":"45"}表示節(jié)點(diǎn)設(shè)備ID為12,節(jié)點(diǎn)上溫度傳感器采集的值為23.6℃、濕度值為45%RH。
3.服務(wù)器端接口設(shè)計(jì)
服務(wù)器的程序接口實(shí)際上就是其對(duì)HTTP請(qǐng)求報(bào)文的處理過程,程序流程如圖4所示。服務(wù)器在接收到客戶端的請(qǐng)求后,在Header首部行ASCII碼中提取出自定義的密鑰參數(shù),在報(bào)文主體ASCII碼中提取出JSON值對(duì);然后根據(jù)設(shè)備ID查詢Header中的密鑰是否與數(shù)據(jù)庫中存儲(chǔ)的用戶密鑰匹配,若匹配,則將數(shù)據(jù)存入相應(yīng)的數(shù)據(jù)表中供平臺(tái)Web端使用,從而實(shí)現(xiàn)物聯(lián)網(wǎng)數(shù)據(jù)的接入。
圖4 服務(wù)器端程序流程
關(guān)鍵PHP代碼如下:
前文已經(jīng)提到在HTTP的首部行中加入了用戶密鑰,其作用是驗(yàn)證接入平臺(tái)的物聯(lián)網(wǎng)設(shè)備的合法性。如圖5所示,用戶基于密鑰機(jī)制使用平臺(tái)的步驟包括三方面。
圖5 密鑰使用步驟
1.用戶與節(jié)點(diǎn)設(shè)備注冊(cè)
在平臺(tái)Web端注冊(cè)賬號(hào),系統(tǒng)自動(dòng)為其分配專屬密鑰,用戶可查看密鑰、添加維護(hù)物聯(lián)網(wǎng)節(jié)點(diǎn)設(shè)備信息。
2.下位機(jī)開發(fā)
開發(fā)物聯(lián)網(wǎng)硬件節(jié)點(diǎn),將系統(tǒng)生成的密鑰通過程序固化到嵌入式網(wǎng)關(guān)節(jié)點(diǎn)中。
3.數(shù)據(jù)管理
在物聯(lián)網(wǎng)數(shù)據(jù)平臺(tái)上觀測(cè)節(jié)點(diǎn)端通過HTTP協(xié)議上傳的原始數(shù)據(jù)、數(shù)據(jù)實(shí)時(shí)曲線,并進(jìn)行相關(guān)的數(shù)據(jù)管理。
通過“密鑰+設(shè)備ID”的機(jī)制[5]進(jìn)行數(shù)據(jù)接入平臺(tái)的驗(yàn)證,從而保證了節(jié)點(diǎn)數(shù)據(jù)的真實(shí)性和節(jié)點(diǎn)的可維護(hù)性。包含密鑰的HTTP請(qǐng)求與響應(yīng)的驗(yàn)證結(jié)果如圖6所示,服務(wù)器端能夠正確解析POST請(qǐng)求報(bào)文,驗(yàn)證密鑰后,將數(shù)據(jù)成功寫入數(shù)據(jù)庫。
圖6 密鑰機(jī)制協(xié)議分析
為了便于用戶觀測(cè)節(jié)點(diǎn)所上傳數(shù)據(jù)的變化趨勢(shì),基于Echart組件和AJAX設(shè)計(jì)實(shí)時(shí)曲線功能[6],基本思路如圖7所示。
圖7 AJAX實(shí)時(shí)曲線
1.程序GetData.php根據(jù)用戶ID和節(jié)點(diǎn)設(shè)備ID讀取存儲(chǔ)在數(shù)據(jù)庫中的傳感器數(shù)據(jù),并將數(shù)據(jù)處理成JSON格式。
2.程序Chart.php利用JQuery異步定時(shí)調(diào)用GetData.php,由其傳送最新的數(shù)據(jù)。
3.Echart前端圖表的曲線組件解析JSON序列中的值對(duì),將實(shí)時(shí)曲線顯示在頁面Chart.php上。
在物聯(lián)網(wǎng)系統(tǒng)中,網(wǎng)關(guān)節(jié)點(diǎn)負(fù)責(zé)傳感節(jié)點(diǎn)的數(shù)據(jù)匯聚、向IPv6網(wǎng)絡(luò)的數(shù)據(jù)傳輸、物聯(lián)網(wǎng)網(wǎng)絡(luò)與TCP/IP網(wǎng)絡(luò)的協(xié)議轉(zhuǎn)換,起到了承上啟下的作用。因此,節(jié)點(diǎn)設(shè)備端的重點(diǎn)是網(wǎng)關(guān)節(jié)點(diǎn)(圖1)。
擔(dān)任網(wǎng)關(guān)節(jié)點(diǎn)的設(shè)備通常是嵌入式硬 件[7], 如 STM32、Arduino、ESP32、CC2538、樹莓派等,下面以最常見的樹莓派和STM32微控制器為例說明網(wǎng)關(guān)節(jié)點(diǎn)如何與平臺(tái)接口適配。
使用樹莓派(Linux操作系統(tǒng))作為物聯(lián)網(wǎng)網(wǎng)關(guān)的優(yōu)點(diǎn)是可以充分利用Python語言語法簡潔的特點(diǎn),代碼及說明如下:
基于ARM內(nèi)核的STM32系列微控制器由于其優(yōu)越的性能,已發(fā)展為當(dāng)前最主流的嵌入式硬件。STM32微控制器作為網(wǎng)關(guān)節(jié)點(diǎn)的核心是支持TCP/IP網(wǎng)絡(luò)協(xié)議。目前,無論是ST公司官方的CUBE還是ARM的MDK中均已集成輕量級(jí)的TCP/IP協(xié)議棧LwIP,下例C語言演示了利用LwIP的Socket函數(shù)上傳傳感數(shù)據(jù)的方法。
通過上面的兩段典型程序可以看出,無論是何種嵌入式設(shè)備,網(wǎng)關(guān)節(jié)點(diǎn)適配平臺(tái)數(shù)據(jù)接口的思路均為:構(gòu)造傳感數(shù)據(jù)JSON序列格式;構(gòu)造標(biāo)準(zhǔn)的HTTP POST請(qǐng)求協(xié)議格式;發(fā)送HTTP POST請(qǐng)求。
該思路可以應(yīng)用到其它嵌入式硬件網(wǎng)關(guān)上。
下一代互聯(lián)網(wǎng)IPv6已經(jīng)成為大學(xué)生技術(shù)創(chuàng)新開發(fā)的重要領(lǐng)域,本文針對(duì)校園網(wǎng)上缺乏相關(guān)數(shù)據(jù)存儲(chǔ)和展示平臺(tái)的問題,設(shè)計(jì)并實(shí)現(xiàn)了一種基于Web的IPv6物聯(lián)網(wǎng)數(shù)據(jù)平臺(tái);提出了一種基于密鑰機(jī)制的設(shè)備驗(yàn)證方案,利用HTTP協(xié)議的POST請(qǐng)求設(shè)計(jì)標(biāo)準(zhǔn)的傳感設(shè)備接入程序接口;實(shí)現(xiàn)了AJAX數(shù)據(jù)實(shí)時(shí)展示、數(shù)據(jù)維護(hù)、多用戶、POST/CURL多種方式數(shù)據(jù)傳輸?shù)裙δ堋?/p>
同時(shí),本文對(duì)平臺(tái)服務(wù)器端的核心功能進(jìn)行了詳細(xì)的設(shè)計(jì)與實(shí)現(xiàn),以樹莓派和STM32微控制器為例實(shí)現(xiàn)網(wǎng)關(guān)節(jié)點(diǎn)的通用演示代碼。下一步,計(jì)劃利用WebSocket技術(shù)改進(jìn)數(shù)據(jù)接入方式,以實(shí)現(xiàn)物聯(lián)網(wǎng)數(shù)據(jù)的高速接入。
目前,平臺(tái)已面向蘭州工業(yè)學(xué)院校園網(wǎng)提供服務(wù),并逐漸成為電子信息工程、網(wǎng)絡(luò)工程、物聯(lián)網(wǎng)工程等專業(yè)的學(xué)生的重要?jiǎng)?chuàng)新實(shí)踐平臺(tái)。