Page 1 of 1

【已解决】【TuyaOS OS】蓝牙MESH 低功耗节点如何实现

Posted: 2022年 Dec 5日 20:46
by 勇敢牛牛不怕代码难

子设备开发:蓝牙 Mesh 设备开发包
描述 正式发布版本
TuyaOS 版本 3.5.0
组件开发包 :tuyaos-subdev-mesh_0.0.29_tlsr825x_smesh_mesh_common_1.2.14

需求:我需要做一个低功耗的传感器,需要进入低功耗模式。但是会接收指令与 上报数据两种;采用一次性7号电池供电,需要比较低的功耗;
我想了解 进入低功耗之后如何保持与APP的连接 与稳定接收数据的下发?

我在泰凌微的原始DEMO sig mesh code中有了解到有一种低功耗节点的方式:低功耗(Low-Power)特性:能够以明显较低的接收端占空比在 mesh 网络中运行。通过将无线电接收器启用时间最小化可实现节点功耗的降低,只有在绝对必要时才启动接收器。低功耗节点(LPN,low power node)通过与好友节点(FN,friend node)建立友谊(friendship)关系来实现这一点。
但是我不知道 ,涂鸦是否将部分功能加入到SDK中?


Re: 【求助】【TuyaOS OS】蓝牙MESH 低功耗节点如何实现

Posted: 2022年 Dec 6日 10:03
by joey_nobug

你好,
你所说的的 LPN 节点与 Friend 节点确实是 mesh 标准 spec 中设置的角色,LPN 节点可以大部分时间休眠,也可以外部中断或者timer唤醒后来上报数据同时周期性唤醒来跟 Friend 通信,Friend 节点会缓存其他设备发给 LPN 节点的消息,等 LPN 节点唤醒时将数据传输给 LPN 节点。
但是目前 Tuya 并未开放使用此两种角色,因为 LPN 节点如果要使用所有功能,mesh 网络中就必须存在 Friend 节点,所以实际产品必须要配套使用。但是目前我们的产品组合是很灵活的,无法彻底约束客户和用户搭配使用,所以目前此两种角色未使用。
我们目前低功耗产品有几类,第一种是大部分时间休眠,只有数据上报时才唤醒发包然后进休眠;第二种是周期性唤醒,唤醒后保持一段时间的唤醒用来接收空中包,以此达到收包的处理,但这个休眠与唤醒的占比需要调试,以及可能需要网关等发送端做特殊处理,建议此类功能联系tuya的产品经理或者项目经理沟通定制;
进入低功耗的方式可参考 software\TuyaOS\docs\TuyaOS_BLE_Mesh_Application_Guide.md 中低功耗处理相关指导,使用 tkl 层 sleep 与 wake_up 相关接口:

Code: Select all

tkl_cpu_sleep_mode_set(1, TUYA_CPU_SLEEP); 	//设置休眠唤醒方式:TUYA_CPU_SLEEP - suspend 模式;TUYA_CPU_DEEP_SLEEP - 深度休眠模式,必须先设置不同模式支持唤醒源方式可能不同

TUYA_WAKEUP_SOURCE_BASE_CFG_T param;
param.source = TUYA_WAKEUP_SOURCE_GPIO;
param.gpio_param.gpio_num = TUYA_GPIO_NUM_26;
param.gpio_param.level = TUYA_GPIO_LEVEL_HIGH;
tkl_wakeup_source_set(&param);				//设置唤醒源:GPIO26 高电平唤醒

param.source = TUYA_WAKEUP_SOURCE_GPIO;
param.gpio_param.gpio_num = TUYA_GPIO_NUM_33;
param.gpio_param.level = TUYA_GPIO_LEVEL_LOW;
tkl_wakeup_source_set(&param);				//设置唤醒源:GPIO33 低电平唤醒

param.source = TUYA_WAKEUP_SOURCE_TIMER;
param.timer_param.mode = TUYA_TIMER_MODE_ONCE;
param.timer_param.ms = 10000;
tkl_wakeup_source_set(&param);				//设置唤醒源:定时 10s 后唤醒

tkl_cpu_allow_sleep();						//进入休眠