引言
隨著計算機、通信、自動控制和微電子技術的發(fā)展,無線傳感網絡成為當前研究熱點,其主要應用領域涉及工業(yè)控制、環(huán)境監(jiān)測和智能家居等。其中,智能家居應用尤為矚目,旨在建立由家庭安全防護系統(tǒng)、網絡服務系統(tǒng)和家庭自動化系統(tǒng)組成的家庭綜合服務和管理集成系統(tǒng),實現(xiàn)全面安全防護、便利通信網絡以及舒適的居住環(huán)境。目前,在智能家居領域開發(fā)應用中,2.4GHz的ZigBee和900MHz頻段的Z-Wave兩大技術應用最為廣泛。
Z-Wave是一種基于射頻的低成本、低功耗、高可靠性的短距離無線通信技術,數(shù)據(jù)傳輸速率達9.6Kb/s,信號有效覆蓋范圍室內為30m,室外可超過100m;單一家庭網絡最多可支持232個節(jié)點,足以滿足一般家庭需求。目前,美國市場上已有成品的Z-Wave家居產品銷售,包括各種家電控制設備,如Zensys公司推出的遠程遙控器、插座等,然而Z-Wave聯(lián)盟并沒有開放其標準,束縛了系統(tǒng)的開發(fā)和擴展。
基于IEEE802.15.4協(xié)議的ZigBee技術是一種短距離的通信標準,有著近距離、低復雜度、自組織、低功耗、低數(shù)據(jù)速率的特點。由ZigBee協(xié)議標準可知,一個ZigBee網絡可容納65536臺設備,有著250Kb/s的高帶寬,且節(jié)點間通信具備較高的可靠性,再加上ZigBee聯(lián)盟開放了這一標準,吸引了更多的廠商和研究機構對ZigBee的研究,使得ZigBee在智能家居中成為通行的國際標準。然而,ZigBee的器件成本相對較高,智能家居中無線傳感器網絡的建立需要一筆巨額費用。
針對上述問題,本文采用2.4GHz這一頻段來實現(xiàn)無線數(shù)據(jù)傳輸,選用的NRF24L01芯片在此頻段上具備較多的頻點,能夠解決家庭間信道干擾問題,同時搭配成本低廉的STM8S103F3組成智能節(jié)點,降低了節(jié)點的成本,也降低了開發(fā)難度。
1節(jié)點硬件設計
節(jié)點分為網關節(jié)點和普通節(jié)點:普通節(jié)點帶有各類傳感器,負責實時采集數(shù)據(jù)和網絡組建;網關節(jié)點負責該網段網絡的控制和數(shù)據(jù)的匯總、分析、上傳。圖1所示為網關節(jié)點和普通節(jié)點的結構圖。
1.1MCU
STM8S103F3單片機具有用戶可調整的16MHzCPU時鐘頻率,容量為8KB的Flash程序存儲器,集成640B真正的數(shù)據(jù)存儲器EEPROM和1KB的RAM,強大的I/O功能,具有16位高級控制定時器(TIM1)、SPI、I2C、UART、窗口看門狗、獨立看門狗、ADC、PWM定時器(TIM2)、8位定時器(TIM4)等資源。單線接口模塊(SWIM)和調試模塊(DM),允許非侵入式、實時的在線調試和快速的存儲器編程。STM8S103F3高度集成,精簡外部電路可以設計出更小的節(jié)點。由于STM8S103F3單片機的這些特點,非常適合應用在無線傳感器網絡中。
1.2射頻收發(fā)器件nRF24L01
nRF24L01是一款工作在2.4~2.5GHz世界通用工科醫(yī)用頻段的單片無線收發(fā)器芯片,芯片內置晶體振蕩器、功率放大器、頻率合成器以及調制器等功能模塊,工作電壓為1.9~3.6V,有多達125個頻道可供選擇,輸出功率和通信信道可以通過軟件進行配置。
nRF24L01采用SPI總線接口與外部微控制器通信,最高可達10Mb/s,數(shù)據(jù)發(fā)送傳輸最快可達2Mb/s。
芯片自動處理字頭和CRC,當發(fā)送數(shù)據(jù)時,只需要配置相關寄存器,將發(fā)送的數(shù)據(jù)和接收地址發(fā)送給nRF24L01,它會自動完成數(shù)據(jù)的打包(加字頭和CRC校驗碼)和發(fā)送;當接收數(shù)據(jù)時,nRF24L01自動檢測載波并進行地址匹配,接收到正確數(shù)據(jù)后自動移去字頭、地址和CRC校驗碼,mcu通過SPI讀取數(shù)據(jù)即可。
2通信協(xié)議的設計
2.1網絡地址的分配
節(jié)點的網絡地址設置為5字節(jié),前4個字節(jié)表示網段地址,最后一字節(jié)設置為0表示網關節(jié)點,設置為1~190表示傳感器節(jié)點,191~254表示子網組播地址,255用于局部廣播地址。理論上能劃分232個網段,在單個網段內,可以容納1個網關節(jié)點,190個傳感器節(jié)點,劃分44個子網。節(jié)點的網絡地址事先寫入MCU的EEPROM中,上電自動獲取。
2.2數(shù)據(jù)傳輸模式
本次設計中數(shù)據(jù)傳輸?shù)哪J接袉尾?、廣播和組播3種。單播是指從網關節(jié)點到傳感器節(jié)點或者傳感器節(jié)點到網關節(jié)點數(shù)據(jù)的傳輸,是點對點通信;廣播是指從一個節(jié)點到該網段的所有節(jié)點的通信;組播是指從網關節(jié)點到一組傳感器節(jié)點的數(shù)據(jù)傳輸。
由于nRF24L01具有6個接收地址,將pipe0設置為單播使用,開啟nRF24L01的自動應答和重發(fā)功能,pipe1設置為局部廣播使用,pipe2設置為組播使用,在廣播和組播時關閉自動應答和重發(fā)功能。
2.3MAC層協(xié)議
為了避免節(jié)點發(fā)送數(shù)據(jù)和接受數(shù)據(jù)時導致信道的沖突,在網絡的MAC層采用CSMA/CA協(xié)議[3]。該協(xié)議就是在發(fā)送數(shù)據(jù)幀之前先對信道進行預約。圖2所示是節(jié)點A-E分布圖。圖中,第一種情況是節(jié)點B、C、E在節(jié)點A的無線信號覆蓋范圍內,而D不在;第二種情況是節(jié)點B、A、D在節(jié)點B的無線信號覆蓋范圍內,而C不在。
圖2 兩種節(jié)點分布圖
這樣,可將CSMA/CA協(xié)議的實現(xiàn)流程分為兩個部分,分別解決以下兩個問題。
第一,當節(jié)點B和節(jié)點C都要向節(jié)點A發(fā)送數(shù)據(jù)時,會導致發(fā)送端數(shù)據(jù)的沖突。解決的方法可以采用在通信之前,節(jié)點設置為接收模式,利用nRF24L01的載波檢測(CD)功能監(jiān)聽信道是否空閑。若檢測到信道忙碌,則節(jié)點隨機延遲一段時間后重新監(jiān)聽;若檢測到信道空閑,則節(jié)點并不立即發(fā)送,而是采用一定的退避機制,將信道沖突的可能性降到最低。所以,節(jié)點隨機退避一段時間后再進行發(fā)送。這里采用二進制指數(shù)退避算法BEB。
第二,當節(jié)點A和節(jié)點D都向節(jié)點B發(fā)送數(shù)據(jù)時,會導致接受端數(shù)據(jù)的沖突。解決的方法可以利用RTS/CTS/DATA/ACK握手機制。具體過程如下:
發(fā)送節(jié)點向接收節(jié)點發(fā)送前,先通過競爭方式獲得信道使用權,再向接收節(jié)點發(fā)送請求連接幀(requesttosend,RTS)。
接收節(jié)點收到發(fā)送節(jié)點的RTS幀后,向外廣播確認幀(cleartosend,CTS),里面包含發(fā)送節(jié)點地址,建立兩者之Add1C1L1間的通信連接。
發(fā)送節(jié)點收到接收節(jié)點的CTS幀后,向接收節(jié)點發(fā)送數(shù)據(jù)幀DATA,若沒有收到CTS幀,則重新發(fā)送RTS幀。
接收節(jié)點收到發(fā)送節(jié)點的DATA幀后,向從站發(fā)送數(shù)據(jù)確認幀ACK。
發(fā)送節(jié)點收到接收節(jié)點的ACK幀后,整個通信過程結束,若沒有收到,則重新發(fā)送data。
2.4差錯控制
在差錯控制方面,系統(tǒng)采取數(shù)據(jù)重發(fā)機制與nRF24L01自身CRC校驗相結合的方式。發(fā)送節(jié)點在發(fā)送RTS或DATA后,若在一定時間內沒有收到接受節(jié)點的CTS或ACK,貝憧新發(fā)送傳輸失敗的幀,直到接收到回復或重發(fā)次數(shù)達到設定值。另外,nRF24L01提供對CRC校驗的硬件支持,通過設置RF配置寄存器,采取8位CRC校驗[4]。當接收的數(shù)據(jù)CRC校驗出錯時,nRF24L01會自動丟棄錯誤幀。
2.5數(shù)據(jù)幀格式
nRF24L01在增強型ShockBurstTM模式下的數(shù)據(jù)包格式如圖3所示。
將網絡中所有節(jié)點的通道都配置為32字節(jié)模式,因此,一個數(shù)據(jù)幀可以發(fā)送32字節(jié)。其中數(shù)據(jù)幀的格式如圖4所示。
圖4中,Networksegment為4字節(jié),Sendaddress為1字節(jié),Receiveaddress為1字節(jié),Sourceaddress為1字節(jié),CMD為1字節(jié),剩下的24字節(jié)為data。Cmd具體含義見表1所列。
2.6路由表的初始化和維護
在設計中,每個節(jié)點都要保存它下一跳的路徑,也就是要保存它的鄰居節(jié)點信息。每個節(jié)點的路由表結構圖5所示。
Addi是鄰居節(jié)點地址,Ci表示該節(jié)點與它第i個鄰居通信所需要的cost,Li表示節(jié)點通過第i個鄰居向網關節(jié)點發(fā)送數(shù)據(jù)所需要的cost。鄰居節(jié)點在路由表中的位置按照Li從小到大的順序排列。L1是節(jié)點的mincost。數(shù)據(jù)發(fā)送時按照mincost發(fā)送。
3實驗測試
筆者制作了7個節(jié)點模塊,通過軟件將網絡地址前4個字節(jié)統(tǒng)一寫為00:FF:EE:FF,最后一位分別寫為0,1,2,3,10,12,34,66。將7個節(jié)點模塊放置在2個房間中,上電組網測試。
通過實驗得出:點對點通信時,在無障礙物時距離可以達到30m,有一墻之隔時可傳輸10m。對于單播和廣播通信正常,丟包率不到0.5%。
4結語
本設計采用2.4GHz這一頻段來實現(xiàn)無線數(shù)據(jù)傳輸,考慮到選用的nRF24L01芯片在此頻段上具備較多的頻點,能夠解決家庭間信道干擾問題,同時搭配成本低廉的STM8S103F3組成智能節(jié)點,可降低節(jié)點成本,也降低了開發(fā)難度。本文闡述了系統(tǒng)中的硬件模塊實現(xiàn),家庭內部無線傳感器網絡的通信協(xié)議及通信數(shù)據(jù)包的設計方法,最后測試系統(tǒng)的可行性及穩(wěn)定性。





