TuyaOS 低功耗设备休眠时间
ZTU模组。SDK版本:TLSR8258_TuyaOS-3.11.1 使用例程:tuyaos_demo_zg_door_sensor
改为 四路单火通断器。
目前问题是:设备运行一段时间后。zigbee通信失效。手机下发指令无效。使用按键中断唤醒设备。有缓存集群指令下发。初步判断进入休眠
在论坛看到 https://www.tuyaos.com/viewtopic.php?p=18322#p18322 如果设备完全空闲,比如不在网,默认是120s会唤醒一次
1.但是现在设备没有完全空闲。为联网状态。为什么没有执行回调呢。
2.根据社区回复,使用定时器手动唤醒MCU
设备ID:6c214cd99a80c6cd60vmbu
PID: [四路单火通断器-ajcuws8m]
从日志看到。只有中断触发才接收到了控制集群
序号 时间(GMT+8) 设备事件 事件名称 事件详情 来源 来源详情
1 2025-07-08 10:26:10.336 数据上报 开关 开启 设备本身
2 2025-07-08 10:23:31.694 数据上报 开关 4 开启 设备本身
3 2025-07-08 10:23:31.348 数据上报 开关 关闭 设备本身
4 2025-07-08 10:23:28.963 数据上报 开关 2 关闭 设备本身
5 2025-07-08 10:21:51.626 数据上报 开关 2 开启 设备本身
6 2025-07-08 10:21:51.147 数据上报 开关 开启 设备本身
7 2025-07-08 10:21:38.986 上线 上线 设备本身
Code: Select all
/**
* @brief 睡眠定时器回调,每 2 秒调用一次
* 1. 强制唤醒
* 2. 启动一个短暂延迟定时器,避免立即进入睡眠
*/
VOID_T sleep_timer_cb(TIMER_ID timer_id, VOID_T *arg)
{
// tal_cpu_force_wakeup();
tal_cpu_force_wakeup();
TAL_PR_TRACE("sleep_timer_cb : %d", SLEEP_TIMER_INTERVAL_MS);
// 延迟 100ms 后才允许睡眠
tal_sw_timer_start(allow_sleep_timer_id, SLEEP_ALLOW_DELAY_MS, TAL_TIMER_ONCE);
// 重复定时器,2秒后再次唤醒
tal_sw_timer_start(sleep_timer_id, SLEEP_TIMER_INTERVAL_MS, TAL_TIMER_ONCE);
}
/**
* @brief 真正进入睡眠的回调
*/
VOID_T sleep_allow_cb(TIMER_ID timer_id, VOID_T *arg)
{
TAL_PR_TRACE(">>> allow sleep now <<<");
tal_cpu_allow_sleep();
}
VOID_T device_init(VOID_T)
{
memset(&device_status, 0 , sizeof(device_status));
TUYA_GPIO_NUM_E key_pins[CHANNEL_NUM] = {EXT_KEY_PIN_1, EXT_KEY_PIN_2, EXT_KEY_PIN_3, EXT_KEY_PIN_4};
tuya_gpio_key_value_bak = gpio_ext_key_read_keys(key_pins);
//初始化时创建定时器
tal_sw_timer_create(sleep_timer_cb, NULL, &sleep_timer_id);
tal_sw_timer_create(sleep_allow_cb, NULL, &allow_sleep_timer_id);
tal_sw_timer_start(sleep_timer_id, SLEEP_TIMER_INTERVAL_MS, TAL_TIMER_ONCE);
}