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