孫魯+籍芳+陳凱+楊志豪
摘 要:無線傳感器網(wǎng)絡(luò)作為物聯(lián)網(wǎng)技術(shù)中非常重要的應(yīng)用領(lǐng)域,目前受到越來越多的關(guān)注。采用TI公司的CC2538芯片和開源物聯(lián)網(wǎng)操作系統(tǒng)Contiki,配合相應(yīng)的傳感器芯片,設(shè)計并實現(xiàn)了可以采集溫度、濕度和照度的無線傳感器網(wǎng)絡(luò),該無線傳感器網(wǎng)絡(luò)的部署為實驗室的檢測環(huán)境提供了更加方便精確的監(jiān)控手段。
關(guān)鍵詞:無線傳感器網(wǎng)絡(luò);CC2538;Contiki;溫濕度采集
中圖分類號:TP393 文獻(xiàn)標(biāo)識碼:A 文章編號:2095-1302(2015)03-00-03
0 引 言
近年來,隨著物聯(lián)網(wǎng)技術(shù)的逐漸成熟,物聯(lián)網(wǎng)技術(shù)在環(huán)境監(jiān)控、智慧城市、智能家居等領(lǐng)域的應(yīng)用越來越廣泛[1,2]。物聯(lián)網(wǎng)技術(shù)應(yīng)用中一個非常重要領(lǐng)域就是無線傳感器網(wǎng)絡(luò)(WSN) [3,4]。WSN通過部署一定數(shù)量由電池供電的傳感器節(jié)點(diǎn),組成無線通信網(wǎng)絡(luò),可以方便地采集周圍環(huán)境的各種變化情況,例如溫度、濕度、照度等信息,也可以采集人體的各項生理指標(biāo),例如心跳、血壓等信息。WSN技術(shù)可以應(yīng)用于環(huán)境監(jiān)測、老人健康護(hù)理、停車場管理、交通管理、智能家居等很多領(lǐng)域。
本文中采用TI公司的CC2538芯片和開源物聯(lián)網(wǎng)操作系統(tǒng)Contiki[5],設(shè)計了用于實驗室測試環(huán)境的無線傳感器網(wǎng)絡(luò)。該網(wǎng)絡(luò)通過在空間中布置傳感器節(jié)點(diǎn),采集各點(diǎn)的監(jiān)控信息,并通過匯聚節(jié)點(diǎn)將數(shù)據(jù)上傳至計算機(jī),實現(xiàn)了監(jiān)控數(shù)據(jù)的實時顯示和數(shù)據(jù)庫存儲。
1 系統(tǒng)硬件設(shè)計
1.1 傳感器節(jié)點(diǎn)
WSN中各傳感器節(jié)點(diǎn)采用電池供電,為了增加電池壽命,在主芯片的選擇上必須把耗電量作為一個重要的指標(biāo)。傳感器節(jié)點(diǎn)的硬件結(jié)構(gòu)示意圖如圖1所示。傳感器節(jié)點(diǎn)采用兩節(jié)7號干電池作為電源,主芯片選用TI公司的CC2538芯片,該芯片為ARM Cortex-M3內(nèi)核,帶有I2C接口,可以滿足與傳感器通信和無線組網(wǎng)的要求。我們選用的CC2538芯片的片上FLASH為512 KB,RAM為32 KB,其內(nèi)部集成了工作頻率為2.4 GHz并符合IEEE802.15.4標(biāo)準(zhǔn)的RF收發(fā)器。在最省電的外部中斷模式下,該芯片的供電電流僅為0.4 μA,滿足低功耗的設(shè)計要求。
圖1 傳感器節(jié)點(diǎn)硬件結(jié)構(gòu)
傳感器節(jié)點(diǎn)中的溫濕度傳感器選用Sensirion公司的SHT21溫濕度傳感器芯片,該芯片在PCB板上占用的面積非常小,僅為3×3 mm2。缺省設(shè)置下溫度測量分辨率為0.01?C,相對濕度測量分辨率為0.04% RH。該芯片在休眠狀態(tài)下供電電流僅為0.15 μA,在測量狀態(tài)下供電電流為300 μA。該芯片通過I2C總線與CC2538主芯片通信,通過設(shè)置寄存器,可以分別讀取溫度測試值和相對濕度測試值,SHT21芯片提供了通過CRC校驗來進(jìn)行傳輸完整檢查的功能。通過I2C總線讀到的溫度原始值ST利用下面的公式換算為攝氏度值T:
(1)
讀到的相對濕度原始值SRH則通過下列的公式換算為相對濕度RH:
(2)
傳感器節(jié)點(diǎn)中的照度傳感器選用MAXIM公司的MAX44009照度傳感器芯片,該芯片為目前工業(yè)界最低功耗的環(huán)境光傳感器芯片,在正常操作狀態(tài)下供電電流僅為0.65μA。在缺省狀態(tài)下,該芯片每800 ms測量一次環(huán)境照度值,該狀態(tài)下芯片處于最省電的工作模式,我們在設(shè)計中使用了該工作模式。該芯片在PCB板上占用的面積比溫濕度傳感器SHT21芯片更小,僅為2×2 mm2。除此之外,該芯片具有十分寬廣的照度測量范圍(0.045 Lux至188 000 Lux)。該芯片通過I2C總線與CC2538主芯片進(jìn)行通信,通過設(shè)置寄存器可以讀取所測量照度的指數(shù)部分(exponent)和尾數(shù)部分(mantissa),然后通過下列公式換算為照度值(Lux):
Lux=2(exponent)×mantissa×0.045 (3)
1.2 匯聚節(jié)點(diǎn)
匯聚節(jié)點(diǎn)的作用是接收各傳感器節(jié)點(diǎn)發(fā)出的測量數(shù)據(jù),并通過串口發(fā)送給計算機(jī)。匯聚節(jié)點(diǎn)的硬件結(jié)構(gòu)示意如圖2所示。主芯片CC2538通過FTDI公司的FT232R芯片實現(xiàn)UART接口與USB接口之間的轉(zhuǎn)換。
圖2 匯聚節(jié)點(diǎn)硬件結(jié)構(gòu)示意圖
2 系統(tǒng)軟件設(shè)計:
2.1 節(jié)點(diǎn)軟件設(shè)計
本文中的WSN采用開源物聯(lián)網(wǎng)操作系統(tǒng)Contiki作為各節(jié)點(diǎn)的操作系統(tǒng),該操作系統(tǒng)作為輕量級的嵌入式操作系統(tǒng),具有占用硬件資源小的優(yōu)點(diǎn),在典型的配置下,Contiki僅僅占用大約2 KB的RAM以及40 KB的FLASH。除此之外,Contiki提供了非常方便的無線通信協(xié)議。所有節(jié)點(diǎn)的軟件設(shè)計在Ubuntu下完成,編譯鏈接工具為arm-none-eabi-gcc。
一般情況下,WSN網(wǎng)絡(luò)各節(jié)點(diǎn)的RF收發(fā)器都是功耗最高的部分,如何在保證通信暢通的前提下降低RF收發(fā)器的功耗就成了WSN操作系統(tǒng)的關(guān)鍵問題之一。Contiki操作系統(tǒng)中,通過利用稱為ContikiMAC的RDC(radio duty cycling)機(jī)制來減少各節(jié)點(diǎn)RF收發(fā)器的工作時間[6]。在無線信號正常傳輸?shù)那疤嵯?,該機(jī)制做到了讓各節(jié)點(diǎn)RF收發(fā)器在大約99%的時間內(nèi)處于關(guān)閉狀態(tài),從而大大降低各節(jié)點(diǎn)的功耗。
對于各傳感器節(jié)點(diǎn),我們在軟件中首先設(shè)計了溫濕度傳感器和照度傳感器的I2C讀寫功能,并利用了Contiki的RIME協(xié)議將各傳感器收集到數(shù)據(jù)發(fā)送出去。CC2538與SHT21溫濕度傳感器之間進(jìn)行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照度傳感器之間進(jìn)行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協(xié)議是Contiki自帶的無線局域網(wǎng)通信協(xié)議[7],通過分層化的協(xié)議結(jié)構(gòu),可以實現(xiàn)廣播、單播、可靠單播等傳輸方式,并可以實現(xiàn)多跳傳輸。在考慮到使用環(huán)境后,我們通過現(xiàn)場試驗對比了幾種傳輸方式的可靠性,最后決定采用單跳的RIME可靠單播方式來發(fā)送傳感器數(shù)據(jù)。各傳感器節(jié)點(diǎn)每十分鐘采集一次數(shù)據(jù)并發(fā)送出去,由匯聚節(jié)點(diǎn)接收到后發(fā)送給上位計算機(jī),整個無線采集系統(tǒng)的示意圖如圖3所示。
圖3 無線采集系統(tǒng)結(jié)構(gòu)示意圖
2.2 上位機(jī)軟件設(shè)計
上位機(jī)軟件采用C#語言進(jìn)行設(shè)計,在功能上主要包括了顯示各傳感器節(jié)點(diǎn)回傳數(shù)據(jù)和數(shù)據(jù)庫保存。上位機(jī)通過USB轉(zhuǎn)串口的方式實現(xiàn)與匯聚節(jié)點(diǎn)的串口通訊,為了提高串口數(shù)據(jù)讀取的可靠性,在程序設(shè)計中沒有使用串口控件,而是使用了下面的接收函數(shù)來接收串口數(shù)據(jù):
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);
}
}
數(shù)據(jù)庫部分采用SQL Server 2008作為數(shù)據(jù)源,記錄所采集的溫濕度、照度數(shù)據(jù),數(shù)據(jù)表的第一列為各傳感器節(jié)點(diǎn)中CC2538芯片RF MAC的IEEE地址,以區(qū)分各傳感器,最后一列為數(shù)據(jù)存儲時間,以備以后查詢。
3 結(jié) 語
本文中設(shè)計了基于CC2538和Contiki的無線傳感器網(wǎng)絡(luò),該無線傳感器網(wǎng)絡(luò)可以采集空間各點(diǎn)的溫濕度、照度數(shù)據(jù),并通過上位機(jī)進(jìn)行顯示和數(shù)據(jù)存儲。經(jīng)過現(xiàn)場試驗發(fā)現(xiàn),該系統(tǒng)數(shù)據(jù)傳輸可靠性高,測試過程中沒有發(fā)現(xiàn)丟包現(xiàn)象。由于各芯片選用上突出了低功耗的要求,使得WSN中各傳感器節(jié)點(diǎn)的電池壽命大大增加。本文中所設(shè)計的WSN提供了更加方便精確地進(jìn)行測試環(huán)境監(jiān)控的手段,可以用于大型分布式光度計光學(xué)暗室的三維空間中溫濕度、照度的測量。
參考文獻(xiàn)
[1] 錢志鴻,王義君.面向物聯(lián)網(wǎng)的無線傳感器網(wǎng)絡(luò)綜述[J]. 電子與信息學(xué)報,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.