錢光明 易超
摘 ?要: 物聯(lián)網(wǎng)相關(guān)課程的實驗及演示非常重要。文章以nRF24L01無線模塊和STM32F103單片機組成基本無線節(jié)點,設(shè)計教學(xué)模板程序,對同步和輪轉(zhuǎn)發(fā)包這樣的基本通信手段進行實驗。實驗強調(diào)軟件和硬件相結(jié)合,需要學(xué)生從細節(jié)入手,充分理解相關(guān)原理,有助于他們真正認識無線網(wǎng)絡(luò)中相關(guān)重要概念的基本實現(xiàn)。
關(guān)鍵詞: 同步; 基本無線節(jié)點; 自動應(yīng)答; 輪轉(zhuǎn)發(fā)包
中圖分類號:TP393.1 ? ? ? ? ?文獻標識碼:A ? ? 文章編號:1006-8228(2020)06-109-03
Abstract: The experiment and demonstration of Internet of Things related courses are very important. In this paper, with a basic wireless node consisted of nRF24L01 wireless module and STM32F103 single-chip microcomputer, the teaching template program is designed to carry out the experiments on the basic communication methods such as synchronization and packet delivery with round robin. The experiment emphasizes the combination of software and hardware, and students need to start with details and fully understand the relevant principles, which is helpful for them to truly understand the basic implementation of the relevant important concepts in wireless networks.
Key words: synchronization; basic wireless node; auto acknowledgment; round robin delivery
0 引言
關(guān)于短距離無線網(wǎng)課程內(nèi)容的安排,有些學(xué)校偏向于介紹藍牙和ZigBee等多種協(xié)議,而這些協(xié)議有的其實非常復(fù)雜[1]。課堂上堆積太多的理論和協(xié)議文件,有時會損害學(xué)生的學(xué)習(xí)興趣。并且,相關(guān)實驗教學(xué)的內(nèi)容,也不宜只注重于協(xié)議的高層。較底層的教學(xué)演示和典型無線原理的底層實現(xiàn),對于引導(dǎo)學(xué)生、啟發(fā)學(xué)生、提高學(xué)生興趣來說,無疑是至關(guān)重要的。我們用淘寶網(wǎng)購的nRF24L01無線模塊和STM32F103RCT6單片機組成價格實惠的基本無線節(jié)點(下稱基本節(jié)點) [2-3],針對同步和輪轉(zhuǎn)發(fā)包等基本的通信手段,設(shè)計了相應(yīng)的教學(xué)模板程序和演示實驗。
1 實驗設(shè)計
1.1 網(wǎng)絡(luò)基本組成和工作方式
圖1是實驗用簡單無線局域網(wǎng)示意圖,一個主節(jié)點,三個從節(jié)點。主節(jié)點和每一個從節(jié)點的硬件組成(一個基本節(jié)點)完全相同,如節(jié)點2所示,即nRF24L01無線模塊通過SPI總線與單片機STM32F103RCT6相接。
三個從節(jié)點以輪轉(zhuǎn)方式向主節(jié)點發(fā)送數(shù)據(jù)包。輪轉(zhuǎn)方式是網(wǎng)絡(luò)通信的一種傳統(tǒng)方式[4-5],看似簡單,不過首先就需要節(jié)點同步。
通電后,網(wǎng)絡(luò)首先進入同步階段。這一階段中,每個節(jié)點的nRF24L01均設(shè)置為 “非自動應(yīng)答”方式,即不能自動應(yīng)答[2]。每個從節(jié)點一開始處于等待狀態(tài)(nRF24L01置于無線接收方式),即等待主節(jié)點發(fā)來同步包。從節(jié)點成功接收同步包后,就認為同步階段結(jié)束。主節(jié)點成功發(fā)送同步包后,也認為同步階段結(jié)束。
同步階段之后,進入數(shù)據(jù)發(fā)送階段,每個從節(jié)點以一定時間間隔輪流向主節(jié)點發(fā)送數(shù)據(jù)包。在這一階段,每個節(jié)點的nRF24L01可以設(shè)置為“非自動應(yīng)答”方式,也可以設(shè)置為“自動應(yīng)答”方式?!白詣討?yīng)答”的主要原理是:發(fā)送方(本階段為從節(jié)點)發(fā)包后,接收方(本階段為主節(jié)點)如果接收無誤,則硬件自動快速地產(chǎn)生一個簡短的應(yīng)答包(ACK包)并發(fā)出,發(fā)送方收到該ACK包后,就認為本次發(fā)送成功,并可產(chǎn)生中斷。
1.2 “非自動應(yīng)答”方式的輪轉(zhuǎn)發(fā)包
采用“非自動應(yīng)答”方式通信時,節(jié)點中nRF24L01的設(shè)置相對簡單,如表1所示。這里還要用到nRF24L01中的“管道”概念[2]。在同步階段,所有從節(jié)點使用的都是管道0。而在數(shù)據(jù)發(fā)送階段,主節(jié)點也使用管道0來接收來自從節(jié)點0、從節(jié)點1和從節(jié)點2的數(shù)據(jù)包。
表1中的英文縮寫含義參見文獻[2]。例如,節(jié)點的無線地址寬度寄存器表示為SETUP_AW,選擇地址寬度為5字節(jié)就使SETUP_AW=0x03,如主節(jié)點在同步階段的5字節(jié)發(fā)送地址為0xE7E7E7E7E7。又如,EN_AA代表硬件自動應(yīng)答寄存器。采用“非自動應(yīng)答”方式,主從節(jié)點都設(shè)EN_AA=0x00。
關(guān)于輪轉(zhuǎn)的時間,可以如圖2所示安排:同步后,從節(jié)點0立即發(fā)出數(shù)據(jù)包,而對于從節(jié)點1和2,同步后要分別等待T和2T時間后,才發(fā)出各自的數(shù)據(jù)包。數(shù)據(jù)包負載的第一個字節(jié)設(shè)計為節(jié)點的編號,以便主節(jié)點區(qū)分數(shù)據(jù)來自哪一從節(jié)點。利用串口調(diào)試助手,可以直觀地演示出實驗結(jié)果,主節(jié)點情況如圖3所示。圖3中,同步正確后從節(jié)點即輪流發(fā)包,圖中數(shù)字40代表nRF24L01的狀態(tài)寄存器STATUS中6號位為1,即接收數(shù)據(jù)準備好標志RX_DR有效。
1.3 “自動應(yīng)答”方式的輪轉(zhuǎn)發(fā)包
圖2中沒有設(shè)計應(yīng)答包(ACK包),從節(jié)點發(fā)送完數(shù)據(jù)包后,不知道主節(jié)點到底收到了沒有。而如果采用“自動應(yīng)答”方式,發(fā)送方可以較快速地知道對方是否已正確收包,程序中不需要專門準備ACK包。按照nRF24L01的設(shè)計,采用同一個頻率通道,一個主節(jié)點可以接收來自六個從節(jié)點的數(shù)據(jù)包。如表2是相關(guān)的參數(shù)設(shè)置。
表2與表1的差異主要在數(shù)據(jù)發(fā)送階段。表2中,主節(jié)點收到任一從節(jié)點的數(shù)據(jù)包后都要硬件自動應(yīng)答(發(fā)ACK包),故設(shè)EN_AA=0x07,并且,從節(jié)點通過管道0發(fā)出數(shù)據(jù)包后需要等待這樣的ACK包,需要使能其管道0的自動應(yīng)答,所以EN_AA=0x01。三個從節(jié)點都使用管道0來接收ACK包,接收地址就是各自的發(fā)送地址,這幾個地址對于這幾個從節(jié)點是不一樣的,主節(jié)點可以據(jù)此判斷數(shù)據(jù)包來自哪一從節(jié)點,而不需要如表1那樣在數(shù)據(jù)包負載中作專門安排。另外,主節(jié)點管道2的接收地址與管道1的只差一個低8位,寫入寄存器RX_ADDR_P2時只需寫入這一個字節(jié)。
類似地,“自動應(yīng)答”方式的輪轉(zhuǎn)設(shè)計和主節(jié)點串口助手演示分別如圖4和圖5。圖4與圖2的不同在于每個節(jié)點都要處理ACK包。例如,發(fā)出一個數(shù)據(jù)包后從節(jié)點如果沒收到ACK包,則認為本次發(fā)送不成功。圖5中的數(shù)字40、42和44則分別是接收三個從節(jié)點數(shù)據(jù)包后,主節(jié)點nRF24L01中STATUS寄存器的值。高位4表示RX_DR=1,低位0、2和4分別表示管道0、管道1和管道2。
2 結(jié)束語
文中基于無線芯片nRF24L01,以“非自動應(yīng)答”和“自動應(yīng)答”方式,實現(xiàn)了一個簡單的四節(jié)點星型網(wǎng)。通過串口調(diào)試助手軟件,可以較直觀地演示輪轉(zhuǎn)發(fā)包和收包效果。教學(xué)實踐中激發(fā)了學(xué)生的學(xué)習(xí)興趣,并促使學(xué)生較好地體會了同步、定時、輪轉(zhuǎn)調(diào)度等基本原理的實現(xiàn)。文中的節(jié)點硬件構(gòu)成簡單、經(jīng)濟實惠,并且可設(shè)計進一步的拓展實驗。例如,可以通過設(shè)定SETUP_RETR為非零值,來設(shè)置自動重發(fā)次數(shù)和改變?nèi)笔〉淖詣又匕l(fā)延遲。還可以進行以競爭方式實現(xiàn)收發(fā)包的實驗等。
參考文獻(References):
[1] Bluetooth SIG Proprietary. BLUETOOTH CORESPECIFICATION Version: 5.2[Z].https://www.bluetooth.com,2019.
[2] Nordic Semiconductors. nRF24L01+Single Chip 2.4GHzTransceiver Product Specification v1.0[Z]. https://infocenter.nordicsemi.com,2008.
[3] STMicroelectronics.STM32F103xC STM32F103xDSTM32F103xE Datasheet production data[Z]. https://www.st.com,2018.
[4] 肖敏.交換機及交換網(wǎng)仿真技術(shù)研究[D].湖南師范大學(xué),2010.
[5] 段敏.基于iSLIP算法的FIFO特性研究[D].湖南師范大學(xué),2010.