文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2015)06-0154-03
0 引言
近年來,,呼倫湖流域生態(tài)面臨著嚴(yán)峻的挑戰(zhà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ù)不能通過網(wǎng)絡(luò)共享等問題使得政府部門很難及時(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ù)庫,,積累生態(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ù)庫進(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)用程序通過URI標(biāo)識(shí)來獲取服務(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沒有采用TCP協(xié)議也可以提供可靠的傳輸機(jī)制。
CoAP官方推出了一定量的庫文件,,方便用戶在自己的設(shè)備移植使用CoAP,。本設(shè)計(jì)是在RT-Thread操作系統(tǒng)環(huán)境下進(jìn)行的,其LWIP協(xié)議棧組件能夠提供CoAP所需的UDP協(xié)議[4],,通過編程實(shí)現(xiàn)CoAP標(biāo)準(zhǔn)格式數(shù)據(jù)報(bào)就可實(shí)現(xiàn)CoAP網(wǎng)關(guān)與遠(yuǎn)程數(shù)據(jù)庫之間的CoAP數(shù)據(jù)上傳,。自定義的CoAP數(shù)據(jù)結(jié)構(gòu)圖如圖5所示。
在實(shí)現(xiàn)CoAP數(shù)據(jù)結(jié)構(gòu)的過程中使用到了幾個(gè)接口函數(shù):coap_pdu_init函數(shù),,用來完成CoAP數(shù)據(jù)報(bào)報(bào)頭初始化,;coap_add_token函數(shù),用來完成添加Token選項(xiàng),;coap_add_option函數(shù),,用來添加Option選項(xiàng);coap_add_data函數(shù),,用來添加有效負(fù)載選型,。在實(shí)現(xiàn)的過程中,每一個(gè)函數(shù)都會(huì)改變CoAP數(shù)據(jù)報(bào)結(jié)構(gòu),,必須按照上述順序調(diào)用,。
使用維基百科收錄的Microcoap-master庫來檢測(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,,并沒有搭載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語言實(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)度器用來尋找下一個(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ù)交互是通過DRF1605H模塊數(shù)據(jù)透?jìng)鞯姆绞綄?shí)現(xiàn)的,,為了解決數(shù)據(jù)在透?jìng)鬟^程中的缺失、不按順序到達(dá)等問題,,提出了一種自定義的透?jìng)鲾?shù)據(jù)格式,。通過解析數(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é)束語
本文介紹了基于CoAP協(xié)議的數(shù)據(jù)采集網(wǎng)關(guān)設(shè)計(jì),,通過對(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ì)過程檢測(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.