基于ZigBee Mesh網(wǎng)絡(luò)的無線串口設(shè)計
摘要:利用ZigBee技術(shù),組成具有可“自愈”能力的Mesh網(wǎng)絡(luò),實現(xiàn)無線串口通信。ZigBee技術(shù)的Mesh網(wǎng)絡(luò),單個模塊的傳輸距離在10~100 m之間,加功放在1 km以上。傳輸速率為250 kb·s-1,完全能滿足一般用戶的要求。
關(guān)鍵詞:ZigBee技術(shù);Mesh網(wǎng)絡(luò);“自愈”能力;無線串口
RS-232串行通信是異步通信中應(yīng)用最廣的標(biāo)準(zhǔn)總線,在沒有Modem的情況下,一般傳輸距離限制在15 m內(nèi),使得遠(yuǎn)距離串口通信受到較大限制。無線技術(shù)是當(dāng)今設(shè)備通信中取代有線技術(shù)的必然趨勢。
本文利用ZigBee無線技術(shù)組成Mesh網(wǎng)絡(luò)實施串口通信,網(wǎng)絡(luò)中任意兩個模塊的傳輸距離可達100 m,如果模塊有功放,傳輸距離可上升至1.5 km。因為Mesh網(wǎng)絡(luò)的多跳性,數(shù)據(jù)能夠多跳傳輸,所以數(shù)據(jù)的傳輸距離取決于跳數(shù)的多少,如圖1所示S4經(jīng)過3跳把數(shù)據(jù)傳送到S1,如果每一跳距離是1 km,則傳輸距離達3 km,這有效地解決了有線串口傳送的距離限制問題。同時,ZigBee網(wǎng)絡(luò)中最大的數(shù)傳速率為250 kb·s-1,完全能滿足一般用戶的要求。
1 ZigBee無線串口設(shè)計原理
1.1 節(jié)點入網(wǎng)后的初始化
根據(jù)ZigBee技術(shù)的要求,ZigBee網(wǎng)絡(luò)中存在3種角色,協(xié)調(diào)器、路由和終端設(shè)備,協(xié)調(diào)器負(fù)責(zé)建立網(wǎng)絡(luò),路由器負(fù)責(zé)路由,終端設(shè)備只能收發(fā)數(shù)據(jù)。協(xié)調(diào)器和路由統(tǒng)稱為全功能設(shè)備(FFD)。
在此,所有的設(shè)備都統(tǒng)稱為節(jié)點(node),只是所扮演的角色不一樣,每個節(jié)點都人為地在程序里給它們?nèi)∶?,如?1、02、03表示節(jié)點1、節(jié)點2、節(jié)點3,00保留給協(xié)調(diào)器。
協(xié)調(diào)器(00)加電后組建網(wǎng)絡(luò),各節(jié)點自動發(fā)現(xiàn)并加入網(wǎng)絡(luò),根據(jù)本文的設(shè)計,節(jié)點在加入網(wǎng)絡(luò)后都會自動地向網(wǎng)絡(luò)中的其他節(jié)點廣播其16位網(wǎng)絡(luò)地址和名字,網(wǎng)絡(luò)中的其他節(jié)點接收到這廣播數(shù)據(jù)后將該數(shù)據(jù)儲存在數(shù)組NodeAddress[]中,然后以單播的方式向新加入節(jié)點反饋自己的網(wǎng)絡(luò)地址和名字,新節(jié)點也將該數(shù)據(jù)保存在數(shù)組NodeAddress[]中,從而保證網(wǎng)絡(luò)中的每個節(jié)點都知道其他節(jié)點的網(wǎng)絡(luò)地址和名字。具體流程如圖2所示。
1.2 串口數(shù)據(jù)的格式
當(dāng)節(jié)點串口有數(shù)據(jù)要發(fā)送的時候,必須要指明,數(shù)據(jù)的發(fā)送目的地,所以從串口輸入的數(shù)據(jù)必須滿足一定的格式,本設(shè)計規(guī)定該格式為:××……;××為要發(fā)送的目的節(jié)點名字,……為要發(fā)送的數(shù)據(jù)。譬如向節(jié)點01發(fā)送數(shù)據(jù)“ZigBee”,格式為:01 ZigBee。因為節(jié)點在加入網(wǎng)絡(luò)的時候,已經(jīng)建立了名字和網(wǎng)絡(luò)地址的對應(yīng)表,所以發(fā)送節(jié)點會自動將01解釋為網(wǎng)絡(luò)地址0x0023,從而將數(shù)據(jù)準(zhǔn)確地發(fā)送到節(jié)點01上。
2 無線串口硬件設(shè)計
2.1 系統(tǒng)框圖
串口接收、發(fā)送系統(tǒng)可以是PC或者其他嵌入式系統(tǒng),ZigBee控制系統(tǒng)負(fù)責(zé)組網(wǎng)和接收發(fā)送數(shù)據(jù)。這里主要研究ZigBee控制系統(tǒng)。
2.2 芯片選擇
選擇TI公司的2.4 GHz片上系統(tǒng)解決方案CC2530。CC2530是用于IEEES02.15.4、ZigBee和RF4CE應(yīng)用的一個片上系統(tǒng)解決方案。它能以較低的總材料成本建立強大的網(wǎng)絡(luò)節(jié)點。CC2530結(jié)合了領(lǐng)先的RF收發(fā)器的優(yōu)良性能,業(yè)界標(biāo)準(zhǔn)的增強型8051CPU,使操作更容易,具備不同的運行模式,尤其適應(yīng)超低功耗要求的系統(tǒng)。
2.3 無線串口電路設(shè)計
CC2530中的P0_1和P0_2為TTL電平的串口接收發(fā)送管腳,可直接與TTL電平的串口系統(tǒng)相連,如果與PC機連,要加上MAX232模塊。可見該無線串口與其他系統(tǒng)的兼容性很強,而且連接方便。
3 軟件設(shè)計
3.1 ZigBee協(xié)議棧簡介
ZigBee協(xié)議棧以IEEE 802.15.4標(biāo)準(zhǔn)為基礎(chǔ),IEEES02.15.4工作組主要負(fù)責(zé)制定物理層(PHY)、媒體訪問控制層(MAC)。ZigBee聯(lián)盟提供了網(wǎng)絡(luò)層和應(yīng)用層(APL)框架的設(shè)計。其中,應(yīng)用層的框架包括了應(yīng)用支持子層(APS)、ZigBee設(shè)備對象(ZDO)及由制造商制定的應(yīng)用對象。如圖5所示。
采用TI公司的Z—Stack 07協(xié)議棧實現(xiàn)ZigBee協(xié)議。Z—Stack 07協(xié)議棧,對之前幾個版本的協(xié)議進行了改進,使得網(wǎng)絡(luò)穩(wěn)定性更強,組網(wǎng)更靈活。
3.2 主體程序流程與任務(wù)
TI的Z—Stack 07/PRO協(xié)議棧,對應(yīng)的開發(fā)環(huán)境為IAR 7.51A。在安裝完Z—Stack 07協(xié)議棧之后,用IAR打開工程文件GenericApp,GenericApp是TI公司專門為開發(fā)者提供的開發(fā)模板,在此借助該模板實現(xiàn)無線串口。
打開GenericApp后,如圖6所示,App文件夾即為應(yīng)用層代碼文件夾。利用模板只需在GenericApp.c中加入實現(xiàn)代碼,就可以實現(xiàn)無線串口。
Z—Stack采用操作系統(tǒng)的思想來構(gòu)建,采用任務(wù)輪循機制,當(dāng)各層初始化之后,系統(tǒng)進入低功耗模式,當(dāng)任務(wù)有事件發(fā)生時,喚醒系統(tǒng),開始進入中斷處理任務(wù)事件,結(jié)束后繼續(xù)進入低功耗模式。如果同時有幾個事件發(fā)生,判斷優(yōu)先級,逐次處理事件。Z—Stack的工作流程如圖7所示。
3.3 無線串口程序流程
因為Z—Stack是采用任務(wù)輪循機制,GenericApp是屬于其中的一個任務(wù),在文件GenericApp.c中的任務(wù)初始化函數(shù)GenericApp_Init()中添加串口初始化代碼,在GenericApp_ProcessEven()函數(shù)中添加無線串口收發(fā)事件Serial_RecEven和Serial_TranEven的處理函數(shù)。圖8和圖9是GenericApp_Init()函數(shù)流程圖和GenericApp_ProcessEven()函數(shù)流程圖。
圖中初始化NV Flash是用以儲存其他節(jié)點網(wǎng)絡(luò)地址名字對應(yīng)表。
當(dāng)節(jié)點上電加入ZigBee網(wǎng)絡(luò)后,便會執(zhí)行GenericApp_Init()函數(shù),初始化串口,并向網(wǎng)絡(luò)中的其他節(jié)點以廣播的方式發(fā)送其網(wǎng)絡(luò)地址和名字。
當(dāng)網(wǎng)絡(luò)中的其他節(jié)點接收到數(shù)據(jù)時,便會觸發(fā)接收數(shù)據(jù)事件,GenericApp_ProcessEven()函數(shù)判斷是串口接收數(shù)據(jù)命令還是儲存網(wǎng)絡(luò)地址命令,如果是前者,便將數(shù)據(jù)寫到串口;如果是后者則先判斷是否來自于廣播方式發(fā)送來的數(shù)據(jù):若是則儲存該網(wǎng)絡(luò)地址和名字,并且以單播的方式回饋本節(jié)點的網(wǎng)絡(luò)地址,保證網(wǎng)絡(luò)中的各個節(jié)點都知道其他節(jié)點的地址和名字;若不是就儲存該網(wǎng)絡(luò)地址和名字,不用反饋本節(jié)點的網(wǎng)絡(luò)地址和名字。
當(dāng)GenericApp_ProcessEven()函數(shù)檢測到Serial_TranEven事件發(fā)生時,便讀串口并將數(shù)據(jù)按照約定的格式發(fā)送出去。
4 實際測試
4.1 測試1
無功放ZigBee模塊W00與W02,如圖10~圖12所示。
實驗環(huán)境:足球場,可視距離100 m。實驗結(jié)果如圖12所示。
Node:02 ShortAddress:0x3595是W02加入網(wǎng)絡(luò)后自動向W00發(fā)送網(wǎng)絡(luò)地址和名字。因為W00是協(xié)調(diào)器,默認(rèn)地址為0x00,已預(yù)存在各模塊中。
4.2 測試2
無功放ZigBee模塊W00,W02,W03和W04,實驗環(huán)境:各大樓之間。如圖13所示。
W00與W02、W03能直接通信,W00經(jīng)過兩跳后可與W04,通信,W02經(jīng)過兩跳后可以與W04通信。實驗結(jié)果截圖如14所示。
Node:04 ShortAddress:0xE805是W04入網(wǎng)后向W02發(fā)送的網(wǎng)絡(luò)地址和名字,Node:02 ShortAddress:0x3595是W02節(jié)點回饋的網(wǎng)絡(luò)地址和名字。由實驗可知,基于ZigBee的無線串口通信,數(shù)據(jù)傳輸穩(wěn)定、可靠,有效解決長距離串口通信問題。
5 Mesh網(wǎng)絡(luò)無線串口的特點
(1)能夠遠(yuǎn)距離串口通信。通信距離取決于單個節(jié)點的有效傳輸距離和跳數(shù),一般無功放模塊傳輸距離為100 m,經(jīng)過5跳可以傳輸500 m的距離。如果加上功放,單個節(jié)點的傳輸距離為1.5 km,5跳為7.5 km。缺點是加上功放,成本增加。
(2)Mesh網(wǎng)絡(luò)具有自愈能力,當(dāng)某條路徑被切斷,節(jié)點會自動尋找另外的路徑傳輸數(shù)據(jù),如圖15所示。
(3)兼容性好,易安裝。簡單的串口線連接。由圖4可知,從模塊中引出4根TTL電平的串口線,直接可以與嵌入式系統(tǒng)連接,或者加上MAX232便可以與PC連接。
6 結(jié)束語
利用ZigBee無線技術(shù)組成Mesh網(wǎng)絡(luò)實施串口通信,無線通信距離取決于單跳距離和跳數(shù),而默認(rèn)最大跳數(shù)為20,但多跳的出現(xiàn)會導(dǎo)致數(shù)據(jù)延時,出現(xiàn)誤碼。建議跳數(shù)控制在5跳之內(nèi),此時數(shù)據(jù)傳輸穩(wěn)定、時延短、誤碼率低,能有效地解決有線串口距離限制的問題。