文獻標識碼: A
文章編號: 0258-7998(2015)06-0154-03
0 引言
近年來,,呼倫湖流域生態(tài)面臨著嚴峻的挑戰(zhàn),,水域污染加重、湖底淤積,、生物多樣性下降,、濕地萎縮等問題日益突出[1]。目前,,呼倫湖流域環(huán)境監(jiān)測系統(tǒng)的信息化建設(shè)還處于起步階段,,監(jiā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)測點的傳感器數(shù)據(jù)進行CoAP數(shù)據(jù)格式轉(zhuǎn)換,,上傳遠程數(shù)據(jù)庫,積累生態(tài)環(huán)境大數(shù)據(jù),,為政府決策提供支持,。
1 系統(tǒng)概述
基于RT-Thread的CoAP協(xié)議網(wǎng)關(guān)系統(tǒng)是在傳感器節(jié)點數(shù)據(jù)采集基礎(chǔ)上,對多個傳感器節(jié)點的數(shù)據(jù)進行CoAP數(shù)據(jù)格式轉(zhuǎn)換,,并與遠程數(shù)據(jù)庫進行數(shù)據(jù)交互,,實現(xiàn)環(huán)境監(jiān)測數(shù)據(jù)網(wǎng)絡(luò)共享的效果[2]。整體設(shè)計框圖如圖1所示,。
2 硬件設(shè)計
硬件設(shè)計框架圖如圖2所示,。
傳感器節(jié)點選擇ST公司出產(chǎn)的增強型系列微控制器STM32F103RBT6作為主控制器[3],選擇DALLAS半導(dǎo)體公司出產(chǎn)的1-Wire單總線數(shù)字溫度計作為環(huán)境溫度采集設(shè)備,,選擇I2C標準通信接口的16位數(shù)字輸出型環(huán)境光強度模塊BH1750FVI作為光照強度采集設(shè)備,。
CoAP網(wǎng)關(guān)節(jié)點選擇ST公司出產(chǎn)的高性能微控制芯片STM32F407ZGT6作為主控制器,該控制器具有符合IEEE 1588 v2標準要求的以太網(wǎng)MAC 10/100[4],,同時提供了先進的外設(shè)和標準的通訊接口,;選擇體積小、功耗低,、全能型的以太網(wǎng)收發(fā)器LAN8720A作為以太網(wǎng)PHY,。
串口轉(zhuǎn)ZigBee模塊DRF1605H作為傳感器節(jié)點與CoAP網(wǎng)關(guān)節(jié)點之間數(shù)據(jù)交互的橋梁。該模塊基于CC2530F256芯片,,運行ZigBee2007/PRO協(xié)議,,具有ZigBee協(xié)議的全部特點以及上電自動組網(wǎng)的特色。在傳感器節(jié)點中,,該模塊被設(shè)置成Router節(jié)點使用,;在CoAP網(wǎng)關(guān)節(jié)點中,該模塊被設(shè)置成Coordinator節(jié)點使用,。
3 CoAP協(xié)議原理及實現(xiàn)
CoAP協(xié)議是為物聯(lián)網(wǎng)中資源受限設(shè)備制定的應(yīng)用層協(xié)議[5],。它是一種面向網(wǎng)絡(luò)的協(xié)議,采用了與HTTP類似的特性,,核心內(nèi)容為資源抽象,、REST式交互及可擴展的頭選型等,。客戶端應(yīng)用程序通過URI標識來獲取服務(wù)器上的資源,,對資源可以進行GET,、PUT、POST和DELETE操作,。CoAP具有報頭壓縮,、UDP傳輸、支持資源發(fā)現(xiàn),、支持緩存,、異步通信等特點。CoAP協(xié)議的數(shù)據(jù)報格式如圖3所示,。
CoAP包含一個緊湊的二進制報頭以及擴展報頭,。基本報頭只有短短4 B,,后面緊跟著擴展選型和有效負載,。報頭各個部分字段的含義如下:Ver表示CoAP協(xié)議的版本號,默認情況下置1,;T表示報文的類型:CON類型,、NON類型、RST類型,、ACK類型,;TKL表示選型Token所占的字節(jié)數(shù);Code表示消息的類型:請求消息,、響應(yīng)消息或者是空消息,;Message ID表示消息編號,用于重復(fù)消息檢測,、匹配消息類型等,。
CoAP協(xié)議的傳輸層默認使用UDP協(xié)議,為了解決UDP傳輸?shù)牟豢煽啃?,CoAP協(xié)議采用了雙層結(jié)構(gòu),,定義了帶有重傳的事務(wù)處理機制,,并采用盡可能小的載荷,,限制了分片。CoAP協(xié)議棧視圖如圖4所示,。
事物層(Transaction Layer)用于處理節(jié)點間的信息交換,,同時提供組播和擁塞控制等功能;請求/響應(yīng)層(Request/Response Layer)用于傳輸對資源進行操作的請求和相應(yīng)信息,。CoAP的雙層處理方式使得CoAP沒有采用TCP協(xié)議也可以提供可靠的傳輸機制,。
CoAP官方推出了一定量的庫文件,,方便用戶在自己的設(shè)備移植使用CoAP。本設(shè)計是在RT-Thread操作系統(tǒng)環(huán)境下進行的,,其LWIP協(xié)議棧組件能夠提供CoAP所需的UDP協(xié)議[4],,通過編程實現(xiàn)CoAP標準格式數(shù)據(jù)報就可實現(xiàn)CoAP網(wǎng)關(guān)與遠程數(shù)據(jù)庫之間的CoAP數(shù)據(jù)上傳。自定義的CoAP數(shù)據(jù)結(jié)構(gòu)圖如圖5所示,。
在實現(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ù),,用來添加有效負載選型。在實現(xiàn)的過程中,,每一個函數(shù)都會改變CoAP數(shù)據(jù)報結(jié)構(gòu),,必須按照上述順序調(diào)用。
使用維基百科收錄的Microcoap-master庫來檢測上述CoAP實現(xiàn)方法的可靠性,。Microcoap-master是一個小型服務(wù)器端程序包,,支持客戶端對“l(fā)ight”資源的GET、PUT,、POST操作,。在LINUX環(huán)境下執(zhí)行make./coap運行Microcoap-master,CoAP網(wǎng)關(guān)發(fā)送對“l(fā)ight”資源的PUT操作請求,,同時使用wireshake抓包軟件進行網(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ù)報,,其中標識的部分41 03 12 34表示包頭Header,,49表示選型Token,b5 6c 69 67 68 74表示選型Option,,31表示負載Payload,;(b)圖抓取的的是Microcoap-master服務(wù)器對于該CON類型報文做出的ACK類型響應(yīng),其中61 44 12 34 表示包頭Header,,00表示Token,,31表示負載Payload,并沒有搭載Option部分,。實驗結(jié)果表明,,以上所述的CoAP協(xié)議實現(xiàn)方法可行。
4 軟件設(shè)計
軟件設(shè)計以RT-Thread實時操作系統(tǒng)基本框架為基礎(chǔ)[6],,對多任務(wù)進行線程化管理,。RT-Thread操作系統(tǒng)是采用面向?qū)ο箫L(fēng)格設(shè)計,、C語言實現(xiàn)的開放源碼的RTOS,其突出的特點是小型,、實用和可剪裁性,。在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é)點和CoAP網(wǎng)關(guān)節(jié)點進行線程化管理,。傳感器節(jié)點根據(jù)任務(wù)要求設(shè)計了兩個線程:rt_sensor_entry負責(zé)讀取相關(guān)傳感器數(shù)據(jù),;rt_dataex_entry線程負責(zé)接收解析CoAP網(wǎng)關(guān)節(jié)點指令,并向其發(fā)送傳感器自定義數(shù)據(jù)包,。
傳感器節(jié)點與CoAP網(wǎng)關(guān)節(jié)點之間的數(shù)據(jù)交互是通過DRF1605H模塊數(shù)據(jù)透傳的方式實現(xiàn)的,,為了解決數(shù)據(jù)在透傳過程中的缺失、不按順序到達等問題,,提出了一種自定義的透傳數(shù)據(jù)格式,。通過解析數(shù)據(jù)包中的幀首、功能碼,、從機地址,、結(jié)束校驗位等信息,就可判斷數(shù)據(jù)包的完整性和正確性,。自定義數(shù)據(jù)包格式如圖7所示,。
其中,幀首定義為0xBBEE,,占2個字節(jié),;長度碼表示數(shù)據(jù)包占用的字節(jié)數(shù);從機地址表示節(jié)點編號(CoAP網(wǎng)關(guān)節(jié)點為1號,,傳感器節(jié)點依次為2,,3,4…),;功能碼表示CoAP節(jié)點數(shù)據(jù)查詢功能(0)以及傳感器節(jié)點數(shù)據(jù)提交功能(1),;數(shù)據(jù)位中存放傳感器原始數(shù)據(jù)(查詢功能數(shù)據(jù)包中的該項為0),;結(jié)束校驗位占用2字節(jié),,固定為0x3498,。
CoAP網(wǎng)關(guān)節(jié)點以RT-Thread內(nèi)核以及LWIP外圍組件作為軟件平臺[7],結(jié)構(gòu)示意圖如圖8所示,。
根據(jù)CoAP網(wǎng)關(guān)節(jié)點任務(wù)的劃分,,設(shè)計了多個線程:rt_dataex_entry線程負責(zé)與傳感器節(jié)點數(shù)據(jù)交互,并解析傳感器節(jié)點數(shù)據(jù)包,;rt_coap_entry線程負責(zé)將傳感器原始數(shù)據(jù)CoAP格式化,;rt_ethsend_entry線程負責(zé)定時向遠程服務(wù)器發(fā)送CoAP報文。線程的順序視圖如圖9所示,。
5 結(jié)束語
本文介紹了基于CoAP協(xié)議的數(shù)據(jù)采集網(wǎng)關(guān)設(shè)計,,通過對相關(guān)軟硬件實現(xiàn)方法加以分析以及實驗測試,證實本設(shè)計能夠達到預(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)域具有一定的借鑒價值,。
參考文獻
[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的圖像遠程采集終端[J].工業(yè)控制計算機,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實時操作系統(tǒng)編程指南[DB/OL].(2010)[2015].上海:中國電子開發(fā)網(wǎng).
[7] 蘇憲利,,鄭一麟.基于RT-thread的機床物聯(lián)網(wǎng)系統(tǒng)設(shè)計與實現(xiàn)[J].組合機床與自動化加工技術(shù),2014(6):69-72.