董 哲,邵曉琳
(北方工業(yè)大學 電氣與控制工程學院,北京 100144)
ZigBee技術,在消費性電子設備、工業(yè)控制、汽車及智能交通、農(nóng)業(yè)自動化、醫(yī)療輔助控制等方面具有廣闊的應用前景。TI的CC2530芯片具備了實現(xiàn)Zig-Bee技術的各種底層硬件需求,是真正的一體化解決方案,完全符合ZigBee技術對節(jié)點“體積小”的要求。TI提供的ZStack協(xié)議棧,使ZigBee節(jié)點的軟件開發(fā)轉(zhuǎn)為應用程序的開發(fā),盡可能地減輕了軟件開發(fā)的工作量。
從系統(tǒng)的角度來看,智能化的家居體驗必然要求節(jié)點之間的互通互聯(lián),一個典型的ZigBee智能家居系統(tǒng)中節(jié)點繁多,功能各異,如果每個節(jié)點單獨開發(fā),則對系統(tǒng)的開發(fā)維護帶來諸多不便,對此本文創(chuàng)新性地給出了智能家居系統(tǒng)中通用節(jié)點的軟硬件設計方案,該方案降低了系統(tǒng)的開發(fā)和維護難度,并具有一定的通用性和可擴展性。
智能家居設備可分為三類,一類是傳感器節(jié)點,通過不同功能的傳感器檢測家居中的各種狀態(tài),如溫濕度、光照度等,該類節(jié)點由傳感變送單元、主控單元、通信單元組成。第二類是執(zhí)行器節(jié)點,通過繼電器、紅外遙控等方式實現(xiàn)對家電的控制,該類節(jié)點由執(zhí)行單元、主控單元、通信單元組成。第三類是網(wǎng)關控制器,實現(xiàn)網(wǎng)絡的建立與維護、數(shù)據(jù)轉(zhuǎn)發(fā)、節(jié)點控制等功能,該類節(jié)點由主控單元、通信單元組成。本文設計的通用型節(jié)點實現(xiàn)了主控單元、通信單元的基本功能,在通用單元的基礎上只需擴展傳感器、執(zhí)行器等即可實現(xiàn)智能家居中各專用設備硬件。同時本文開發(fā)了基于Z-stack的智能家居通用軟件,分為協(xié)調(diào)器和終端兩個版本,前者適用于網(wǎng)關控制器類設備,后者適用于傳感器、執(zhí)行器類設備,智能家居中所需的各種專用設備無需進行單獨的軟件開發(fā),只需定義設備類型即可實現(xiàn)。
如圖1所示,智能家居系統(tǒng)中的ZigBee網(wǎng)絡主要由ZigBee協(xié)調(diào)器和ZigBee終端設備組成。ZigBee協(xié)調(diào)器負責建立和維護ZigBee網(wǎng)絡,可通過串口連接上位機或家庭網(wǎng)關來實現(xiàn)對家居系統(tǒng)的監(jiān)測和控制;相同的ZigBee終端設備通過連接不同的傳感器和家居設備而構成不同的應用節(jié)點。
圖1 基于ZigBee的智能家居系統(tǒng)
如圖2所示,深色陰影部分為系統(tǒng)輸入,淺色陰影部分為系統(tǒng)輸出,ZigBee協(xié)調(diào)器為系統(tǒng)的控制中心,將綜合傳感器采集的環(huán)境信息以及串口接收的控制信息用來控制每個家居設備的運行,同時將環(huán)境信息,以及家居設備運行狀態(tài)發(fā)送到串口以供控制終端顯示。本系統(tǒng)具有自動控制、直接控制、連鎖控制、場景控制四種相互耦合的控制功能,此外系統(tǒng)還具有動作反饋的功能,不論設備以何種方式被控制,其動作變化都會在控制終端得到體現(xiàn)。
圖2 系統(tǒng)功能模型
(1)自動控制
協(xié)調(diào)器根據(jù)傳感設備采集的數(shù)據(jù)自動對某些家居設備進行控制,如當室外光照度較低時關閉窗簾。
(2)直接控制
用戶可根據(jù)自己的需要,直接在控制終端操作某一設備,如打開客廳的電視。
(3)連鎖控制
當用戶的某一項活動需要控制多個設備時,可實現(xiàn)只控制一個設備來實現(xiàn)連鎖控制,如當用戶打開燃氣開關后油煙機自動打開。
(4)模式控制
用戶可以在控制終端選擇不同的模式,家居設備的不同子集會在特定的模式中有不同的響應方式。如當設置睡眠模式時,一些安防功能會自動啟用,照明系統(tǒng)會自動切換至弱光檔以減少對眼睛的刺激。
每個ZigBee設備有一個全球唯一的64位IEEE長地址,但在ZigBee網(wǎng)絡中通常用16位的短地址來標識自身和識別對方,也稱作網(wǎng)絡地址。對于協(xié)調(diào)器來說,短地址為0000H,對于路由節(jié)點和終端節(jié)點來說,短地址是它們在加入到網(wǎng)絡中時由協(xié)調(diào)器動態(tài)分配的,與網(wǎng)絡深度、最大路由數(shù)、最大節(jié)點數(shù)等參數(shù)的設置有關,還與節(jié)點入網(wǎng)順序有關,直接通信關鍵點在于目標節(jié)點網(wǎng)絡短地址的獲得。
ZStack協(xié)議棧中定義的應用層無線數(shù)據(jù)發(fā)送函數(shù)為AF_DataRequest,函數(shù)原型如下:
其中dstAddr為地址類型結(jié)構體變量,包含目標節(jié)點地址類型和網(wǎng)絡地址等參數(shù);cID為命令號,在ZStack協(xié)議棧里主要用來區(qū)別不同命令以控制不同的操作;len為發(fā)送數(shù)據(jù)的長度;*buf為指向發(fā)送數(shù)據(jù)緩沖區(qū)的指針。
ZigBee設備收到無線數(shù)據(jù)后,會在應用層觸發(fā)AF_INCOMING_MSG_CMD事件,可在結(jié)構體afIncomingMSGPacket_t中解析出所接收的數(shù)據(jù)及其源地址、命令號等相關的參數(shù)。
智能家居系統(tǒng)中的ZigBee網(wǎng)絡是以應用為中心的網(wǎng)絡,用戶只關注各個ZigBee終端的應用功能,而不關心每個節(jié)點的網(wǎng)絡地址,因此需要在終端的功能和它的網(wǎng)絡地址之間建立映射關系,系統(tǒng)才能正確地通信。
用撥碼開關為每個終端分配一個唯一的ID以區(qū)分其功能,以8位撥碼開關為例,如表1所示,4位區(qū)分區(qū)域,4位區(qū)分應用,這樣每個無線應用都有一個區(qū)域號和應用號組成的1個字節(jié)的ID號,系統(tǒng)最多可容納256個獨立的應用,足夠覆蓋家居生活的方方面面。
表1 終端應用ID
協(xié)調(diào)器建立網(wǎng)絡成功后,終端節(jié)點會自動加入網(wǎng)絡,終端入網(wǎng)成功后會在應用層觸發(fā)ZDO_STATE_CHANGE事件,因此可以利用此事件來實現(xiàn)應用層網(wǎng)絡的建立。首先終端在應用層任務初始化時讀取撥碼開關狀態(tài),得到其ID號fID,當終端的ZDO_STATE_CHANGE事件被觸發(fā),即終端成功加入網(wǎng)絡時,將自己的ID號fID發(fā)送給協(xié)調(diào)器作為應用層入網(wǎng)請求。協(xié)調(diào)器端定義一個記錄終端節(jié)點網(wǎng)絡地址的數(shù)組uint16 Saddr[256],當協(xié)調(diào)器收到終端應用層入網(wǎng)請求后將無線數(shù)據(jù)的源地址賦給數(shù)組Saddr以fID為下標的元素:
這樣就在協(xié)調(diào)器端建立了與節(jié)點應用功能對應的網(wǎng)絡地址映射表,當需要控制某個設備時將Saddr中以被控設備為ID號fID為下標的元素賦值給協(xié)調(diào)器的目標地址:
就可以將數(shù)據(jù)或命令發(fā)送到對應的設備。
(1)網(wǎng)絡通信
如圖3所示,系統(tǒng)的網(wǎng)絡通信主要由灰色矩形框內(nèi)的7種情況發(fā)起,下面將分類對各種數(shù)據(jù)幀進行定義和解釋。
圖3 系統(tǒng)網(wǎng)絡通信示意圖
a.串口通信幀結(jié)構
協(xié)調(diào)器串口通信幀由起始碼、功能碼、數(shù)據(jù)碼三部分構成,其中起始碼1字節(jié),值為0xFF,表示幀頭;功能碼1字節(jié),由0x00遞增,表示此幀的功能,數(shù)據(jù)碼長度和內(nèi)容由功能碼決定。
如表2,協(xié)調(diào)器的串口接收3種類型的幀,開機請求幀用于上位機程序打開時獲取當前系統(tǒng)的信息;場景設置幀用于設置模式,如進入睡眠模式,退出睡眠模式;節(jié)點控制幀用于直接控制,如用戶打開客廳的電視機。
表2 協(xié)調(diào)器串口接收數(shù)據(jù)幀
如表3,協(xié)調(diào)器的串口發(fā)送3種類型的幀,數(shù)據(jù)回復幀用于回復上位機的開機請求幀;設備入網(wǎng)幀用于告知上位機新加入ZigBee網(wǎng)絡的家居設備;設備數(shù)據(jù)幀用于向上位機反饋每個設備的參數(shù)和狀態(tài)信息,如溫度傳感器采集的溫度值,電視機的開關狀態(tài)。
表3 協(xié)調(diào)器串口發(fā)送數(shù)據(jù)幀
b.無線通信幀結(jié)構
無線通信幀是指協(xié)調(diào)器和終端節(jié)點通信的無線數(shù)據(jù)幀,在此用協(xié)議棧中無線數(shù)據(jù)收發(fā)的一個參數(shù)cID(命令號)來區(qū)分幀的功能和類型,用無線收發(fā)的數(shù)據(jù)緩沖區(qū)buf來存放數(shù)據(jù),數(shù)據(jù)長度及內(nèi)容由命令號cID決定。
如表4,以cID的高字節(jié)作為功能碼來區(qū)分無線數(shù)據(jù)幀的類型,低字節(jié)存放節(jié)點fID來識別應用。協(xié)調(diào)器接收2種類型的幀,入網(wǎng)幀為終端節(jié)點的應用層入網(wǎng)請求;參數(shù)幀為終端節(jié)點的參數(shù)和狀態(tài)信息。
表4 協(xié)調(diào)器無線接收數(shù)據(jù)幀
如表5,協(xié)調(diào)器發(fā)送5種類型的幀,以cID高字節(jié)的高4位表示幀類型,入網(wǎng)回復幀用來回復新入網(wǎng)的節(jié)點系統(tǒng)當前的模式;節(jié)點控制幀用于控制節(jié)點的行為動作;模式設置幀和連鎖控制幀用來進行模式設置和連鎖控制,并對cID的低12位進行如下的定義,高字節(jié)的低4位為控制方向(1為進入,0為退出),低字節(jié)為控制號,表示當前控制類型下的控制號。如0x0105為進入第5種模式,0x0005為退出第5種模式;0x1103為進入第一種連鎖,0x1003為退出第3種連鎖。
表5 協(xié)調(diào)器無線發(fā)送數(shù)據(jù)幀
(2)系統(tǒng)控制
在協(xié)調(diào)器和終端都定義一個函數(shù)指針數(shù)組
task00至taskFF為表1中每個對應設備的應用處理函數(shù),在協(xié)調(diào)器端表現(xiàn)為接收到對應設備數(shù)據(jù)后的相關處理。
將終端設備分為控制型設備和輸入型設備,對于控制型終端設備M,其功能執(zhí)行函數(shù)taskM為收到協(xié)調(diào)器的控制信息后的操作。以16種模式為例,在終端節(jié)點程序中定義uint16的全局變量fmode(每一位表示一種模式,1表示模式被設置,0表示模式被清除),當終端節(jié)點收到協(xié)調(diào)器發(fā)來的無線數(shù)據(jù)時,如果是模式設置幀則按照控制方向和控制號更新fmode中相應的模式位,然后調(diào)用process_task[fID]((pkt->clustered)>>12,(pkt->clustered)&0x00FF)來進行相應的操作。
在taskM中定義一個uint16的常量modeM,每一位表示一種模式,modeM含義為當此變量中為1的位所對應的模式至少有一種被設置時此設備打開,否則此設備關閉。當收到模式設置幀時,進行判斷if(modeM&fmode),成立時打開設備,否則關閉設備,連鎖控制用相同的方法實現(xiàn);如果是入網(wǎng)回復幀,則記錄下系統(tǒng)當前的模式值fmode;如果是節(jié)點控制幀則直接調(diào)用process_task[fID]((pkt->clustered)>>12,(pkt->clustered)&0x0FFF)進行相應的控制。
輸入型設備N又可分為開關量輸入和數(shù)據(jù)輸入。以煙霧傳感器為例,其輸入到終端的信號為高或低電平表示是否有火警信號,此類輸入為開關量輸入,用外部中斷來讀取,在協(xié)議棧的中斷處理函數(shù)HAL_ISR_FUNCTION中利用osal_set_event()函數(shù)來觸發(fā)應用層的事件。以溫濕度傳感器為例,其輸入到終端的信號為溫濕度數(shù)據(jù),需要控制器定期讀取傳感參數(shù),此類輸入為數(shù)據(jù)輸入,用定時器中斷來讀取,在協(xié)議棧中利用osal_start_timerEx();當外部中斷產(chǎn)生或定時時間到都會在應用層觸發(fā)相應的自定義事件。所以在應用層的任務處理函數(shù)中去查詢事件進行響應:
為避免和控制型設備M的控制類型(0~3)重合而導致的程序混亂,輸入型設備N的功能執(zhí)行函數(shù)taskN中的控制類型由4開始遞增。
用通用節(jié)點連接不同的傳感器和控制設備搭建的智能家居演示系統(tǒng)如圖4所示,系統(tǒng)配套的Android APP通過連接網(wǎng)關可實現(xiàn)監(jiān)控ZigBee智能家居網(wǎng)絡的功能,Android APP界面如圖5所示。
圖4 智能家居演示系統(tǒng)實物圖
圖5 智能家居系統(tǒng)Android APP監(jiān)控界面
本文介紹的基于ZigBee的智能家居通用節(jié)點的設計方案降低了智能家居系統(tǒng)開發(fā)和維護成本,滿足了智能化的家居系統(tǒng)控制要求,可以快速地實現(xiàn)設計方案到可執(zhí)行代碼的轉(zhuǎn)化。同時該方法具有一定的通用性,也適用于基于ZigBee的智能大棚監(jiān)管系統(tǒng)等類似系統(tǒng)的開發(fā)。
[1] 高守緯,吳燦陽.ZigBee技術實踐教程:基于CC2430/31的無線傳感器網(wǎng)絡解決方案[M].北京:北京航空航天大學出版社,2009.
[2] 王小強,歐陽俊,黃寧淋.ZigBee無線傳感器網(wǎng)絡設計與實現(xiàn)[M].北京:化學工業(yè)出版社,2012.
[3] 周 游,方 濱,王 普.基于ZigBee技術的智能家居無線網(wǎng)絡系統(tǒng)[J].電子技術應用,2005,31(9):37-40.