您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 基于nRF24L01P的智能家居无线组网方案的设计
76•电子技术与软件工程 ElectronicTechnology&SoftwareEngineering人工智能•ArtificialIntelligence随着物联网技术的发展,智能网络和信息家电已越来越多地出现在人们的生活当中,如何建立一个高性能、低成本的智能家居系统也已成为当前研究的一个热点问题。目前,这一领域的国际标准尚未成熟,无线组网方案也没有统一。其中,基于Wi-Fi和zigbee技术的无线组网方案受到较多的关注。然而,这些技术在协议栈层面并未专门针对智能家居应用进行有效的功能剪裁和优化,因而具有较大的软硬件资源开销和成本代价。如zigbee协议栈应用了AODVjr和Cluster-Tree相结合的路由算法[1][2],以满足各种复杂的动态网络拓扑结构,这对于智能家居中大多数节点位置相对固定,网络拓扑结构相对稳定的实际情况来说,较为冗余。本文设计了一种专用于智能家居领域的无线组网方案,以达到简单实用的目的。1网络整体模型1.1 节点类型在本设计中,智能家居网络由三种类型的节点构成:房间父节点(以下简称父节点)、房间子节点(以下简称子节点)和自由节点。一个房间内安置至少一个父节点和若干个子节点,它们不具备或仅具备有限的移动性,如各种灯节点、插座节点、自动窗(帘)节点、安防节点等。处于一个房间内的任意两个节点,相互之间处于对方的网络信号覆盖范围内,因而可以直接进行通讯。不同房间的两个节点之间,空间距离较远,加之有墙壁阻挡等原因,不能保证网络信号相互覆盖,因而需要采用一定的路由机制进行通讯。基于nRF24L01P的智能家居无线组网方案的设计文/李增雷【关键词】智能家居 无线组网 nRF24L01P 多跳路由本文提出并设计了一种基于nRF24L01P的智能家居无线组网方案,对网络整体模型和节点的物理层、链路层以及网络层进行了较为详细的设计与说明。该组网方案专门针对智能家居应用而设计,具有简单实用,成本低等优点。摘要父节点相比子节点,具有更大的无线发射功率,可以直接与相邻房间内的其他父节点进行通讯。父节点还具有多跳路由的功能,能够转发来自其子节点、其他父节点或自由节点的报文。父节点一般可以指定为房间的主灯节点。不同于上述父节点和子节点,自由节点具有很大的移动性,不局限于某个特定的居室空间,如便携式智能家居控制终端、智能拖地机等。这种节点必须依靠其网络信号覆盖范围内的某个父节点作为路由,才能与其他节点进行通讯。1.2 网络拓扑整个智能家居无线网络的拓扑结构如图1所示。从图中可以看出,本智能家居无线网络可以认为是一种双层网状网结构:所有父节点和自由节点组成上层网状网,每个父节点和其子节点组成下层网状网。1.3 寻址机制在本智能家居网络中,每个父节点或子节点均处于一个特定的房间内,因而,如果我们将房间进行编号,再将房间内的每个节点进行编号,则可以唯一的访问每个节点。自由节点不属于任何一个房间,可以认为它们的房间号为0。我们同时约定,父节点的节点号为0。房间号和节点号均为0的地址,留作广播地址,不能赋予任何节点。一般家庭的房间数不会大于16个,如“四室两厅一厨两卫”的户型结构,总房间数为9个,用半个字节的数据结构则可以完全满足房间编号的需求。对于节点号,考虑到每个房间可能有多盏辅灯、多个安防节点,因而采用一个字节来表示节点号就较为合理。不同的家庭可能均采用本组网方案,因而需要引入“家庭图1:智能家居无线网络拓扑图2:节点分层模型及相应的传输数据格式2013-06-1318:16电子技术与软件工程•77ArtificialIntelligence•人工智能网络号”来区分不同的网络,只有具有相同家庭网络号的节点之间才能通讯。1.4 节点模型从OSI参考模型的角度分析,本网络中的节点由物理层、链路层、网络层和应用层组成。每一层使用下层提供的服务,并向上层提供服务。其中,物理层和链路层主要由nRF24L01P芯片实现,提供了单个节点的无线收发以及相邻节点之间的数据帧通讯。网络层提供了路由功能,实现了网络中任意两个节点之间的报文传输。同时,我们规定了应用端口服务作为应用层框架,实现了节点之间服务和资源的共享。每一层传输的数据格式如图2所示:图中,物理层数据帧的同步域由nRF24L01P芯片发送数据时自动生成,能够实现各个接收节点的数据帧同步。在链路层数据帧中,接收房间号和节点号是数据帧需要到达的目的地址,可能是报文传输的目的地址,也可能是中间路由节点的地址。包控制域和CRC校验域也是由nRF24L01P芯片发送数据时自动生成,前者提供报文长度计数和数据重传相关功能,后者用来确保数据的完整性。网络层报文中目的房间号和节点号是报文传输的目的节点地址,源房间号和节点号是报文产生的源头节点地址。应用层报文中,端口号对应不同的端口服务,每种端口服务接收相应的参数用来指导服务的执行过程。应用层的实现由各节点生产厂商根据节点的实际情况进行设计。以下仅对物理层、链路层和网络层进行简要分析与设计。2物理层和链路层设计物理层和链路层主要由nRF24L01P芯片硬件实现。nRF24L01是由NORDIC公司生产的工作在2.4GHz全球免申请ISM频段的单片无线收发器芯片。该芯片具有126个通讯频道,支持2Mbps、1Mbps和250kbps的空中数据传输速率,发射功率可设置为0dBm、-6dBm、-12dBm和-18dBm,内置增强型ShockBurst基带协议引擎,支持自动应答及重发,内置地址及CRC数据校验模功能。该芯片通过SPI接口与MCU连接,最高通信速率可达10MHz。为了实现完整的物理层和链路层,我们还需要对该芯片进行软件设置。本设计默认采用2Mbps的空中数据传输速率,3个字节的地址长度,2个字节的CRC校验模式,使能动态数据包长度。对于SPI传输速度等设置,均可以根据实际情况由厂商进行出厂设置或由用户借助人机交互节点进行在线设置,此处不再详述。现主要对三个方面进行简单介绍:信道选取,功率限制和冲突退避。2.1 信道选取因为Wi-Fi、蓝牙、zigbee等常用无线通讯技术均使用2.4GHz网络,因而在本设计中的信道选取上,需要考虑到与这些网络的共存。其中,蓝牙通讯采用跳频技术,占用某个特定信道的时间和概率很小,因而可以忽略其与智能家居网络之间的相互干扰。Wi-Fi将2.4GHz频段划分为11个直扩信道,系统可选定其中任一信道进行通信,信道带宽为22MHz,Zigbee则把该频段划分为16个信道,每个信道带宽为2MHz。图3显示了Wi-Fi和Zigbee所占用的信道。图中用红色突出显示的是Wi-Fi和Zigbee之间已经冲突的信道。从图中可以看出,为了实现较少的信号干扰,以2MHz为信道带宽,则本智能家居优选的信道为2.402GHz、2.422GHz、2.448GHz、2.452GHz、2.472GHz和2.478GHz。节点出厂默认信道可以设置为2.448GHz,此值可以通过具有网络性能诊断功能的人机交互节点进行调整。2.2 功率限制父节点与其他父节点进行通讯时,应该具有较大的发射功率,可以设置为0dBm。其他情况下,如父节点与其子节点之间、同房间内的子节点之间进行通讯时,如果发射功率过大,除了浪费能源,还会导致信道的不必要占用。最理想的情况为,同房间内节点间的通讯信号无线覆盖范围刚好限制在本房间内,这样可以实现不同房间的通讯并发进行而不相互干扰。子节点出厂默认发射功率可以设置为-6dBm,当然此值也可以根据房间大小等因素进行调整。对于自由节点,因为数据收发依靠临近的父节点作为路由,发射功率无需很大,因而与子节点情况类似,出厂默认发射功率也可设为-6dBm。2.3 冲突退避如果多个节点同时发送数据,则会导致网络冲突,此时应当采取一定的冲突退避机制以降低再冲突的概率。在本设计中,我们根据节点地址来设置nRF24L01P芯片的重发时间间隔。不同节点的地址不同,因而重发时间间隔也不同,这样当两个节点同时发送数据导致冲突时,重发的数据包将不再产生冲突。冲突退避的过程当中,数据包的最小重发时间间隔应当大于单个数据包的最大传输时间开销,否则可能导致冲突节点重发的数据包依然在时间上有部分重叠。上述时间开销应当同时包括接收节点从接收模式转换为应答发送模式的转换时间和应答包的空中传输时间。根据图2不难算出,网络中最大的数据包长度为313bit,则空中传输时间为156.5μs,应答包在链路层中的负载数据为0bit长度,总数据包长57bit,则空中传输时间为28.5μs,考虑到nRF24L01P芯片从接收模式转变为应答发送模式的时间约为130μs,则每次发送数据的总时间开销约为315μs。nRF24L01P芯片以250μs为最小重发时间间隔单位,支持从250μs到4ms共16种不同的时间间隔。结合以上分析,将这16种时间间隔分别赋给16个不同的父节点,设置重发次数为10次,则对于父节点之间的冲突,多次重发后,来自不同节点的数据包发送时间差将被逐渐拉大至大于315μs,冲突得到了有效的退避。对于子节点和自由节点,可根据其节点号的低4位值大小来对应设置16种时间间隔,重发次数设为5次。如果冲突的节点号低4位值恰好相同则会导致退避失败,此时按图3:Wi-Fi和Zigbee所占用的信道78•电子技术与软件工程 ElectronicTechnology&SoftwareEngineering人工智能•ArtificialIntelligence照节点号的高4位值大小进行延时等待后重新发送,即可退避成功。3网络层设计本设计首先采用“串联接力”的方式实现多跳路由。基本思路为:用一条假想的“路由折线”将不同房间串联起来,在此折线上相邻的两个房间内的父节点必须能够直接通讯而无需中间路由。然后,从折线的任意一端开始对房间依次编号。这样,数据包即可以沿着这条折线以节点接力的方式进行路由。以图4.1为例,红色的路由折线串联了不同的房间,黄色的圆点代表每个房间中的父节点,圆点中的数字即为相应节点的房间号。假如图4.1中4号房间节点需要发送数据到8号房间节点,则数据帧依次被5号、6号和7号房间父节点转发。串联接力的路由方式实现起来非常简单,中间路由节点只需要根据目的房间号判断数据传输方向,而后交给下一个相邻房间父节点即可。然而这种路由方式,对于目的房间号和源房间号相差较大的情况来说,路由跳数过多,并不十分理想。仍然以图4.1为例,如果1号房间节点需要和9号房间节点通讯,则需要经过2—8共7个房间的父节点对数据进行转发。而实际上,1号房间和3号房间相邻,而3号房间和9号房间本质上是同一个房间,所以1号房间节点要和9号房间节点通讯,只需要经过3号房间父节点对数据进行转发就可以了。可见,对于串联接力,如果能够找到“接力捷径”就可以减少路由跳数。本设计通过借助邻居发现过程来寻找接力捷径。所谓邻居,就是可以和自己直接进行通讯而无需其他节点路由的节点。网络中每个父节点上电或软件复位时,即启动一次邻居发现过程:发送一个“邻居发现”广播报文,邻居父节点收到该报文后回复一个“邻居应答”报文,而后,发送邻居发现广播报文的节点将收到的邻居应答报文中的房间号保存到自己的邻居列表中。这样,节点发送数据到其他节点或转发数据到其他节点时,首先根据邻居列表中的房间号寻找接力捷径,如果找到通往目的节点的捷径,则对路由进行优化,否则按照串图4.1:串联接力与路由折线联接力的方式进行发送。父节点的数据接收处理流程如图4.2所示:按照图4.2所述的路由方式,我们重新考虑前述1号房间节点需要和9号房间节点通讯的例子,此时由于3号房间父节点保存在1号房间父节点的邻居列表中,因而1号房间节点的报文直接传给了3好房间的父节点。同理3号房间的父节点将报文直接传给9号房间的父节点。相比单独使用串
本文标题:基于nRF24L01P的智能家居无线组网方案的设计
链接地址:https://www.777doc.com/doc-3150900 .html