《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計應(yīng)用 > 基于CoAP協(xié)議的數(shù)據(jù)采集網(wǎng)關(guān)設(shè)計
基于CoAP協(xié)議的數(shù)據(jù)采集網(wǎng)關(guān)設(shè)計
2015年電子技術(shù)應(yīng)用第6期
李 琦,張 康,王月明
內(nèi)蒙古科技大學(xué) 信息工程學(xué)院,內(nèi)蒙古 包頭014010
摘要: 針對呼倫湖流域環(huán)境大數(shù)據(jù)采集的需求,同時為了解決不同廠商協(xié)議標(biāo)準(zhǔn)的不兼容性,設(shè)計了一種基于CoAP協(xié)議的數(shù)據(jù)采集網(wǎng)關(guān)。詳細(xì)討論了CoAP協(xié)議的基本原理和實(shí)現(xiàn)方法,并在開源系統(tǒng)RT-Thread和微控制器STM32的軟硬件平臺上實(shí)現(xiàn)。給出了系統(tǒng)整體設(shè)計以及各部分軟硬件設(shè)計,實(shí)驗結(jié)果表明,該設(shè)計方案可行,具有傳輸效率高、兼容性較好的特點(diǎn)。
中圖分類號: TP39
文獻(xiàn)標(biāo)識碼: A
文章編號: 0258-7998(2015)06-0154-03
A design of data acquisition gateway based on CoAP
Li Qi,Zhang Kang,Wang Yueming
College of Information Engineering, Inner Mongolia University of Science and Technology,Baotou 014010,China
Abstract: To satisfy the demand of Hulun Lake watershed environmental big data collection, and to solve the incompatible problem of different manufacturers protocols, a data acquisition gateway was designed based on the Constrained Application Protocol(CoAP). This study discussed the basic principle and implementation method of CoAP in detail and gave the overall design, the hardware and the software design of each part. Furtherly, the study gave the detail design of hardware which is based on the STM32 microprocessor and software design which is based on the open-source operating system RT-Thread. The experimental result shows that, the design is feasible and it has the characteristics of high transmission efficiency and better compatibility.
Key words : data acquisition;gateway;STM32;RT-Thread;CoAP

    

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所示。

jsj6-t1.gif

2 硬件設(shè)計

    硬件設(shè)計框架圖如圖2所示。

jsj6-t2.gif

    傳感器節(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所示。

jsj6-t3.gif

    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所示。

jsj6-t4.gif

    事物層(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所示。

jsj6-t5.gif

    在實(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所示。

jsj6-t6.gif

    圖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所示。

jsj6-t7.gif

    其中,幀首定義為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所示。

jsj6-t8.gif

    根據(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所示。

jsj6-t9.gif

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.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。