文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2015)06-0154-03
0 引言
近年來(lái),呼倫湖流域生態(tài)面臨著嚴(yán)峻的挑戰(zhàn),水域污染加重、湖底淤積、生物多樣性下降、濕地萎縮等問(wèn)題日益突出[1]。目前,呼倫湖流域環(huán)境監(jiān)測(cè)系統(tǒng)的信息化建設(shè)還處于起步階段,監(jiān)測(cè)點(diǎn)不足、基礎(chǔ)數(shù)據(jù)不完善、數(shù)據(jù)采集系統(tǒng)自動(dòng)化程度較低、監(jiān)測(cè)數(shù)據(jù)不能通過(guò)網(wǎng)絡(luò)共享等問(wèn)題使得政府部門很難及時(shí)有效地做出應(yīng)對(duì)措施。同時(shí),由于各大廠商的技術(shù)缺乏兼容性,很難將不同的協(xié)議兼容使用。在這種背景下,本文設(shè)計(jì)了基于CoAP協(xié)議的數(shù)據(jù)采集網(wǎng)關(guān),對(duì)多個(gè)監(jiān)測(cè)點(diǎn)的傳感器數(shù)據(jù)進(jìn)行CoAP數(shù)據(jù)格式轉(zhuǎn)換,上傳遠(yuǎn)程數(shù)據(jù)庫(kù),積累生態(tài)環(huán)境大數(shù)據(jù),為政府決策提供支持。
1 系統(tǒng)概述
基于RT-Thread的CoAP協(xié)議網(wǎng)關(guān)系統(tǒng)是在傳感器節(jié)點(diǎn)數(shù)據(jù)采集基礎(chǔ)上,對(duì)多個(gè)傳感器節(jié)點(diǎn)的數(shù)據(jù)進(jìn)行CoAP數(shù)據(jù)格式轉(zhuǎn)換,并與遠(yuǎn)程數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)交互,實(shí)現(xiàn)環(huán)境監(jiān)測(cè)數(shù)據(jù)網(wǎng)絡(luò)共享的效果[2]。整體設(shè)計(jì)框圖如圖1所示。
2 硬件設(shè)計(jì)
硬件設(shè)計(jì)框架圖如圖2所示。
傳感器節(jié)點(diǎn)選擇ST公司出產(chǎn)的增強(qiáng)型系列微控制器STM32F103RBT6作為主控制器[3],選擇DALLAS半導(dǎo)體公司出產(chǎn)的1-Wire單總線數(shù)字溫度計(jì)作為環(huán)境溫度采集設(shè)備,選擇I2C標(biāo)準(zhǔn)通信接口的16位數(shù)字輸出型環(huán)境光強(qiáng)度模塊BH1750FVI作為光照強(qiáng)度采集設(shè)備。
CoAP網(wǎng)關(guān)節(jié)點(diǎn)選擇ST公司出產(chǎn)的高性能微控制芯片STM32F407ZGT6作為主控制器,該控制器具有符合IEEE 1588 v2標(biāo)準(zhǔn)要求的以太網(wǎng)MAC 10/100[4],同時(shí)提供了先進(jìn)的外設(shè)和標(biāo)準(zhǔn)的通訊接口;選擇體積小、功耗低、全能型的以太網(wǎng)收發(fā)器LAN8720A作為以太網(wǎng)PHY。
串口轉(zhuǎn)ZigBee模塊DRF1605H作為傳感器節(jié)點(diǎn)與CoAP網(wǎng)關(guān)節(jié)點(diǎn)之間數(shù)據(jù)交互的橋梁。該模塊基于CC2530F256芯片,運(yùn)行ZigBee2007/PRO協(xié)議,具有ZigBee協(xié)議的全部特點(diǎn)以及上電自動(dòng)組網(wǎng)的特色。在傳感器節(jié)點(diǎn)中,該模塊被設(shè)置成Router節(jié)點(diǎn)使用;在CoAP網(wǎng)關(guān)節(jié)點(diǎn)中,該模塊被設(shè)置成Coordinator節(jié)點(diǎn)使用。
3 CoAP協(xié)議原理及實(shí)現(xiàn)
CoAP協(xié)議是為物聯(lián)網(wǎng)中資源受限設(shè)備制定的應(yīng)用層協(xié)議[5]。它是一種面向網(wǎng)絡(luò)的協(xié)議,采用了與HTTP類似的特性,核心內(nèi)容為資源抽象、REST式交互及可擴(kuò)展的頭選型等。客戶端應(yīng)用程序通過(guò)URI標(biāo)識(shí)來(lái)獲取服務(wù)器上的資源,對(duì)資源可以進(jìn)行GET、PUT、POST和DELETE操作。CoAP具有報(bào)頭壓縮、UDP傳輸、支持資源發(fā)現(xiàn)、支持緩存、異步通信等特點(diǎn)。CoAP協(xié)議的數(shù)據(jù)報(bào)格式如圖3所示。
CoAP包含一個(gè)緊湊的二進(jìn)制報(bào)頭以及擴(kuò)展報(bào)頭?;緢?bào)頭只有短短4 B,后面緊跟著擴(kuò)展選型和有效負(fù)載。報(bào)頭各個(gè)部分字段的含義如下:Ver表示CoAP協(xié)議的版本號(hào),默認(rèn)情況下置1;T表示報(bào)文的類型:CON類型、NON類型、RST類型、ACK類型;TKL表示選型Token所占的字節(jié)數(shù);Code表示消息的類型:請(qǐng)求消息、響應(yīng)消息或者是空消息;Message ID表示消息編號(hào),用于重復(fù)消息檢測(cè)、匹配消息類型等。
CoAP協(xié)議的傳輸層默認(rèn)使用UDP協(xié)議,為了解決UDP傳輸?shù)牟豢煽啃?,CoAP協(xié)議采用了雙層結(jié)構(gòu),定義了帶有重傳的事務(wù)處理機(jī)制,并采用盡可能小的載荷,限制了分片。CoAP協(xié)議棧視圖如圖4所示。
事物層(Transaction Layer)用于處理節(jié)點(diǎn)間的信息交換,同時(shí)提供組播和擁塞控制等功能;請(qǐng)求/響應(yīng)層(Request/Response Layer)用于傳輸對(duì)資源進(jìn)行操作的請(qǐng)求和相應(yīng)信息。CoAP的雙層處理方式使得CoAP沒(méi)有采用TCP協(xié)議也可以提供可靠的傳輸機(jī)制。
CoAP官方推出了一定量的庫(kù)文件,方便用戶在自己的設(shè)備移植使用CoAP。本設(shè)計(jì)是在RT-Thread操作系統(tǒng)環(huán)境下進(jìn)行的,其LWIP協(xié)議棧組件能夠提供CoAP所需的UDP協(xié)議[4],通過(guò)編程實(shí)現(xiàn)CoAP標(biāo)準(zhǔn)格式數(shù)據(jù)報(bào)就可實(shí)現(xiàn)CoAP網(wǎng)關(guān)與遠(yuǎn)程數(shù)據(jù)庫(kù)之間的CoAP數(shù)據(jù)上傳。自定義的CoAP數(shù)據(jù)結(jié)構(gòu)圖如圖5所示。
在實(shí)現(xiàn)CoAP數(shù)據(jù)結(jié)構(gòu)的過(guò)程中使用到了幾個(gè)接口函數(shù):coap_pdu_init函數(shù),用來(lái)完成CoAP數(shù)據(jù)報(bào)報(bào)頭初始化;coap_add_token函數(shù),用來(lái)完成添加Token選項(xiàng);coap_add_option函數(shù),用來(lái)添加Option選項(xiàng);coap_add_data函數(shù),用來(lái)添加有效負(fù)載選型。在實(shí)現(xiàn)的過(guò)程中,每一個(gè)函數(shù)都會(huì)改變CoAP數(shù)據(jù)報(bào)結(jié)構(gòu),必須按照上述順序調(diào)用。
使用維基百科收錄的Microcoap-master庫(kù)來(lái)檢測(cè)上述CoAP實(shí)現(xiàn)方法的可靠性。Microcoap-master是一個(gè)小型服務(wù)器端程序包,支持客戶端對(duì)“l(fā)ight”資源的GET、PUT、POST操作。在LINUX環(huán)境下執(zhí)行make./coap運(yùn)行Microcoap-master,CoAP網(wǎng)關(guān)發(fā)送對(duì)“l(fā)ight”資源的PUT操作請(qǐng)求,同時(shí)使用wireshake抓包軟件進(jìn)行網(wǎng)絡(luò)數(shù)據(jù)抓包,截取的網(wǎng)絡(luò)數(shù)據(jù)包如圖6所示。
圖6中(a)圖抓取的是CoAP網(wǎng)關(guān)向Microcoap-mster服務(wù)器發(fā)送對(duì)“l(fā)ight”資源CON類型PUT請(qǐng)求的數(shù)據(jù)報(bào),其中標(biāo)識(shí)的部分41 03 12 34表示包頭Header,49表示選型Token,b5 6c 69 67 68 74表示選型Option,31表示負(fù)載Payload;(b)圖抓取的的是Microcoap-master服務(wù)器對(duì)于該CON類型報(bào)文做出的ACK類型響應(yīng),其中61 44 12 34 表示包頭Header,00表示Token,31表示負(fù)載Payload,并沒(méi)有搭載Option部分。實(shí)驗(yàn)結(jié)果表明,以上所述的CoAP協(xié)議實(shí)現(xiàn)方法可行。
4 軟件設(shè)計(jì)
軟件設(shè)計(jì)以RT-Thread實(shí)時(shí)操作系統(tǒng)基本框架為基礎(chǔ)[6],對(duì)多任務(wù)進(jìn)行線程化管理。RT-Thread操作系統(tǒng)是采用面向?qū)ο箫L(fēng)格設(shè)計(jì)、C語(yǔ)言實(shí)現(xiàn)的開放源碼的RTOS,其突出的特點(diǎn)是小型、實(shí)用和可剪裁性。在RT-Thread中線程是最小的調(diào)度單位,線程調(diào)度是基于優(yōu)先級(jí)全搶占式的多線程調(diào)度算法,支持256個(gè)線程優(yōu)先級(jí);支持創(chuàng)建相同優(yōu)先級(jí)的線程,相同優(yōu)先級(jí)的線程采用設(shè)置時(shí)間片的輪轉(zhuǎn)調(diào)度算法;調(diào)度器用來(lái)尋找下一個(gè)最高優(yōu)先級(jí)就緒線程的時(shí)間是恒定的。RT-Thread Kernel核心目前支持多數(shù)主流CPU芯片,其bsp分支包含有所支持的各平臺(tái)代碼,移植時(shí)選好開發(fā)平臺(tái)后僅需修改rtconfig.h文件即可。
基于RT-Thread操作系統(tǒng),對(duì)于傳感器節(jié)點(diǎn)和CoAP網(wǎng)關(guān)節(jié)點(diǎn)進(jìn)行線程化管理。傳感器節(jié)點(diǎn)根據(jù)任務(wù)要求設(shè)計(jì)了兩個(gè)線程:rt_sensor_entry負(fù)責(zé)讀取相關(guān)傳感器數(shù)據(jù);rt_dataex_entry線程負(fù)責(zé)接收解析CoAP網(wǎng)關(guān)節(jié)點(diǎn)指令,并向其發(fā)送傳感器自定義數(shù)據(jù)包。
傳感器節(jié)點(diǎn)與CoAP網(wǎng)關(guān)節(jié)點(diǎn)之間的數(shù)據(jù)交互是通過(guò)DRF1605H模塊數(shù)據(jù)透?jìng)鞯姆绞綄?shí)現(xiàn)的,為了解決數(shù)據(jù)在透?jìng)鬟^(guò)程中的缺失、不按順序到達(dá)等問(wèn)題,提出了一種自定義的透?jìng)鲾?shù)據(jù)格式。通過(guò)解析數(shù)據(jù)包中的幀首、功能碼、從機(jī)地址、結(jié)束校驗(yàn)位等信息,就可判斷數(shù)據(jù)包的完整性和正確性。自定義數(shù)據(jù)包格式如圖7所示。
其中,幀首定義為0xBBEE,占2個(gè)字節(jié);長(zhǎng)度碼表示數(shù)據(jù)包占用的字節(jié)數(shù);從機(jī)地址表示節(jié)點(diǎn)編號(hào)(CoAP網(wǎng)關(guān)節(jié)點(diǎn)為1號(hào),傳感器節(jié)點(diǎn)依次為2,3,4…);功能碼表示CoAP節(jié)點(diǎn)數(shù)據(jù)查詢功能(0)以及傳感器節(jié)點(diǎn)數(shù)據(jù)提交功能(1);數(shù)據(jù)位中存放傳感器原始數(shù)據(jù)(查詢功能數(shù)據(jù)包中的該項(xiàng)為0);結(jié)束校驗(yàn)位占用2字節(jié),固定為0x3498。
CoAP網(wǎng)關(guān)節(jié)點(diǎn)以RT-Thread內(nèi)核以及LWIP外圍組件作為軟件平臺(tái)[7],結(jié)構(gòu)示意圖如圖8所示。
根據(jù)CoAP網(wǎng)關(guān)節(jié)點(diǎn)任務(wù)的劃分,設(shè)計(jì)了多個(gè)線程:rt_dataex_entry線程負(fù)責(zé)與傳感器節(jié)點(diǎn)數(shù)據(jù)交互,并解析傳感器節(jié)點(diǎn)數(shù)據(jù)包;rt_coap_entry線程負(fù)責(zé)將傳感器原始數(shù)據(jù)CoAP格式化;rt_ethsend_entry線程負(fù)責(zé)定時(shí)向遠(yuǎn)程服務(wù)器發(fā)送CoAP報(bào)文。線程的順序視圖如圖9所示。
5 結(jié)束語(yǔ)
本文介紹了基于CoAP協(xié)議的數(shù)據(jù)采集網(wǎng)關(guān)設(shè)計(jì),通過(guò)對(duì)相關(guān)軟硬件實(shí)現(xiàn)方法加以分析以及實(shí)驗(yàn)測(cè)試,證實(shí)本設(shè)計(jì)能夠達(dá)到預(yù)期的效果。本文設(shè)計(jì)的CoAP協(xié)議網(wǎng)關(guān)不僅僅適用于呼倫湖流域環(huán)境數(shù)據(jù)采集,根據(jù)不同的應(yīng)用場(chǎng)合,只要對(duì)硬件和軟件稍作修改即可完成不同的監(jiān)測(cè)任務(wù)。本設(shè)計(jì)在數(shù)據(jù)采集系統(tǒng)領(lǐng)域具有一定的借鑒價(jià)值。
參考文獻(xiàn)
[1] 趙慧穎,烏力吉,郝文俊.氣候變化對(duì)呼倫湖濕地及其周邊地區(qū)生態(tài)環(huán)境演變的影響[A].中國(guó)氣象學(xué)會(huì)2008年年會(huì)干旱與減災(zāi)——第六屆干旱氣候變化與減災(zāi)學(xué)術(shù)研討會(huì)分會(huì)場(chǎng)論文集[C].中國(guó)氣象學(xué)會(huì),2008:13.
[2] 吳海平,王慧鋒.基于ARM技術(shù)的嵌入式網(wǎng)關(guān)設(shè)計(jì)[A].第七屆工業(yè)儀表與自動(dòng)化學(xué)術(shù)會(huì)議論文集[C].中國(guó)儀器儀表學(xué)會(huì)過(guò)程檢測(cè)控制儀表分會(huì)、中國(guó)儀器儀表學(xué)會(huì)可靠性工程分會(huì),2006:3.
[3] 李寧.基于MDK的STM32處理器開發(fā)應(yīng)用[M].北京:北京航空航天大學(xué)出版社,2008.
[4] 曾浩,張祺,鄭斯凱.基于STM32F407的圖像遠(yuǎn)程采集終端[J].工業(yè)控制計(jì)算機(jī),2014(11):81-83.
[5] BORMANN C,CASTELLANI A P,SHELBY Z.CoAP:an application protocol for billions of tiny Internet nodes[J].IEEE Internet Computing,2012,16(2):62-67.
[6] 熊譜祥.RT-Thread實(shí)時(shí)操作系統(tǒng)編程指南[DB/OL].(2010)[2015].上海:中國(guó)電子開發(fā)網(wǎng).
[7] 蘇憲利,鄭一麟.基于RT-thread的機(jī)床物聯(lián)網(wǎng)系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].組合機(jī)床與自動(dòng)化加工技術(shù),2014(6):69-72.