作者:臺(tái)宏達(dá);田國會(huì);宋保業(yè);劉賢鍇
1 ZigBee技術(shù)及ZigBee2006協(xié)議棧簡(jiǎn)介
1.1 ZigBee技術(shù)概述
ZigBee技術(shù)是一種短距離、低速率的無線通信技術(shù)。由于其短距離、低速率及可以實(shí)時(shí)定位等特點(diǎn),被廣泛應(yīng)用于醫(yī)療、智能家居、智能建筑、工業(yè)自動(dòng)化、智能空間等領(lǐng)域。
1.2 ZigBee2006協(xié)議棧簡(jiǎn)析
ZigBee通信協(xié)議的基礎(chǔ)是IEEE 802.15.4。這是IEEE無線個(gè)人區(qū)域網(wǎng)工作組的一項(xiàng)標(biāo)準(zhǔn),被稱作IEEE 802.15.4標(biāo)準(zhǔn)。該標(biāo)準(zhǔn)定義了物理層(PHY)和媒體訪問控制層(MAC)的標(biāo)準(zhǔn)。ZigBee聯(lián)盟則定義了ZigBee協(xié)議的網(wǎng)絡(luò)層(NWK)、應(yīng)用層(APL)和安全服務(wù)規(guī)范。TI/Chipcon公司在IEEE 802.15.4標(biāo)準(zhǔn)和ZigBee聯(lián)盟所推出的ZigBee2006規(guī)范的基礎(chǔ)上,發(fā)布了全功能的ZigBee2006協(xié)議棧,并通過了ZigBee聯(lián)盟的認(rèn)證。該協(xié)議棧全部用C語言編寫,免費(fèi)提供給用戶,同時(shí)向后兼容。該協(xié)議棧在結(jié)構(gòu)上分為應(yīng)用層、網(wǎng)絡(luò)層、安全層、MAC層和物理層,每一層的函數(shù)都嚴(yán)格按照IEEE 802.15.4標(biāo)準(zhǔn)和ZigBee2006規(guī)范所規(guī)定的原語格式編寫。與此同時(shí),在協(xié)議棧內(nèi)部還嵌入了一個(gè)操作系統(tǒng),用于對(duì)任務(wù)進(jìn)行統(tǒng)一的調(diào)度。對(duì)于用戶而言,只需要了解應(yīng)用層函數(shù)并進(jìn)行恰當(dāng)?shù)恼{(diào)用,就可以構(gòu)建功能完善、性能穩(wěn)定的ZigBee無線網(wǎng)絡(luò)。
2 系統(tǒng)方案設(shè)計(jì)
ZigBee無線傳感執(zhí)行網(wǎng)絡(luò)必須要有一個(gè)協(xié)調(diào)器作為整個(gè)網(wǎng)絡(luò)的傳輸與控制中心,另外還要有若干路由器和終端節(jié)點(diǎn)。它有3種最基本的連接方式:星狀連接、網(wǎng)狀連接和串狀連接,如圖1所示。
星狀連接方式比較簡(jiǎn)單,只能組建包含較少節(jié)點(diǎn)的無線網(wǎng)絡(luò),各個(gè)終端節(jié)點(diǎn)通過協(xié)調(diào)器實(shí)現(xiàn)網(wǎng)絡(luò)連接。網(wǎng)狀連接中任意節(jié)點(diǎn)之間都可以傳遞信息。串狀連接中增加了若干路由器,用于對(duì)數(shù)據(jù)進(jìn)行轉(zhuǎn)發(fā)。
在ZigBee2006全功能協(xié)議棧中,網(wǎng)絡(luò)連接方式的選擇可通過在nwk_globals.c和nwk_globals.h中對(duì) STACK_PROFILE_ID的設(shè)置來實(shí)現(xiàn)。STACK_PRO-FILE_ID有3種量,分別對(duì)應(yīng)著星狀連接、網(wǎng)狀連接和樹狀連接網(wǎng)絡(luò)。
系統(tǒng)在nwk_globals.h中加入如下語句,從而在家庭環(huán)境中構(gòu)建星狀結(jié)構(gòu)的ZigBee無線傳感執(zhí)行網(wǎng)絡(luò):
#define STACK_PROFILE_ID GENERIC_STAR
系統(tǒng)的整體結(jié)構(gòu)如圖2所示。
系統(tǒng)中布置有一個(gè)協(xié)調(diào)器與PC機(jī)相連,同時(shí)布置有若干終端節(jié)點(diǎn)或路由器,使其連接溫度、濕度和光敏電阻等傳感器來監(jiān)測(cè)房間環(huán)境。另外,房間中還布置有一些終端節(jié)點(diǎn)與執(zhí)行器連接,用于控制窗簾的開關(guān)、臺(tái)燈的亮滅等。協(xié)調(diào)器和終端節(jié)點(diǎn)在房間內(nèi)組成了一個(gè)星狀結(jié)構(gòu)的ZigBee無線傳感執(zhí)行網(wǎng)絡(luò)。
系統(tǒng)的整體工作過程是:首先由協(xié)調(diào)器節(jié)點(diǎn)成功創(chuàng)建ZigBee網(wǎng)絡(luò),然后等待終端節(jié)點(diǎn)加入。當(dāng)終端節(jié)點(diǎn)及傳感器上電后,會(huì)自動(dòng)查找空間中存在的 ZigBee網(wǎng)絡(luò),找到后即加入網(wǎng)絡(luò),并把該節(jié)點(diǎn)的物理地址發(fā)送給協(xié)調(diào)器。協(xié)調(diào)器把節(jié)點(diǎn)的地址信息等通過串口發(fā)送給計(jì)算機(jī)進(jìn)行保存。當(dāng)計(jì)算機(jī)想要獲取某一節(jié)點(diǎn)處的傳感器值時(shí),只需要向串口發(fā)送相應(yīng)節(jié)點(diǎn)的物理地址及測(cè)量指令。協(xié)調(diào)器通過串口從計(jì)算機(jī)端收到物理地址后,會(huì)向與其相對(duì)應(yīng)的傳感器節(jié)點(diǎn)發(fā)送數(shù)據(jù),傳達(dá)傳感器測(cè)量指令。傳感器節(jié)點(diǎn)收到數(shù)據(jù)后,通過傳感器測(cè)量數(shù)據(jù),然后將測(cè)量結(jié)果發(fā)送給協(xié)調(diào)器,并在計(jì)算機(jī)端進(jìn)行顯示。
3 系統(tǒng)硬件設(shè)計(jì)
系統(tǒng)的協(xié)調(diào)器、路由器和終端節(jié)點(diǎn)的核心采用TI公司的CC2430芯片。該芯片是一款真正的系統(tǒng)芯片(SoC)解決方案,其在單個(gè)芯片上集成了 ZigBee射頻前端、微控制器和存儲(chǔ)器。它使用1個(gè)8位的8051內(nèi)核MCU作為控制器,其性能是工業(yè)標(biāo)準(zhǔn)8051核的8倍,且程序代碼與51系列單片機(jī)完全兼容。CC2430具有64/128 KB的可編程Flash和8 KB的RAM,其大容量的Flash完全能夠滿足ZigBee2006協(xié)議棧程序的要求;另外,還具有模/數(shù)轉(zhuǎn)換器(ADC)、定時(shí)器、AES128協(xié)處理器和看門狗定時(shí)器等片內(nèi)外設(shè)。
系統(tǒng)的工作原理是:在協(xié)調(diào)器端,CC2430通過RS232異步串行通信與PC機(jī)進(jìn)行通信。協(xié)調(diào)器成功組建網(wǎng)絡(luò)時(shí),會(huì)向PC機(jī)發(fā)送組網(wǎng)成功指示。當(dāng)有路由器或終端節(jié)點(diǎn)加入網(wǎng)絡(luò)時(shí),協(xié)調(diào)器通過RS232向PC機(jī)發(fā)送節(jié)點(diǎn)加入指示。在路由器和終端節(jié)點(diǎn)處,上電后CC2430尋找可用信道并加入網(wǎng)絡(luò),然后等待指令。路由器或終端節(jié)點(diǎn)一旦收到協(xié)調(diào)器發(fā)送來的測(cè)量指令,將會(huì)讀取傳感器的數(shù)據(jù)并傳送。
本系統(tǒng)中溫度和濕度測(cè)量使用Sensirion公司的SHT11數(shù)字溫濕度傳感器。該傳感器具有相對(duì)濕度和溫度一體測(cè)量、超快的響應(yīng)時(shí)間等優(yōu)良特性。對(duì)臺(tái)燈和窗簾的控制是通過繼電器TQ2-3V來實(shí)現(xiàn)的。
4 軟件設(shè)計(jì)
4.1 系統(tǒng)采集溫濕度的程序設(shè)計(jì)
系統(tǒng)溫濕度的采集使用的SHT11數(shù)字式溫濕度傳感器采用兩線制數(shù)字接口,編程十分方便。溫濕度采集程序流程如圖3所示。
4.2 光敏電阻阻值讀取
光敏電阻阻值的讀取用CC2430內(nèi)部的ADC實(shí)現(xiàn)。通過設(shè)置CC2430的 ADCCON3寄存器可對(duì)A/D轉(zhuǎn)換的一些參數(shù)進(jìn)行設(shè)置。具體如下:使用14位的分辨率,采樣通道設(shè)置為AINO,參考電壓設(shè)置為內(nèi)部1.25 V。通過實(shí)驗(yàn)可以測(cè)定,當(dāng)P0.1的電壓值等于1.25 V時(shí),環(huán)境光照強(qiáng)度已經(jīng)足夠弱,可以控制空間中的其他執(zhí)行器做出動(dòng)作,如開燈、打開窗簾等。
4.3 ZigBee2006協(xié)議棧常用函數(shù)及工作過程
系統(tǒng)軟件基于TI/Chipcon公司免費(fèi)提供的Zig-Bee2006協(xié)議棧,程序中嵌入了實(shí)時(shí)操作系統(tǒng),用于對(duì)網(wǎng)絡(luò)組建、節(jié)點(diǎn)加入、數(shù)據(jù)收發(fā)等功能運(yùn)行統(tǒng)一調(diào)度。進(jìn)行程序設(shè)計(jì)時(shí),首先在協(xié)議棧應(yīng)用層程序中添加相應(yīng)的任務(wù),然后運(yùn)行任務(wù)即可處理。ZigBee2006協(xié)議棧的main函數(shù)流程如圖4所示。
OSAL層初始化時(shí),通過osalAddTasks函數(shù)提供任務(wù)列表,向?qū)崟r(shí)操作系統(tǒng)中添加用戶所需要的任務(wù)。在該函數(shù)中,TI公司已經(jīng)添加了一些任務(wù),如硬件應(yīng)用層初始化及處理函數(shù)、網(wǎng)絡(luò)層初始化及處理函數(shù)、應(yīng)用層初始化及處理函數(shù)等。在該函數(shù)中添加自己的任務(wù),添加任務(wù)函數(shù)如下: osalTaskAdd(CSCE_Init,CSCE_ProcessEvent,OSAL_TASK_PRIORI-TYLOW);
osalTaskAdd 函數(shù)在OSAL層中的OSAL_Task.C文件中定義,其作用是添加一個(gè)任務(wù)到任務(wù)列表。其中,第1個(gè)參數(shù)CSCE_Init為用戶任務(wù)的初始化函數(shù)的函數(shù)名,第2個(gè)參數(shù)CSCE_ProcessEvent為用戶任務(wù)的處理函數(shù)的函數(shù)名,第3個(gè)參數(shù) OSAL_TASK_PRlORITY_LOW為用戶任務(wù)的優(yōu)先級(jí)。
任務(wù)初始化函數(shù)CSCE_Init和任務(wù)處理函數(shù)CSCE_ProcessEvent都需要遵循ZigBee2006協(xié)議棧的格式。其中,CSCE_Init函數(shù)和CSCE_ProcessEvent函數(shù)需要在應(yīng)用層頭文件SampleApp.h中進(jìn)行聲明。
CSCE_Init函數(shù)有一個(gè)參數(shù)task_id,該參數(shù)為任務(wù)ID,具體值由OSAL進(jìn)行分配。CSCE_ProcessEvent函數(shù)有2 個(gè)參數(shù):第 1個(gè)參數(shù)與CSCE_Init函數(shù)相同,為任務(wù)ID;第2個(gè)參數(shù)events為需要處理的事件,它是一個(gè)16位的二進(jìn)制數(shù),每一位代表一個(gè)事件。
利用OSAL層進(jìn)行任務(wù)設(shè)計(jì)時(shí),必須保留系統(tǒng)任務(wù)事件SYS_EVENT_MSG(0x8000),該事件為強(qiáng)制事件。進(jìn)行任務(wù)處理時(shí),首先要對(duì)系統(tǒng)任務(wù)事件是否發(fā)生進(jìn)行判斷,任務(wù)處理流程如圖5所示。由于ZigBee2006協(xié)議棧為全功能協(xié)議棧,不需要對(duì)IEEE 802.15.4和ZigBee規(guī)范進(jìn)行全面的了解,只需要在應(yīng)用層進(jìn)行一些設(shè)計(jì)和改動(dòng),即可實(shí)現(xiàn)數(shù)據(jù)的發(fā)送、接收以及網(wǎng)絡(luò)組建功能。在終端節(jié)點(diǎn)的 CSCE_ProcessEvent函數(shù)的上電初始化處理部分,加入物理地址和短地址提取函數(shù),然后調(diào)用發(fā)送函數(shù)將物理地址向協(xié)調(diào)器發(fā)送。協(xié)議棧中的物理地址獲取函數(shù)為NLME_GetExtAddr(),其返回結(jié)果為一個(gè)指向節(jié)點(diǎn)的64位IEEE地址的指針。短地址的獲取函數(shù)為 NLME_GetShortAddr(),其返回結(jié)果為一個(gè)16位的無符號(hào)整型數(shù)據(jù)。
數(shù)據(jù)發(fā)送函數(shù)在ZigBee2006規(guī)范的原語中已經(jīng)規(guī)定了其參數(shù)的順序及意義。具體到TI/Chipcon公司所提供的ZigBee2006協(xié)議棧中,該函數(shù)為AF_DataRequest,其具體形式如下:
在協(xié)調(diào)器端和路由器(或終端節(jié)點(diǎn))的CSCE_Pro-cessEvent函數(shù)中接收到數(shù)據(jù)部分(即CSCE_MessageMS-GCB函數(shù))中對(duì)數(shù)據(jù)進(jìn)行處理,將所接收到的數(shù)據(jù)(即物理地址和短地址)通過串口發(fā)送到計(jì)算機(jī)端,進(jìn)行顯示。
ZigBee2006協(xié)議棧中設(shè)計(jì)了串口接收處理函數(shù):
該函數(shù)在MT目錄的SPIMgr.C中。實(shí)驗(yàn)中,在協(xié)調(diào)器端調(diào)用該函數(shù),即可從PC機(jī)端接收數(shù)據(jù)并進(jìn)行相應(yīng)的處理。
4.4 傳感器程序與ZigBee2006協(xié)議棧的融合
系統(tǒng)程序中,傳感器端的物理地址及短地址的發(fā)送部分程序,添加在ZigBee2006協(xié)議棧中的CSCE_ProcessEv-ent函數(shù)的上電初始化部分,即ZDO_STATE_CHANGE消息下。協(xié)調(diào)器及傳感器端的數(shù)據(jù)接收都添加在CSCE_ProcessEvent函數(shù)的數(shù)據(jù)接收部分,即 AF_INCOMING_MSG_CMD消息下。系統(tǒng)整體工作過程如圖6所示。
4.5 PC機(jī)端程序
在系統(tǒng)中,節(jié)點(diǎn)上電加入網(wǎng)絡(luò)后,協(xié)調(diào)器會(huì)通過RS232向PC機(jī)發(fā)送新加入節(jié)點(diǎn)的IEEE地址。PC機(jī)將從串口接收到的物理地址和短地址進(jìn)行存儲(chǔ),并改變計(jì)算機(jī)中所存儲(chǔ)的房間地圖中的節(jié)點(diǎn)顏色進(jìn)行指示。該程序使用Visual C++6.O編寫。
對(duì)用戶而言,當(dāng)想要獲取房間內(nèi)傳感器所測(cè)量區(qū)域的溫濕度、光照等情況時(shí),只需要點(diǎn)擊PC機(jī)所顯示的地圖上相應(yīng)的節(jié)點(diǎn)。程序會(huì)調(diào)用已存儲(chǔ)在相應(yīng)位置的傳感器節(jié)點(diǎn)的物理地址,通過串口和ZigBee網(wǎng)絡(luò)向該節(jié)點(diǎn)發(fā)送測(cè)量傳感器數(shù)據(jù)的指令,并等待接收傳感器傳回的溫濕度,并在PC機(jī)界面進(jìn)行顯示。
5 結(jié)論
實(shí)驗(yàn)表明,節(jié)點(diǎn)的功耗較低,每個(gè)節(jié)點(diǎn)使用電池供電可以工作3~6個(gè)月,可見應(yīng)用ZigBee構(gòu)建家庭環(huán)境的傳感執(zhí)行網(wǎng)絡(luò)是可行的。
責(zé)任編輯:gt
-
芯片
+關(guān)注
關(guān)注
452文章
49938瀏覽量
419598 -
ZigBee
+關(guān)注
關(guān)注
158文章
2265瀏覽量
242314 -
無線傳感器
+關(guān)注
關(guān)注
15文章
768瀏覽量
98263
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論