硬件 :CC2530
软件 : Z-Stack 3.0.2
编译器 : IAR 10.30
协调器 :Zigbee2MQTT
基础知识 :
我使用一些用作终端器件并连接到 Zigbee2MQTT 提供的网络的 CC2530器件。 它们是带有两个按钮的简单开关:
P2.0用于调试。
P0.1用作开关。
两个引脚都使用中断。
案例 :
我使用 GenericApp 作为项目的基础、然后合并了 SampleSwitch 的部分以启用开关功能。 它运行得很好。 刷新闪存后、当我开始调试过程时、器件会成功连入网络、接受采访并进行配对。 它还会发送开/关命令、一切都很好。
static void zclGenericApp_HandleKeys( byte shift, byte keys ) { if ( keys & HAL_KEY_SW_1 ) { bdb_StartCommissioning(BDB_COMMISSIONING_MODE_NWK_STEERING); } if ( keys & HAL_KEY_SW_6 ) { if (isToggleSet1) { zclGeneral_SendOnOff_CmdOn( GENERICAPP_ENDPOINT, &zclGenericApp_DstAddr, FALSE, bdb_getZCLFrameCounter() ); } else { zclGeneral_SendOnOff_CmdOff( GENERICAPP_ENDPOINT, &zclGenericApp_DstAddr, FALSE, bdb_getZCLFrameCounter() ); } isToggleSet1 = !isToggleSet1; } if ( keys & HAL_KEY_SW_5 ) { } }
但是、终端设备由电池供电、需要进入节能模式。 为了实现这一点,我做了以下工作:
将 power_saving 作为编译器选项。
在 f8wConfig.cfg 中、RFD_RCVC_ALWAYS_ON 设置为 FALSE。
问题 :
使用这些设置对器件进行刷写并启动调试过程后、该过程会启动但突然停止。 根据日志,设备已加入网络,但未能通过访谈:
2023-10-24 19:38:15 Zigbee2MQTT started! 2023-10-24 19:38:36 Device '0x00124b00279e698d' joined 2023-10-24 19:38:36 MQTT publish: topic 'zigbee2mqtt/bridge/event', payload '{"data":{"friendly_name":"0x00124b00279e698d","ieee_address":"0x00124b00279e698d"},"type":"device_joined"}' 2023-10-24 19:38:36 MQTT publish: topic 'zigbee2mqtt/bridge/log', payload '{"message":{"friendly_name":"0x00124b00279e698d"},"type":"device_connected"}' 2023-10-24 19:38:36 Starting interview of '0x00124b00279e698d' 2023-10-24 19:38:36 MQTT publish: topic 'zigbee2mqtt/bridge/event', payload '{"data":{"friendly_name":"0x00124b00279e698d","ieee_address":"0x00124b00279e698d","status":"started"},"type":"device_interview"}' 2023-10-24 19:38:36 MQTT publish: topic 'zigbee2mqtt/bridge/log', payload '{"message":"interview_started","meta":{"friendly_name":"0x00124b00279e698d"},"type":"pairing"}' 2023-10-24 19:40:54 Failed to interview '0x00124b00279e698d', the device has not been successfully paired.
我怀疑这个问题与 Zigbee2MQTT 有关、因为它在没有节能的情况下完美运行。 即使我使用的是具有极少定制的标准示例应用程序、该问题也必须在某处与我的代码相关。
我怀疑器件在调试过程完成之前会进入节能模式。 但是,我不知道为什么会发生这种情况。 我完全陷入了困境。
作为最后的手段,我恳请你的帮助。
请询问可以帮助确定问题的任何代码片段、文件等。 只是为了澄清一下、我没有机会接触到监听器。
指向此处可以看到源文件的链接: