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