TLSR8250_TuyaOS-3.9.0 低功耗实现
设备需要运行定时任务 而且是2节电池供电。
单个模组低功耗是否可以实现? 或者搭配独立rtc芯片实现? 是否有相关的例程。
设备需要运行定时任务 而且是2节电池供电。
单个模组低功耗是否可以实现? 或者搭配独立rtc芯片实现? 是否有相关的例程。
若对误差要求不高的可以启用软件定时器实现定时任务,软件定时器可以在低功耗时使用。
不过误差较大,多的一天会有20s的误差,少的也有10s左右
如果能搭配独立的RTC芯片最好。
搭配独立RTC无相关例程,软件定时器的用法在SDK中有多处使用可以参考。
使用软件定时器, 定时到达会自动唤醒, 之后会自动睡眠吗?
是的,调用了 tal_cpu_allow_sleep 后,只要MCU处理完任务就会自动休眠下去。
休眠的时长为最近一次任务间隔的时间(可能是广播事件,可能是连接听包,也可能是软件定时器事件)
如果有IO被设置为外部唤醒,达到触发电平后也会提前结束休眠状态唤醒。
芯片休眠后仅保留SRAM的数据,所有的内部外设都会断电(GPIO\IIC\SPI\PWM等)。所以需要再次初始化,这里有两个可以使用的入口。
init前记得deinit一遍。
调用了 tal_cpu_allow_sleep 后 , 从日志中看到没有睡眠 (没有调用tuya_init_third打印日志) 是因为开着打印日志的原因吗?
广播间隔是多少?如果是100ms及以下,因为休眠间隔太短 ,休眠只会进入suspend,suspend状态下唤醒不会跑tuya_init_third。
你可以把广播间隔调到1000ms试试。同时要确保被配置为可唤醒的IO处于非触发电平状态
tuya_ble_protocol_callback.h
#define TY_ADV_INTERVAL 20 //range: 2010240ms
改成 1000 是吧 ?
是的 可以在这里改
改成 1000 后, 从日志看到 , 每间隔一秒会调用 tuya_init_third;
1000 是一个最佳值吗?
不是 ,值的大小要根据 体验 和 低功耗 做一个最优调节。
一般来说:广播间隔越小,子设备被发现的速度越快,连接建立的也就越快,体验就越好,缺点就是功耗越高。反之发现慢,连接建立慢,体验变差,优点就是功耗降低。
需要注意的地方: