蓝牙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  阅读(1528)  评论(0编辑  收藏  举报