XBee ZigBee模块休眠时,向串口发送的数据会被丢弃,因此本地MCU如果需要发送数据,应确保XBee模块处于醒着的状态,具体可以通过引脚判断(比如CTS)。而当其它模块向XBee模块发送数据时,数据是先发给休眠模块的父节点的,当模块醒来时会向父节点polling数据,因此这种方式则无需等待模块醒来再发。
XBee模块的休眠参数和父节点不一致时,或是信号不好在多次polling数据时不到时,在NJ=0xFF的情况会,会触发XBee模块离网,寻找新的网络。当NJ<0xFF时,休眠模块会开启rejoin模式,在父节点不在时尝试迅速更换父节点,而非离开原来网络。当模块离网重入时,会有入网状态帧,因此可以通过这个帧来判断休眠模块退网的频次。
Digi提供一系列的XBee工具库供用户使用。通常建议在开发实际产品之前,先用XCTU和开发板演练一下相关的特性。即使是在产品中出现问题 ,需要查找原因,很多场景也是能够用开发板和XCTU来模拟。XCTU上有个隐藏的引脚控制按钮可以用来控制唤醒引脚,因此即使是休眠模式SM配置为周期休眠加引脚唤醒,也是能够很方便用XCTU模拟的。此外,XCTU上的终端模式,可以记录串口的发送和接收到的数据或是API模式下的相关帧以及对应的解析,在调试过程中非常有用。
一、接入调试模块,配置好调试模式
不论是桌面演练还是现场调试,您需要有一个休眠模块接入待调试的网络,为了更好的获取网络信息和模块状态,请将模块的AO和AP都配置为1,休眠参数(SP/ST/SN)P则需要尽量和网络内的协调器/路由器一致,如果不能做到一致,也需大致接近(即协调器路由器的休眠周期可等于或略大于休眠节点的休眠周期)。
我们以默认的休眠参数为例来演示,取两个模块写入出厂默认参数,然后一个配置为协调器(CE=1),NJ=0xFF,另一个配置CE=0,NJ=0xFF,SM=5(周期休眠加引脚唤醒)。用终端模式下分离视图的方法在一台观察两个模块的串口输出。
休眠模块入网后,即以协调器为父节点。当我们把协调器断电(可用按住协调器的reset不放的方法),大约等ST+3*SP,也就是6秒左右,休眠终端已经三次没polling到父节点,就会触发离网,在恢复协调器上电后,该休眠节点会重新加入,如下图所示:
在协调器侧,模块重新入网时,会收到一个cluster=0013的入网通告帧。一般来说,这个入网通知有几种方式获取:一个是JN参数,也就是Join Notification,当这个参数开启时,不论AO配置如何,入网时有一个入网通知产生。如果JN不配置,也可以用AO=1来获取ZigBee网络的ZCL入网公告,同样可以获取入网信息。我们这里并没有设置JN参数,因此它是标准的ZCL入网指示帧。
当网络内有休眠节点时,我们需要监测其入网退网的情况,因为频繁入网退网会导致功耗增加,通信不可达的时间会变多,在电池供电场景尤其需要重视,减少不必要的退网重入可以有效保障电池达到目标使用寿命。
在NJ=0XFF时,休眠节点在多次找不到父节点后会触发退网,有时我们并不需要休眠节点有这个功能。这时可以设置休眠节点的NJ<0xFF,休眠节点的NJ参数代表着不离开网络,开启rejoin模式,即使父节点不存在,也不会离网,而只是切换新的父节点。Rejoin模式下,只有休眠节点发NR命令,才会重新找网络。
二、使用XCTU查看或设置引脚状态
XCTU上有三个状态指示灯(CTS,CD,DSR)和三个XBEE引脚按钮(DTR,RTS,BRK),分另对应模块串口上的状态或控制引脚。如上面图片所示。
CTS对应模块的CTS引脚,是模块准备好通信的标志,对于休眠模块来说,醒来时该引脚为低电平,表时模块已经准备好接收来自串口的数据或命令,当CTS为高电平时,表明模块不可用。ON/SLEEP引脚刚好和CTS反相,也是可以作为模块状态判断的引脚,一般电路上只需要用一个即可。
DTR按钮则是休眠唤醒引脚,对应模块上的DTR|/SLEEP_REQ引脚,可以控制它让处于休眠状态的模块醒过来,因为使用XCTU来调试SM=5的休眠模块时,有时模块处于休眠状态无法接收串口命令,这时我们可以用这个按钮让模块临时醒来接收相关的指令,很方便调试。注意,这些按钮通常只在一个休眠周期内有效,所以使用后要及时恢复原状态。
没找到有用信息?更多XBee休眠节点,请参考伊栖物联网站内XBee休眠模块相关文章