?

基于CC2538和Contiki的無線傳感器網絡設計

2015-03-31 13:13孫魯籍芳陳凱楊志豪
物聯網技術 2015年3期
關鍵詞:無線傳感器網絡

孫魯+籍芳+陳凱+楊志豪

摘 要:無線傳感器網絡作為物聯網技術中非常重要的應用領域,目前受到越來越多的關注。采用TI公司的CC2538芯片和開源物聯網操作系統Contiki,配合相應的傳感器芯片,設計并實現了可以采集溫度、濕度和照度的無線傳感器網絡,該無線傳感器網絡的部署為實驗室的檢測環境提供了更加方便精確的監控手段。

關鍵詞:無線傳感器網絡;CC2538;Contiki;溫濕度采集

中圖分類號:TP393 文獻標識碼:A 文章編號:2095-1302(2015)03-00-03

0 引 言

近年來,隨著物聯網技術的逐漸成熟,物聯網技術在環境監控、智慧城市、智能家居等領域的應用越來越廣泛[1,2]。物聯網技術應用中一個非常重要領域就是無線傳感器網絡(WSN) [3,4]。WSN通過部署一定數量由電池供電的傳感器節點,組成無線通信網絡,可以方便地采集周圍環境的各種變化情況,例如溫度、濕度、照度等信息,也可以采集人體的各項生理指標,例如心跳、血壓等信息。WSN技術可以應用于環境監測、老人健康護理、停車場管理、交通管理、智能家居等很多領域。

本文中采用TI公司的CC2538芯片和開源物聯網操作系統Contiki[5],設計了用于實驗室測試環境的無線傳感器網絡。該網絡通過在空間中布置傳感器節點,采集各點的監控信息,并通過匯聚節點將數據上傳至計算機,實現了監控數據的實時顯示和數據庫存儲。

1 系統硬件設計

1.1 傳感器節點

WSN中各傳感器節點采用電池供電,為了增加電池壽命,在主芯片的選擇上必須把耗電量作為一個重要的指標。傳感器節點的硬件結構示意圖如圖1所示。傳感器節點采用兩節7號干電池作為電源,主芯片選用TI公司的CC2538芯片,該芯片為ARM Cortex-M3內核,帶有I2C接口,可以滿足與傳感器通信和無線組網的要求。我們選用的CC2538芯片的片上FLASH為512 KB,RAM為32 KB,其內部集成了工作頻率為2.4 GHz并符合IEEE802.15.4標準的RF收發器。在最省電的外部中斷模式下,該芯片的供電電流僅為0.4 μA,滿足低功耗的設計要求。

圖1 傳感器節點硬件結構

傳感器節點中的溫濕度傳感器選用Sensirion公司的SHT21溫濕度傳感器芯片,該芯片在PCB板上占用的面積非常小,僅為3×3 mm2。缺省設置下溫度測量分辨率為0.01?C,相對濕度測量分辨率為0.04% RH。該芯片在休眠狀態下供電電流僅為0.15 μA,在測量狀態下供電電流為300 μA。該芯片通過I2C總線與CC2538主芯片通信,通過設置寄存器,可以分別讀取溫度測試值和相對濕度測試值,SHT21芯片提供了通過CRC校驗來進行傳輸完整檢查的功能。通過I2C總線讀到的溫度原始值ST利用下面的公式換算為攝氏度值T:

(1)

讀到的相對濕度原始值SRH則通過下列的公式換算為相對濕度RH:

(2)

傳感器節點中的照度傳感器選用MAXIM公司的MAX44009照度傳感器芯片,該芯片為目前工業界最低功耗的環境光傳感器芯片,在正常操作狀態下供電電流僅為0.65μA。在缺省狀態下,該芯片每800 ms測量一次環境照度值,該狀態下芯片處于最省電的工作模式,我們在設計中使用了該工作模式。該芯片在PCB板上占用的面積比溫濕度傳感器SHT21芯片更小,僅為2×2 mm2。除此之外,該芯片具有十分寬廣的照度測量范圍(0.045 Lux至188 000 Lux)。該芯片通過I2C總線與CC2538主芯片進行通信,通過設置寄存器可以讀取所測量照度的指數部分(exponent)和尾數部分(mantissa),然后通過下列公式換算為照度值(Lux):

Lux=2(exponent)×mantissa×0.045 (3)

1.2 匯聚節點

匯聚節點的作用是接收各傳感器節點發出的測量數據,并通過串口發送給計算機。匯聚節點的硬件結構示意如圖2所示。主芯片CC2538通過FTDI公司的FT232R芯片實現UART接口與USB接口之間的轉換。

圖2 匯聚節點硬件結構示意圖

2 系統軟件設計:

2.1 節點軟件設計

本文中的WSN采用開源物聯網操作系統Contiki作為各節點的操作系統,該操作系統作為輕量級的嵌入式操作系統,具有占用硬件資源小的優點,在典型的配置下,Contiki僅僅占用大約2 KB的RAM以及40 KB的FLASH。除此之外,Contiki提供了非常方便的無線通信協議。所有節點的軟件設計在Ubuntu下完成,編譯鏈接工具為arm-none-eabi-gcc。

一般情況下,WSN網絡各節點的RF收發器都是功耗最高的部分,如何在保證通信暢通的前提下降低RF收發器的功耗就成了WSN操作系統的關鍵問題之一。Contiki操作系統中,通過利用稱為ContikiMAC的RDC(radio duty cycling)機制來減少各節點RF收發器的工作時間[6]。在無線信號正常傳輸的前提下,該機制做到了讓各節點RF收發器在大約99%的時間內處于關閉狀態,從而大大降低各節點的功耗。

對于各傳感器節點,我們在軟件中首先設計了溫濕度傳感器和照度傳感器的I2C讀寫功能,并利用了Contiki的RIME協議將各傳感器收集到數據發送出去。CC2538與SHT21溫濕度傳感器之間進行I2C通訊的代碼如下:

i2c_master_set_slave_address(SHT21_SLAVE_ADDRESS, I2C_SEND);

i2c_master_data_put(regist);

i2c_master_command(I2C_MASTER_CMD_BURST_SEND_START);

if(regist == SHT21_TEMP_REGISTER) {

for(temp=0; temp<12; temp++) {

clock_delay_usec(8500);

}

} else if(regist == SHT21_HUMI_REGISTER) {

for(temp=0; temp<12; temp++) {

clock_delay_usec(2900);

}

}

i2c_master_set_slave_address(SHT21_

SLAVE_ADDRESS, I2C_RECEIVE);

i2c_master_command(I2C_MASTER_CMD_BURST_

RECEIVE_START);

*data = i2c_master_data_get() << 8;

i2c_master_command(I2C_MASTER_

CMD_BURST_RECEIVE_CONT);

*data |= i2c_master_data_get();

i2c_master_command(I2C_MASTER_CMD_BURST_

RECEIVE_FINISH);

CC2538和MAX44009照度傳感器之間進行I2C通信的代碼如下:

i2c_master_set_slave_address

(MAX44009_ADDRESS, I2C_SEND);

i2c_master_data_put(MAX44009_LUX_HIGH_ADDR);

i2c_master_command(I2C_MASTER_CMD_BURST_SEND_

START);

i2c_master_set_slave_address(MAX44009_ADDRESS, I2C_

RECEIVE);

i2c_master_command(I2C_MASTER_CMD_BURST_

RECEIVE_START);

highbyte = i2c_master_data_get() ;

i2c_master_set_slave_addres

(MAX44009_ADDRESS, I2C_SEND);

i2c_master_data_put(MAX44009_LUX_LOW_ADDR);

i2c_master_command(I2C_MASTER_

CMD_BURST_SEND_CONT);

i2c_master_set_slave_address(MAX44009_

ADDRESS, I2C_RECEIVE);

i2c_master_command(I2C_MASTER_CMD_BURST_

RECEIVE_CONT);

lowbyte = i2c_master_data_get() ;

i2c_master_command(I2C_MASTER_

CMD_BURST_SEND_FINISH);

i2c_master_command(I2C_MASTER_CMD_BURST_

RECEIVE_FINISH);

RIME協議是Contiki自帶的無線局域網通信協議[7],通過分層化的協議結構,可以實現廣播、單播、可靠單播等傳輸方式,并可以實現多跳傳輸。在考慮到使用環境后,我們通過現場試驗對比了幾種傳輸方式的可靠性,最后決定采用單跳的RIME可靠單播方式來發送傳感器數據。各傳感器節點每十分鐘采集一次數據并發送出去,由匯聚節點接收到后發送給上位計算機,整個無線采集系統的示意圖如圖3所示。

圖3 無線采集系統結構示意圖

2.2 上位機軟件設計

上位機軟件采用C#語言進行設計,在功能上主要包括了顯示各傳感器節點回傳數據和數據庫保存。上位機通過USB轉串口的方式實現與匯聚節點的串口通訊,為了提高串口數據讀取的可靠性,在程序設計中沒有使用串口控件,而是使用了下面的接收函數來接收串口數據:

private void DoReceive()

{

Byte[] buffer = new Byte[1024];

while (receiving)

{

if (comport.BytesToRead > 0)

{

Int32 length = comport.Read(buffer, 0, buffer.Length);

Array.Resize(ref buffer, length);

Display d = new Display(DisplayText);

this.Invoke(d, new Object[] { buffer });

Array.Resize(ref buffer, 1024);

}

Thread.Sleep(16);

}

}

數據庫部分采用SQL Server 2008作為數據源,記錄所采集的溫濕度、照度數據,數據表的第一列為各傳感器節點中CC2538芯片RF MAC的IEEE地址,以區分各傳感器,最后一列為數據存儲時間,以備以后查詢。

3 結 語

本文中設計了基于CC2538和Contiki的無線傳感器網絡,該無線傳感器網絡可以采集空間各點的溫濕度、照度數據,并通過上位機進行顯示和數據存儲。經過現場試驗發現,該系統數據傳輸可靠性高,測試過程中沒有發現丟包現象。由于各芯片選用上突出了低功耗的要求,使得WSN中各傳感器節點的電池壽命大大增加。本文中所設計的WSN提供了更加方便精確地進行測試環境監控的手段,可以用于大型分布式光度計光學暗室的三維空間中溫濕度、照度的測量。

參考文獻

[1] 錢志鴻,王義君.面向物聯網的無線傳感器網絡綜述[J]. 電子與信息學報,2013,35(1):215-227.

[2] Atzori L., Iera A., Morabito G..From “Smart Objects” to “Social Objects”: The Next Evolutionary Step of the Internet of Things[J] IEEE Communications Magazine, 2014(1):22-24.

[3] Andrea Castagnetti, Alain Pegatoquet, Trong Nhan Le.A Joint Duty-Cycle and Transmission Power Management for Energy Harvesting WSN [J] IEEE TRANSACTIONS ON INDUSTRIAL INFORMATICS,2014,10(2):38-39.

[4] Tevfik Yücek,Hüseyin Arslan.A Survey of Spectrum Sensing Algorithms for Cognitive Radio Applications[J].IEEE COMMUNICATIONS SURVEYS & TUTORIALS, 2009,11(1):18-21.

[5] Adam Dunkels, Bj?rn Gr?nvall, Thiemo Voigt. Contiki-a lightweight and flexible operating system for tiny networked sensors[C].Proceedings of the First IEEE Workshop on Embedded Networked Sensors (Emnets-I), Tampa, Florida, USA, 2004.

[6] Adam Dunkels. The ContikiMAC Radio Duty Cycling Protocol. [R] Technical Report T2011:13, Swedish Institute of Computer Science,2011.

[7] Adam Dunkels. Rime - a lightweight layered communication stack for sensor networks. [C] Proceedings of the European Conference on Wireless Sensor Networks (EWSN), Poster/Demo session, Delft, The Netherlands,2007.

猜你喜歡
無線傳感器網絡
基于無線傳感器網絡的葡萄生長環境測控系統設計與應用
無線傳感器網絡技術綜述
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合