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