蓝牙mesh组网实践(手机配网例程改低功耗)

目录

在22年7月版本的CH583EVT更新之后,582芯片的adv_vendor_self_provision_with_peripheral例程,适配了wch mesh手机app,支持了OTA,成为功能最全的一个例程。但是默认例程适合常供电的节点,改为wch mesh配网的低功耗节点,需要做一些修改。

CH582本身是带有DCDC功能的,对于降低收发包时的功耗很有帮助。不过该功能需要VSW脚上有一个22uH左右的电感,多一个物料成本。部分代码缺省了启用DCDC的代码块,可以在主函数最开始加上。

#if(defined(DCDC_ENABLE)) && (DCDC_ENABLE == TRUE)
    PWR_DCDCCfg(ENABLE);
#endif

①配置宏定义,使能低功耗节点功能和HAL_SLEEP,关闭转发功能。节点功能可以在app_mesh_config.h 中配置。HAL_SLEEP可以在右键点击工程名->Properties中配置,不建议直接修改公共文件config.h中的宏。改朋友节点好改,朋友节点是常供电节点,直接将朋友节点功能的宏置1即可,但是开启朋友节点功能会增加ram的开销。

②IO口全配置成上拉,固定一下电平,不要留不确定的引脚状态。可以在一开始就配置,后面要用比如说串口,再用串口的引脚的GPIO配置覆盖一下就行。

#if CONFIG_BLE_MESH_LOW_POWER   //或者判断HAL_SLEEP是否启用,都行。使能低功耗节点功能时,需要一并启用HAL_SLEEP
    GPIOA_ModeCfg(GPIO_Pin_All, GPIO_ModeIN_PU);
    GPIOB_ModeCfg(GPIO_Pin_All, GPIO_ModeIN_PU);
#endif

③BLE广播在配网完成后关闭。如果后面还需要BLE通信,可以自定义指令,需要的时候走mesh消息开启BLE广播。在代码中有两处需要关闭BLE广播,一处是第一次配网过程完成后,另一处是flash中保存有配网信息,恢复配网信息之后。下面是笔者加的处理。注意:如果还需要用到BLE的话,还需要添加接口或是指令再开广播。

④关掉按键循环,留一个TMOS任务。默认例程中按键循环100ms一次,不关的话会将功耗拉到500uA的水平。睡眠的话至少要留一个TMOS任务由RTC唤醒,最长定时为23.5h。默认例程中有一个2min一次的RF校准任务,帮助校准RTC的值。可以延长比如说5分钟校准一次,通信不出问题就行。 

⑤配好网并与朋友节点建立朋友关系。配网和朋友关系的建立都是由低功耗节点发起的,如果这两件事情不做,低功耗节点“寝食难安”,即使休眠了也会不断唤醒去做这两件事。

⑥关掉BLE_MESH_BEACON_ENABLED。使能后,每10s一次安全广播用于IV值更新。低功耗节点可以由朋友节点支持IV值更新,可以关掉。上面的relay enabled默认就好,节点功能宏定义中关掉转发功能就行。

#if(CONFIG_BLE_MESH_LOW_POWER)
    .beacon = BLE_MESH_BEACON_DISABLED,
#else
    .beacon = BLE_MESH_BEACON_ENABLED,
#endif

 

接下来是实测情况,测试条件为最小电路板,启用DCDC,不经过LDO降压直接供电3.3v。保留了默认例程中2min一次的RTC校准任务,这个时间可以延长,只要RTC正常能跑就行。低功耗节点每隔一段时间向朋友节点POLL请求消息,实际没有POLL到消息包。

一段时间内什么都没做,平均功耗在3uA以下

低功耗节点每隔1s向朋友节点POLL请求一次消息,平均功耗在100uA左右

低功耗节点每隔2s向朋友节点POLL请求一次消息,平均功耗在60uA左右

低功耗节点每隔3s向朋友节点POLL请求一次消息,平均功耗在40uA左右

低功耗节点每隔5s向朋友节点POLL请求一次消息,平均功耗在22uA左右

低功耗节点每隔10s向朋友节点POLL请求一次消息,平均功耗15uA

低功耗节点每隔30s向朋友节点POLL请求一次消息,平均功耗在6+uA

低功耗节点每隔1min向朋友节点POLL请求一次消息,平均功耗在5uA以下

posted @ 2022-08-09 20:43  JayWell  阅读(1198)  评论(0编辑  收藏  举报