如题,实际测试中发现,终端只有在加入网络之后才能进入低功耗模式,那么如果只有一个终端的情况下,就会一直在正常工作模式,这样子电池供电的话工作不了几天就没电了。
VV:
非常理解你的需求,在实际应用中也确实存在这样的问题。
首先你需要通过抓包看下,为什么在没有入网的情况下,功能一直会很高。原先是因为节点一直在搜索网络,发送beacon request寻找网络。
那么如果需要实现低功耗,你需要控制搜索网络的频率,或者间歇性的搜索网络。
有两种方式可以做
1)手动的使能网络扫描,你可以通过使能MANAGED_SCAN,具体你可以了解下具体的过程。
2)停止和启动网络烧苗,你可以开启一段时间扫描,如果没有扫描到,那么可以停止一段时间,这个实现,你可以参考Z-Stack Home 1.2.2a里面针对Rejoin的处理。
if( events & ZDO_REJOIN_BACKOFF ) { if( devState == DEV_NWK_BACKOFF ) { ZDApp_ChangeState(DEV_NWK_DISC); // Restart scan for rejoin ZDApp_StartJoiningCycle(); osal_start_timerEx( ZDAppTaskID, ZDO_REJOIN_BACKOFF, zgDefaultRejoinScan ); } else { // Rejoin backoff, silent period ZDApp_ChangeState(DEV_NWK_BACKOFF); ZDApp_StopJoiningCycle(); osal_start_timerEx( ZDAppTaskID, ZDO_REJOIN_BACKOFF, zgDefaultRejoinBackoff ); }
return ( events ^ ZDO_REJOIN_BACKOFF); }
xiaoming huang1:
虽然定了POWER_SAVING但是有个电源类型的全局变量默认是常电,改成电池
user4566561:
回复 xiaoming huang1:
十分感谢你的回复,请问具体在什么地方去改动?
user4566561:
回复 user4566561:
/********************************************************************* * @fn osal_pwrmgr_device * * @brief Sets the device power characteristic. * * @param pwrmgr_device – type of power devices. With PWRMGR_ALWAYS_ON * selection, there is no power savings and the device is most * likely on mains power. The PWRMGR_BATTERY selection allows the * HAL sleep manager to enter sleep. * * @return none */void osal_pwrmgr_device( uint8 pwrmgr_device ){ pwrmgr_attribute.pwrmgr_device = pwrmgr_device;}
应该是在这个地方修改吧
xiaoming huang1:
回复 user4566561:
自己弄一个条件编译就行了
void osal_pwrmgr_init( void )
{#if defined (POWER_SAVING) pwrmgr_attribute.pwrmgr_device = PWRMGR_BATTERY;#else pwrmgr_attribute.pwrmgr_device = PWRMGR_ALWAYS_ON; #endif pwrmgr_attribute.pwrmgr_task_state = 0; // Cleared. All set to conserve}