基于nRF24L01的智能家居网络的设计
扫描二维码
随时随地手机看文章
引言
随着计算机、通信、自动控制和微电子技术的发展,无线传感网络成为当前研究热点,其主要应用领域涉及工业控制、环境监测和智能家居等。其中,智能家居应用尤为瞩目,旨在建立由家庭安全防护系统、网络服务系统和家庭自动化系统组成的家庭综合服务和管理集成系统,实现全面安全防护、便利通信网络以及舒适的居住环境。目前,在智能家居领域开发应用中,2.4GHz的ZigBee和900MHz频段的Z-Wave两大技术应用最为广泛。
Z-Wave是一种基于射频的低成本、低功耗、高可靠性的短距离无线通信技术,数据传输速率达9.6Kb/s,信号有效覆盖范围室内为30m,室外可超过100m;单一家庭网络最多可支持232个节点,足以满足一般家庭需求。目前,美国市场上已有成品的Z-Wave家居产品销售,包括各种家电控制设备,如Zensys公司推出的远程遥控器、插座等,然而Z-Wave联盟并没有开放其标准,束缚了系统的开发和扩展。
基于IEEE802.15.4协议的ZigBee技术是一种短距离的通信标准,有着近距离、低复杂度、自组织、低功耗、低数据速率的特点。由ZigBee协议标准可知,一个ZigBee网络可容纳65536台设备,有着250Kb/s的高带宽,且节点间通信具备较高的可靠性,再加上ZigBee联盟开放了这一标准,吸引了更多的厂商和研究机构对ZigBee的研究,使得ZigBee在智能家居中成为通行的国际标准。然而,ZigBee的器件成本相对较高,智能家居中无线传感器网络的建立需要一笔巨额费用。
针对上述问题,本文采用2.4GHz这一频段来实现无线数据传输,选用的NRF24L01芯片在此频段上具备较多的频点,能够解决家庭间信道干扰问题,同时搭配成本低廉的STM8S103F3组成智能节点,降低了节点的成本,也降低了开发难度。
1节点硬件设计
节点分为网关节点和普通节点:普通节点带有各类传感器,负责实时采集数据和网络组建;网关节点负责该网段网络的控制和数据的汇总、分析、上传。图1所示为网关节点和普通节点的结构图。
1.1MCU
STM8S103F3单片机具有用户可调整的16MHzCPU时钟频率,容量为8KB的Flash程序存储器,集成640B真正的数据存储器EEPROM和1KB的RAM,强大的I/O功能,具有16位高级控制定时器(TIM1)、SPI、I2C、UART、窗口看门狗、独立看门狗、ADC、PWM定时器(TIM2)、8位定时器(TIM4)等资源。单线接口模块(SWIM)和调试模块(DM),允许非侵入式、实时的在线调试和快速的存储器编程。STM8S103F3高度集成,精简外部电路可以设计出更小的节点。由于STM8S103F3单片机的这些特点,非常适合应用在无线传感器网络中。
1.2射频收发器件nRF24L01
nRF24L01是一款工作在2.4~2.5GHz世界通用工科医用频段的单片无线收发器芯片,芯片内置晶体振荡器、功率放大器、频率合成器以及调制器等功能模块,工作电压为1.9~3.6V,有多达125个频道可供选择,输出功率和通信信道可以通过软件进行配置。
nRF24L01采用SPI总线接口与外部微控制器通信,最高可达10Mb/s,数据发送传输最快可达2Mb/s。
芯片自动处理字头和CRC,当发送数据时,只需要配置相关寄存器,将发送的数据和接收地址发送给nRF24L01,它会自动完成数据的打包(加字头和CRC校验码)和发送;当接收数据时,nRF24L01自动检测载波并进行地址匹配,接收到正确数据后自动移去字头、地址和CRC校验码,mcu通过SPI读取数据即可。
2通信协议的设计
2.1网络地址的分配
节点的网络地址设置为5字节,前4个字节表示网段地址,最后一字节设置为0表示网关节点,设置为1~190表示传感器节点,191~254表示子网组播地址,255用于局部广播地址。理论上能划分232个网段,在单个网段内,可以容纳1个网关节点,190个传感器节点,划分44个子网。节点的网络地址事先写入MCU的EEPROM中,上电自动获取。
2.2数据传输模式
本次设计中数据传输的模式有单播、广播和组播3种。单播是指从网关节点到传感器节点或者传感器节点到网关节点数据的传输,是点对点通信;广播是指从一个节点到该网段的所有节点的通信;组播是指从网关节点到一组传感器节点的数据传输。
由于nRF24L01具有6个接收地址,将pipe0设置为单播使用,开启nRF24L01的自动应答和重发功能,pipe1设置为局部广播使用,pipe2设置为组播使用,在广播和组播时关闭自动应答和重发功能。
2.3MAC层协议
为了避免节点发送数据和接受数据时导致信道的冲突,在网络的MAC层采用CSMA/CA协议[3]。该协议就是在发送数据帧之前先对信道进行预约。图2所示是节点A-E分布图。图中,第一种情况是节点B、C、E在节点A的无线信号覆盖范围内,而D不在;第二种情况是节点B、A、D在节点B的无线信号覆盖范围内,而C不在。
图2 两种节点分布图
这样,可将CSMA/CA协议的实现流程分为两个部分,分别解决以下两个问题。
第一,当节点B和节点C都要向节点A发送数据时,会导致发送端数据的冲突。解决的方法可以采用在通信之前,节点设置为接收模式,利用nRF24L01的载波检测(CD)功能监听信道是否空闲。若检测到信道忙碌,则节点随机延迟一段时间后重新监听;若检测到信道空闲,则节点并不立即发送,而是采用一定的退避机制,将信道冲突的可能性降到最低。所以,节点随机退避一段时间后再进行发送。这里采用二进制指数退避算法BEB。
第二,当节点A和节点D都向节点B发送数据时,会导致接受端数据的冲突。解决的方法可以利用RTS/CTS/DATA/ACK握手机制。具体过程如下:
发送节点向接收节点发送前,先通过竞争方式获得信道使用权,再向接收节点发送请求连接帧(requesttosend,RTS)。
接收节点收到发送节点的RTS帧后,向外广播确认帧(cleartosend,CTS),里面包含发送节点地址,建立两者之Add1C1L1间的通信连接。
发送节点收到接收节点的CTS帧后,向接收节点发送数据帧DATA,若没有收到CTS帧,则重新发送RTS帧。
接收节点收到发送节点的DATA帧后,向从站发送数据确认帧ACK。
发送节点收到接收节点的ACK帧后,整个通信过程结束,若没有收到,则重新发送data。
2.4差错控制
在差错控制方面,系统采取数据重发机制与nRF24L01自身CRC校验相结合的方式。发送节点在发送RTS或DATA后,若在一定时间内没有收到接受节点的CTS或ACK,贝憧新发送传输失败的帧,直到接收到回复或重发次数达到设定值。另外,nRF24L01提供对CRC校验的硬件支持,通过设置RF配置寄存器,采取8位CRC校验[4]。当接收的数据CRC校验出错时,nRF24L01会自动丢弃错误帧。
2.5数据帧格式
nRF24L01在增强型ShockBurstTM模式下的数据包格式如图3所示。
将网络中所有节点的通道都配置为32字节模式,因此,一个数据帧可以发送32字节。其中数据帧的格式如图4所示。
图4中,Networksegment为4字节,Sendaddress为1字节,Receiveaddress为1字节,Sourceaddress为1字节,CMD为1字节,剩下的24字节为data。Cmd具体含义见表1所列。
2.6路由表的初始化和维护
在设计中,每个节点都要保存它下一跳的路径,也就是要保存它的邻居节点信息。每个节点的路由表结构图5所示。
Addi是邻居节点地址,Ci表示该节点与它第i个邻居通信所需要的cost,Li表示节点通过第i个邻居向网关节点发送数据所需要的cost。邻居节点在路由表中的位置按照Li从小到大的顺序排列。L1是节点的mincost。数据发送时按照mincost发送。
3实验测试
笔者制作了7个节点模块,通过软件将网络地址前4个字节统一写为00:FF:EE:FF,最后一位分别写为0,1,2,3,10,12,34,66。将7个节点模块放置在2个房间中,上电组网测试。
通过实验得出:点对点通信时,在无障碍物时距离可以达到30m,有一墙之隔时可传输10m。对于单播和广播通信正常,丢包率不到0.5%。
4结语
本设计采用2.4GHz这一频段来实现无线数据传输,考虑到选用的nRF24L01芯片在此频段上具备较多的频点,能够解决家庭间信道干扰问题,同时搭配成本低廉的STM8S103F3组成智能节点,可降低节点成本,也降低了开发难度。本文阐述了系统中的硬件模块实现,家庭内部无线传感器网络的通信协议及通信数据包的设计方法,最后测试系统的可行性及稳定性。