博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ZigBee自学笔记总结
阅读量:4297 次
发布时间:2019-05-27

本文共 6145 字,大约阅读时间需要 20 分钟。

什么是ZIGBEE?

ZIGBEE是一个由可多到65000个无线数传输模块组成的一个无线数据传输网络平台,十分类似现有的移动通信CDMA网或GSM网,每一个ZIGBEE网络数据传输模块类似移动网络的一个基站,在整个网络范围内,它们之间可以进行相互通信;每个网络节点间的距离可以从标准的75米,扩展到几百米,甚至是几公里的范围;另外整个ZIGBEE网络还可以与现有的其它的各种网络连接。比如直接连接我们的internet网络,那么我们就能够进行远距离的通信以及信息 的采集和交流了。

不同的是,ZIGBEE网络主要是为了自动化控制数据传输而建立,而移动通信网主要是为语音通信而建立;对于前期的投入方面,每个移动基站的投入一般都在百万元人民币以上,然而个ZIGBEE―基站呢?却不到1000元人民币,每个ZIGBEE 网络节点不仅本身可以与监控对象。除此之外,每一个ZIGBEE网络节点(FFD)还可以在自己信号覆盖的范围内,和多个不承担网络信息中转任务的孤立的子节点(RFD)无线连接。这就是我们经常所说的ZIGBEE了,如果对它还是比较的陌生的话,那么就直接记住,其实ZIGBEE就是一个无线的局域网络罢了,需要ZIGBEE无线的地方,直接放上ZIGBEE的模块,这样我们就能够建立一个以ZIGBEE为基础的局域网络了。ZigBee在m0开发板的原理图如下所示:

ZigBee技术的出现

    在蓝牙技术的使用过程中,人们发现蓝牙技术尽管有许多优点,但仍存在许多陷。对工业以及家庭自动化控制和遥测遥控领域而言,蓝牙技术显得太复杂,功耗大,距离近,组网规模太小等,而工业自动化对无线通信的需求越来越强烈。正式因为这样的情况,经过人们长期努力,ZIGBEE协议在2003年通过不懈的努力研发之后,终于于2004正式在社会上面出现了,随着它的出现,各种基于ZIGBEE的系统慢慢的走进社会的每个角落,渐渐的为广大的人们所熟知所了解。

ZIGBEE技术是建立在IEEE802.15.4国际标准上的自组织无线网络技术,主要的硬件基础是一个符合IEEE802.15.4国际标准硬件收发器和一个微控制器(可以是任何81632位内核的微控制器,国内也称为单片机),软件主要是运行于单片机内部的一套软件,称为ZIGBEE协议栈。

对于一个实际ZIGBEE应用系统的设计,设计者主要面对的技术难点有三个,通讯距离,高频设计技术和无线软件技术,这也是ZIGBEE技术走向应用的主要瓶颈。

解决ZigBee的通讯距离问题

由于一般的ZIGBEE前端RF部分输出大部分只有0DBM,点对点开阔地带 实际通讯距离只有几十米,如果加上环境和阻挡因数,比如树木,楼房墙壁等阻碍物,那么它的通讯距离会有所下降的。虽然我们可以通过中继路由来解决这一问题,但是对于很多应用还是有一定的困难的,就像无线点菜系统,棉田滴灌系统,安防系统,楼宇监控,医院应用,粮库监控,电力线监控,井下定位等等的工程项目,都需要比较长的通讯距离才可以满足其自身的需求。

ZigBee开发设备的问题

ZIGBEE芯片工作在2.4GHZ900MHZ的高频率,硬件设计不可能绕开高频设计和调试,需要的高频设备如频谱分析仪等,价格较高,也构成了一定技术门槛。

技术更新太快

为了实时处理复杂的无线网络管理和路由,ZIGBEE软件协议栈代码比较复杂,同时涉及比较多的无线技术知识背景,掌握这些无线软件需要比较多的时间,加上协议栈在不断升级,使用的微控制器也在不断变化中,也加长了开发和调试周期。

ZIGBEE模块化的出现

这些比较突出的问题,早已经被相关厂家所重视,所以他们都在积极的去解决这一问题,目前我们看到很多的厂家已经推出了各种比较完整的解决方法。对于ZIGBEE通讯 距离的扩展,目前采用外部扩展和内部增加放大器两套办法,TI(德州仪器)推出的CC2591放大器芯片,就是比较典型的外部扩展的办法,CC2591能够和CC2430ZIGBEE单芯片完整结合,以非常低的成本,实现ZIGBEE通讯距离的扩展。采用CC2591后,ZIGBEE网络通讯距离可以轻易在点对点开阔地带通讯距离可以达到600米以上,  通过ZIGBEE网状网络的自动中继路由 ,可以容易实现微 功耗下数十公里的网络通讯和无线传 感器网络。

由于大量模块化产品的出现,也就同时解决了第二个应用问题,这些模块只有大约1平方英寸大小,以后随着工艺的不断改进应该还会越来越小的,可以使用电池供电,这样也非常的容易集成到用户的系统中去;对于用户使用而言,从模块入手,完全避免的高频设计和调试的问题,可以将自己的主要精力主要集中到自己的应用系统设计上面去,这也就在一定程度上减小了开发人员的工作压力,并且缩短了产品的开发周期,为更快的推广自己的传品创下了时间的空隙,从而更快的走进市场,走向社会。

另一方面来说,由于目前的模块话组件的大规模出现,很多模块在出厂的时候也配备了一套ZIGBEE串口通 讯协议,这套协议将复杂的ZIGBEE应用,转换为简单的,具有ZIGBEE网络功能的AT命令集,例如加入网络,配置网络,数据收发等功能,都可以通过单片机的串口作为传输的线路,发送简单的操作命令来完成,这样子的话,用户只要会使用单片机串口编程,就无需要深入研究ZIGBEE的协议栈以及组网的过程了,就可以轻松使用ZIGBEE模块并实现相应的功能了。

 ZIGBEE的组网原理

由于模块化的出现,减轻了很多开发的任务,但是我们既然要研究ZIGBEE,那么我们就一定要熟悉它的最重要的一部分,那就是ZIGBEE的组网流程了,通常我们组建一个完整的Z I GBEE网状网络需要包含两个步骤:第一,进行网络初始化;第二,把节点加入网络。那么对于节点加入网络 设计的时候又包括两个步骤:通过与协调 器连接入网和通过已有的父节点入网。

一、网络初始化

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

1)节点是FFD(Full Function Device )节点,拥有ZIGBEE协调器的功能。
2)节点还没有与其他网络建立连接,如果当节点已经与其他网络连接时,那么此节点就只能作为该网络的子节点了,因为,在一个ZIGBEE网络中有且只能有一个网络协调器。

确定了需要满足的要求之后,接下来就是确定网络协调器,首先判断节点是否是FFD 节点,接着判断此 FFD节点是否在其他网络里或者是否已经在网络中存在一个协调器。我们可以通过主动扫描的方式,发送一个信标请求命令(Beacon request command),然后设置一个扫描期限(T_scan_duration),若在扫描期限的时间里设备都没有检测到信标,那么就认为FFD在其网络内没有协调器,那么此时就可以建立自己的 ZIGBEE网络了,并且作为这个网络的协调器不断地产生信标并广播出去,另外我们需要注意的是,在一个网络里面,只能有一个协调器。

确定了网络协调器之后,我们接下来要做的就是信道扫描的过程。其中包括能量扫描和主动扫描这两个过程。

首先对指定的信道或者默认的信道进行能量上面的检测,为的就是避免可能的干扰。并且要以递增的方式对所测量的能量值进行信道排序,在这个过程中我们要舍弃一些能量值超过了可允许能量水平的那些信道,选择那些可以允许能量水平的信道,并且标记这些信道是可用的信道。接着再进行主动的扫描,搜索节点通信半径内的网络信息。这些信息将会以信标帧的形式在网络中广播,节点通过主动信道扫描方式获得这些信标帧,然后会根据这些信息提示,找到一个稳定的、相对安静的信道,通过记录的结果,会选择一个存在最少的ZIGBEE设备的网络,当然最好是没有ZIGBEE设备。在主动扫描期间,MAC层将会丢弃PHY层数据服务接收到的除信标以外的所有帧

那么之后我们就该设置我们的网络ID首先我们找到合适的信道后,协调器会 为网络选定一个网络标识符 ,也就是经常说的通道,信道。这个ID在所使用的信道内必须是唯一的 ,通时也不能和其他ZIGBEE网络冲突,而且不能为广播地址0xFFFF,因为广播地址是保留地址,不能使用。PAN ID可以通过侦听其他网络的ID 然后选择一个不会冲突的 ID的方式来获取,也可以人为的指定扫描的信道后,来确定不和其他网络冲突的网络号。

另外我们需要知道的是ZIGBEE网络中有两种地址模式:扩展地址(64位)和短地址(16位),其中扩展地址由IEEE组织分配,用于唯一的设备标识。短地址用于本地网络中设备标识,一个网络中,每个设备的短地址必须是唯一的,当节点加入网络时由其 父节点分配并通过使用短地址来进行通信。对于协调器来说,短地址通常设定为0x0000,还记得之前说的吧,协调器是一个ZIGBEE网络中唯一的节点,一个网络中只能有一个协调器的存在

经过上面的步骤,我们就成功的初始化了ZIGBEE网状网络,那么之后就等待其他节点的加入了。节点入网时将选择范围内信号最强的父节点(包括协调器)加入网络,成功后将得到一个网络短地址并通过这个地址进行数据的发送和接收,网络拓扑关系和地址就会保存在各自的内存之中。

说完了组建一个完整的Z I GBEE网状网络需要包含的两个步骤之一,接下来我们继续说第二个步骤。

二、节点通过协调器加入网络

当节点协调器确定之后,节点首先需要和协调器建立连接以加入网络。 

为了建立这个连接,FFD 点需要向协调器提出一个请求,协调器接收到节点的连接请求之后,会根据情况决定是否允许其进行连接,然后对请求连接的节点做出相应的响应,节点与协调器建立连接后,才能实现数据的收发功能。

那么节点与协调器连接加入网络的具体流程如以下几个步骤:

(1)查找网络协调器

首先我们的ZIGBEE设备会主动的扫描并查找周围网络的协调器,若是在扫描期限内检测到有信 的存在,那么就将会获得了协调器的相关信息,此时就会向协调器发出连接的请求。在选择合适的网络之后,上层就会请求MAC层对物理层PHYMAC层的PHY Current Channelmac PAN IDPIB属性进行相应的设置。若没有检测到信标的存在,那么就会间隔一段的时间,之后节点会重新的发起又一次的扫描了,这就是查找网络协调器的过程。

(2) 发送关联请求命令(Associate request command)。

查找到网络中的协调器之后,节点将把关联请求命令发送给查找到的网络协调器,协调器收到后立即回复一个确认帧(ACK),与此同时也将向它的上层发送连接指示原语,这个原语表示已经收到节点的连接请求。但是这个时候并不意味着已经建立了连接,只是表示协调器已经收到节点的连接请求。当协调器的mac层的上层接收到连接指示原语后,将根据自己的资源情况 (通常的是存储空间以及能量) 决定是否同意此节点的加入请求,然后会给节点的mac层发送响应。

(3) 等待协调器处理。

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

 (4) 发送数据请求命令。

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

(5)回复信息。

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

上面就是节点与协调器连接加入网络的具体流程,那么我们上文又说道,加入网络有两种方式的,即通过与协调器连接入网和通过已有的父节点入网。那么通过已有的父节点加入网络具体是怎样实现的呢,具体的我们可以继续往下面看。

当靠近协调器的FFD节点和协调器关联成功之后,处于这个网络范围内的其他节点就以这些FFD节点作为父节点加入网络,具体加入网络有两种方式,一种是通过关联(associate)方式,就是待加入的节点发起加入网络;另一种是直接(direct)方式,就是 待加入的节点具体加入到哪一个节点下,作为该节点的子节点。其中关联方式是ZIGBEE网络中新节点加入 网络的主要途径。我们知道对于一个节点来说,只有没有加入过网络的节点才能进行加入网络的操作。在这些节点中,有些是曾经加入过网络中的,但是却与它的父节点失去了联系像这样的节点,通常被称为孤儿节点,而有些则是新的节点。当是孤儿节点的时候,在它的相邻表中会存有原父节点的信息,于是乎它可以直接给原父节点发送加入网络的请 求信息。如果这个子节点的父节点有能力同意它的加入,那么就会直接告诉它以前被分配的网络地址,于是它便成功加入网络;如果此时子节点原来的父节点的网络之中,子节点数已经达到了最大的值,也就是说父节点的网络地址已经分配满了,此时父节点便无法批准孤儿节点的加入,而孤儿节点之后加入网络只能以新节点的身份重新寻找并加入网络;而对于新节点来说,他首先会在预先设定好的一个或多个信道上通过主动或者被动扫描周围的方式,使它可以找到的网络,寻找 有能力批准自己加入网络的父节点,并把可以找到的父节点 的资料存入自己的相邻表。存入相邻表的父节点的资料包括ZIGBEE协议的版本、协议栈的规范、PAN ID以及可以加入的相关信息。在相邻表中所有的父节点中会选择一个相对深度最小的,并对其发出请求连接的信息,那么如果出现最小深度一样的两个以上的父节点,那么就会随机选取一个发送请求。如果相邻表中没有合适的父节点信息,表示入网失败,终止过程。如果发出的请求被批准,那么父 节点会同时分配一个16位的网络地址,此时入网便成功,子节点就可以开始通信。如果请求失败了,那么就会重新查找相邻表,继续发送请求信息,直到加入网络为止,这就是通过已有的父节点加入网络的具体实现流程和原理。   

你可能感兴趣的文章
Xcode 的正确打开方式——Debugging
查看>>
打包app出现的一个问题
查看>>
iOS在Xcode6中怎么创建OC category文件
查看>>
Expanding User-Defined Runtime Attributes in Xcode with Objective-C
查看>>
iOS7 UITabBar自定义选中图片显示为默认蓝色的Bug
查看>>
提升UITableView性能-复杂页面的优化
查看>>
25 iOS App Performance Tips & Tricks
查看>>
那些好用的iOS开发工具
查看>>
iOS最佳实践
查看>>
使用CFStringTransform将汉字转换为拼音
查看>>
更轻量的 View Controllers
查看>>
Chisel-LLDB命令插件,让调试更Easy
查看>>
时间格式化hh:mm:ss和HH:mm:ss区别
查看>>
When to use Delegation, Notification, or Observation in iOS
查看>>
Objective-C Autorelease Pool 的实现原理
查看>>
编程语言大牛王垠:编程的智慧,带你少走弯路
查看>>
ios指令集以及基于指令集的app包压缩策略
查看>>
iOS开发者的福利 — — iOS9+Xcode7免越狱免证书直接调试
查看>>
3、JavaWeb学习之基础篇—JSP
查看>>
4、JavaWeb学习之基础篇—Session
查看>>