CC2530路由节点睡眠问题?
由于实际应用的需要,我需要将终端设定为路由节点,发自身温湿度数据的同时也实现路由功能。以sensordemo为例,我直接在事件中加入和senddummyreport中增加halsleep(30000)但是没有反应,使用自己设定定时器休眠也不行,请问下有别的实现思路或者其他睡眠方法吗?
您好,Z-STACK目前不支持低功耗路由。
目前ZigBee协议里面,节点进行收发数据的时刻都是随机的,所以路由器必须处于活动状态来转发终端节点的数据,或者等待其他终端唤醒以后来请求数据。所以路由器不支持低功耗模式。
那能否直接在事件中处理让芯片进入PM2模式睡眠,再定时起来?
可是可以做,你可以强制休眠。
但是一般不建议这样去做。你只需要在休眠的时候,强制把radio关掉。
我试了下在sensordemo上做修改,在democollector.c的zb_HandleOsalEvent中加入我自己的MY_SLEEP_EVT睡眠事件,设断点检查显示这部分程序也得到执行了,但是系统仍旧没有休眠,仍旧按照原有的频率在发送dummyreport(发dummyreport的时间间隔是38秒,MY_SLEEP_EVT的mySleepPeriod 也是38秒,那是不是意味着76秒发一次dummyreport?),请问未正常休眠是什么原因?如何才能做到强制休眠固定长度的时间?
if(event&MY_SLEEP_EVT)
{
macRxOffRequest();
macRxOff();
OSAL_SET_CPU_INTO_SLEEP(myReportPeriod);
osal_start_timerEx( sapi_TaskID, MY_SLEEP_EVT, mySleepPeriod );
}
你这种做法实际上就是把路由强制变成终端了,路由休眠了就没有路由的功能了,区别就是你这样做可以让网络规模比较大。
实际的想法就是想弱化路由功能,让其能够更长时间的工作,来换取更大的网络规模,同时也不完全丢掉路由功能,要保证正常的组MESH网络,因为实际情况是路由也没有交流电源供电长时间供电,但是整个网络节点的位置基本是固定不动的,路由本身也需要采集数据,但是单纯的终端接在协调器的覆盖范围又不足以覆盖整个区域。目前正头疼呢,不知您有何高见?
对于路由来说,什么时候需要转发数据是不确定的,所以不可以进入休眠状态。
目前的协议栈实现不了你想要的功能,如果路由休眠了,需要经过中继的数据无法到达收集节点。
我想问一个200m*200m的室内复杂环境区域能否用一个协调器能否进行完全覆盖?
能不能覆盖不是有协调器来决定的,而是有路由器的多少,节点的布放位置有关系。
你好,我现在有需求将协调器休眠,然后定时唤醒。请问具体该如何做?我打开了POWER_SAVE, 然后
#if defined( POWER_SAVING )
else // Complete pass through all task events with no activity?
{
osal_pwrmgr_device( PWRMGR_BATTERY );
osal_pwrmgr_powerconserve(); // Put the processor/system into sleep
}
#endif
在这个进入休眠前强制添加使用电池选项。但貌似还是进不了休眠。
请教具体该怎么做呀?
在整个Zigbee网络中,协调器作为网络的神经中枢,不能休眠。
其实是有低功耗路由的说法的,我写过代码,路由可以进入PM2模式进行睡眠,同样也可以进入PM3模式睡眠,待机电流均能达到标准值1.2uA和0.3uA。
实际应用中如果需要低功耗路由,需要做好整个网络的同步唤醒,或者异步唤醒传输这部分。
总结就是,如果需要低功耗路由,理论上和实际上都是可行的,主要的技术难点在于同步唤醒或者异步唤醒的实现,这里涉及到数据是否能准确的到达。
如果有这样的场景,可以考虑其他的技术实现,比如Lora等。