短距离无线网的一个教学实验设计
2020-06-30钱光明易超
钱光明 易超
摘 要: 物联网相关课程的实验及演示非常重要。文章以nRF24L01无线模块和STM32F103单片机组成基本无线节点,设计教学模板程序,对同步和轮转发包这样的基本通信手段进行实验。实验强调软件和硬件相结合,需要学生从细节入手,充分理解相关原理,有助于他们真正认识无线网络中相关重要概念的基本实现。
关键词: 同步; 基本无线节点; 自动应答; 轮转发包
中图分类号: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 引言
关于短距离无线网课程内容的安排,有些学校偏向于介绍蓝牙和ZigBee等多种协议,而这些协议有的其实非常复杂[1]。课堂上堆积太多的理论和协议文件,有时会损害学生的学习兴趣。并且,相关实验教学的内容,也不宜只注重于协议的高层。较底层的教学演示和典型无线原理的底层实现,对于引导学生、启发学生、提高学生兴趣来说,无疑是至关重要的。我们用淘宝网购的nRF24L01无线模块和STM32F103RCT6单片机组成价格实惠的基本无线节点(下称基本节点) [2-3],针对同步和轮转发包等基本的通信手段,设计了相应的教学模板程序和演示实验。
1 实验设计
1.1 网络基本组成和工作方式
图1是实验用简单无线局域网示意图,一个主节点,三个从节点。主节点和每一个从节点的硬件组成(一个基本節点)完全相同,如节点2所示,即nRF24L01无线模块通过SPI总线与单片机STM32F103RCT6相接。
三个从节点以轮转方式向主节点发送数据包。轮转方式是网络通信的一种传统方式[4-5],看似简单,不过首先就需要节点同步。
通电后,网络首先进入同步阶段。这一阶段中,每个节点的nRF24L01均设置为 “非自动应答”方式,即不能自动应答[2]。每个从节点一开始处于等待状态(nRF24L01置于无线接收方式),即等待主节点发来同步包。从节点成功接收同步包后,就认为同步阶段结束。主节点成功发送同步包后,也认为同步阶段结束。
同步阶段之后,进入数据发送阶段,每个从节点以一定时间间隔轮流向主节点发送数据包。在这一阶段,每个节点的nRF24L01可以设置为“非自动应答”方式,也可以设置为“自动应答”方式。“自动应答”的主要原理是:发送方(本阶段为从节点)发包后,接收方(本阶段为主节点)如果接收无误,则硬件自动快速地产生一个简短的应答包(ACK包)并发出,发送方收到该ACK包后,就认为本次发送成功,并可产生中断。
1.2 “非自动应答”方式的轮转发包
采用“非自动应答”方式通信时,节点中nRF24L01的设置相对简单,如表1所示。这里还要用到nRF24L01中的“管道”概念[2]。在同步阶段,所有从节点使用的都是管道0。而在数据发送阶段,主节点也使用管道0来接收来自从节点0、从节点1和从节点2的数据包。
表1中的英文缩写含义参见文献[2]。例如,节点的无线地址宽度寄存器表示为SETUP_AW,选择地址宽度为5字节就使SETUP_AW=0x03,如主节点在同步阶段的5字节发送地址为0xE7E7E7E7E7。又如,EN_AA代表硬件自动应答寄存器。采用“非自动应答”方式,主从节点都设EN_AA=0x00。
关于轮转的时间,可以如图2所示安排:同步后,从节点0立即发出数据包,而对于从节点1和2,同步后要分别等待T和2T时间后,才发出各自的数据包。数据包负载的第一个字节设计为节点的编号,以便主节点区分数据来自哪一从节点。利用串口调试助手,可以直观地演示出实验结果,主节点情况如图3所示。图3中,同步正确后从节点即轮流发包,图中数字40代表nRF24L01的状态寄存器STATUS中6号位为1,即接收数据准备好标志RX_DR有效。
1.3 “自动应答”方式的轮转发包
图2中没有设计应答包(ACK包),从节点发送完数据包后,不知道主节点到底收到了没有。而如果采用“自动应答”方式,发送方可以较快速地知道对方是否已正确收包,程序中不需要专门准备ACK包。按照nRF24L01的设计,采用同一个频率通道,一个主节点可以接收来自六个从节点的数据包。如表2是相关的参数设置。
表2与表1的差异主要在数据发送阶段。表2中,主节点收到任一从节点的数据包后都要硬件自动应答(发ACK包),故设EN_AA=0x07,并且,从节点通过管道0发出数据包后需要等待这样的ACK包,需要使能其管道0的自动应答,所以EN_AA=0x01。三个从节点都使用管道0来接收ACK包,接收地址就是各自的发送地址,这几个地址对于这几个从节点是不一样的,主节点可以据此判断数据包来自哪一从节点,而不需要如表1那样在数据包负载中作专门安排。另外,主节点管道2的接收地址与管道1的只差一个低8位,写入寄存器RX_ADDR_P2时只需写入这一个字节。
类似地,“自动应答”方式的轮转设计和主节点串口助手演示分别如图4和图5。图4与图2的不同在于每个节点都要处理ACK包。例如,发出一个数据包后从节点如果没收到ACK包,则认为本次发送不成功。图5中的数字40、42和44则分别是接收三个从节点数据包后,主节点nRF24L01中STATUS寄存器的值。高位4表示RX_DR=1,低位0、2和4分別表示管道0、管道1和管道2。
2 结束语
文中基于无线芯片nRF24L01,以“非自动应答”和“自动应答”方式,实现了一个简单的四节点星型网。通过串口调试助手软件,可以较直观地演示轮转发包和收包效果。教学实践中激发了学生的学习兴趣,并促使学生较好地体会了同步、定时、轮转调度等基本原理的实现。文中的节点硬件构成简单、经济实惠,并且可设计进一步的拓展实验。例如,可以通过设定SETUP_RETR为非零值,来设置自动重发次数和改变缺省的自动重发延迟。还可以进行以竞争方式实现收发包的实验等。
参考文献(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] 肖敏.交换机及交换网仿真技术研究[D].湖南师范大学,2010.
[5] 段敏.基于iSLIP算法的FIFO特性研究[D].湖南师范大学,2010.