理论教育 基于物联网的STM32单片机实战:实现ZigBee无线通信

基于物联网的STM32单片机实战:实现ZigBee无线通信

时间:2023-11-09 理论教育 版权反馈
【摘要】:下面以最为复杂的网状拓扑为例来分析ZigBee网络的建立流程。该信道应存在最少的ZigBee网络,最好是没有ZigBee设备。②在ZigBee网络中有两种地址模式:扩展地址(64位)和短地址(16位)。图8.10ZigBee节点通过协调器加入网络流程节点通过已有节点加入网络当靠近协调器

基于物联网的STM32单片机实战:实现ZigBee无线通信

不同的网络拓扑结构其网络建立流程是不一样的。下面以最为复杂的网状拓扑为例来分析ZigBee网络的建立流程。

1.ZigBee网络的建立概述

(1)组建一个完整的ZigBee网状网络包括两个步骤:网络初始化、节点加入网络。

(2)节点加入网络又包括两个步骤:通过与协调器连接入网和通过已有父节点入网。

(3)ZigBee网络的建立是由网络协调器发起的,任何一个ZigBee节点要组建一个网络必须要满足以下两点要求:

①节点是FFD节点,具备ZigBee协调器的能力;

②节点还没有与其他网络连接。当节点已经与其他网络连接时,此节点只能作为该网络的子节点,因为一个ZigBee网络中有且只有一个网络协调器。

2.网络初始化

(1)确定网络协调器

首先判断节点是否为FFD节点,接着判断此FFD节点是否在其他网络里或者网络里是否已经存在协调器。

具体实现:通过主动扫描,发送一个信标请求命令(Beacon request command),然后设置一个扫描期(T_scan_duration);如果在扫描期限内都没有检测到信标,那么就认为FFD在其信号覆盖内没有协调器,此时就可以建立自己的ZigBee网络,并且作为这个网络的协调器不断地产生信标并广播出去。

(2)进行信道扫描过程

包括能量扫描和主动扫描两个过程。

①首先对指定的信道或者默认的信道进行能量检测,以避免可能的干扰。以递增的方式对所测量的能量值进行信道排序,抛弃那些能量值超出了可允许能量水平的信道,选择可允许能量水平的信道并标注这些信道是可用信道。

②接着进行主动扫描,搜索节点通信半径内的网络信息。这些信息以信标帧的形式在网络中广播,节点通过主动信道扫描方式获得这些信标帧,然后根据这些信息,找到一个最好的、相对安静的信道,通过记录的结果,选择一个信道。该信道应存在最少的ZigBee网络,最好是没有ZigBee设备。在主动扫描期间,MAC层将丢弃PHY层数据服务接收到的除信标以外的所有帧。

(3)设置网络ID

找到合适的信道后,协调器将为网络选定一个网络标识符(PAN ID,取值<=0x3FFF)。这个ID在所使用的信道中必须是唯一的,也不能和其他ZigBee网络冲突,而且不能是广播地址0xFFFF(此地址为保留地址,不能使用)。

①PAN ID可以通过侦听其他网络的ID然后选择一个不会冲突的ID的方式来获取,也可以人为指定扫描的信道来确定不和其他网络冲突的PAN ID。

②在ZigBee网络中有两种地址模式:扩展地址(64位)和短地址(16位)。其中扩展地址由IEEE组织分配,用于唯一的设备标识;短地址用于本地网络中的设备标识。在一个网络中,每个设备的短地址必须唯一,当节点加入网络时,由其父节点分配并通过使用短地址来通信。对于协调器来说,短地址通常设定为0x0000。

3.节点加入网络的方式

节点入网时将选择范围内信号最强的父节点(包括协调器)加入网络,成功后将得到一个网络短地址并通过这个地址进行数据的发送和接收,网络拓扑关系和地址就会保存在各自的flash中。节点加入网络的方式有以下两种。

(1)节点通过协调器加入网络

当节点协调器确定之后,节点首先需要和协调器建立连接加入网络。考虑到网络的容量和FFD/RFD的特点,在此只讨论FFD节点情况。FFD节点与协调器连接加入网络的流程如图8.6所示。(www.daowen.com)

为了建立连接,FFD节点需要向协调器提出请求,协调器接收到节点的连接请求后根据情况决定是否允许其连接,然后对请求连接的节点做出响应,节点与协调器建立连接后,才能实现数据的收发。具体的流程可以分为下述步骤。

①查找网络协调器。首先会主动扫描查找周围网络的协调器,如果在扫描期限内检测到信标,那么将获得协调器的有关信息,这时就向协调器发出连接请求。在选择合适的网络之后,上层将请求MAC层对物理层和MAC层的phy Current Channel、mac PANID等PIB属性进行相应的设置。如果没有检测到,间隔一段时间后,节点重新发起扫描。

②发送关联请求命令(Associate request command)。节点将关联请求命令发送给协调器,协调器收到后立即回复一个确认帧(ACK),同时向协调器的上层发送连接指示原语,表示已经收到节点的连接请求。但是这并不意味着已经建立连接,只表示协调器已经收到节点的连接请求。当协调器的MAC层的上层接收到连接指示原语后,将根据自己的资源情况(存储空间和容量)决定是否同意此节点的加入请求,然后给协调器节点的MAC层发送响应。

③等待协调器处理。当节点收到协调器加入请求命令的ACK后,要入网的节点MAC将等待一段时间,接受协调器的连接响应。在预定的时间内,如果接收到连接响应,它将这个响应向它的上层通告。而协调器给要入网的节点发送响应时会设置一个等待响应时间(T_Response Wait Time),来等待协调器对其加入请求命令的处理,若协调器的资源足够,协调器会给节点分配一个16bit的短地址,并产生包含新地址和连接成功状态的连接响应命令,则此节点将成功地和协调器建立连接并可以开始通信。若协调器资源不够,待加入的节点将重新发送请求信息,直到入网成功。

④发送数据请求命令。如果协调器在响应时间内同意节点加入,将产生关联响应命令(Associate response command)并存储这个命令。当响应时间过后,节点发送数据请求命令(Data request command)给协调器,协调器收到后立即回复ACK,然后将存储的关联响应命令发给节点。如果在响应时间到后,协调器还没有决定是否同意节点加入,那么节点将试图从协调器的信标帧中提取关联响应命令。成功的话,表示入网成功;否则,重新发送请求信息直到入网成功。

⑤回复。节点收到关联响应命令后,立即向协调器回复一个确认帧(ACK),以确认接收到连接响应命令,此时节点将保存协调器的短地址和扩展地址,并且节点的MLME向上层发送连接确认原语,通告关联加入成功的信息。

图8.10 ZigBee节点通过协调器加入网络流程

(2)节点通过已有节点加入网络

当靠近协调器的FFD节点和协调器关联成功后,处于这个网络范围内的其他节点就以这些FFD节点作为父节点加入网络。具体有两种方式。

一种是通过关联(associate)方式,就是待加入的节点发起加入网络;另一种是直接(direct)方式,就是待加入的节点具体加入那个节点下(路由节点),作为该节点的子节点。

其中关联方式是ZigBee网络中新节点加入网络的主要途径。对于一个节点来说,只有没有加入过网络的,才能使用该方式加入网络。

在待加入网络的节点中,有些是曾经加入过网络,但是却与它的父节点失去联系(这样的被称为孤儿节点),而有些则是新节点。当是孤儿节点时,在它的相邻表中存有原父节点的信息,于是它可以直接给原父节点发送加入网络的请求信息。

如果父节点有能力同意它加入,直接告诉它以前被分配的网络地址,便可成功入网;如果此时它原来的父节点的网络中,子节点数已达到最大值,也就是说网络地址已经分配满,父节点无法批准它加入,那么它只能以新节点身份重新寻找并加入网络。

而对于新节点来说,首先会在预先设定的一个或多个信道上通过主动或被动扫描周围可以找到的网络,寻找有能力批准自己加入网络的父节点,并把可以找到的父节点的资料存入自己的相邻表。存入相邻表的父节点的资料包括ZigBee协议的版本、堆栈的规范、PAN ID和可以加入的信息。在相邻表中所有父节点中选择一个深度最小的,对其发出请求信息,如果出现相同最小深度的两个以上的父节点,那么随机选取一个发送请求信息;如果相邻表中没有合适的父节点信息,那么表示入网失败,终止过程。如果发出的请求被批准,那么父节点同时会分配一个16bit的网络地址,此时入网成功,子节点可以开始通信。如果请求失败,那么重新查找相邻表,继续发送请求信息,直到加入网络或者相邻表中没有合适的父节点。通过已有节点组网算法流程图如图8.11所示。

图8.11 通过已有节点组网算法流程图

4.ZigBee在嵌入式工程中的应用

ZigBee在嵌入式工程中的应用方式一般有两种形式。

①将协议封装到芯片或模块中,MCU以串口的方式设置和收发数据给模块,模块实现数据的无线传送功能。这种方式设计协议栈内容很少,使用简单,易于推广,是目前较流行的方式之一。编程类似ESP8266模块、HC-05模块,这里不再赘述。

②自带MCU和射频收发电路,可实现信息采集、控制、无线发送等功能。这种方式需要在协议栈下编程,相对复杂,难度较大,一般在节点数量大、成本要求低的情况下使用,如目前比较流行的基于CC2530的ZigBee开发。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈