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

目录

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

CH582本身是带有DCDC功能(现版本EVT如已添加,不必额外添加)的,对于降低收发包时的功耗很有帮助。不过该功能需要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口全配置成上拉,固定一下电平,不要留不确定的引脚状态(现版本EVT如已添加,不必额外添加)可以在一开始就配置,后面要用比如说串口,再用串口的引脚的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的话,还需要添加接口或是指令再开广播。

#if(!CONFIG_BLE_MESH_LOW_POWER)     //XXX JW
        // Restart advertising
        {
            uint8_t advertising_enable = TRUE;
            GAPRole_SetParameter(GAPROLE_ADVERT_ENABLED, sizeof(uint8_t), &advertising_enable);
        }
#endif

#if(CONFIG_BLE_MESH_LOW_POWER)     //XXX JW 低功耗节点,在发现已配网后就默认不打开BLE广播,需要开广播时可
        {
            uint8_t advertising_enable = FALSE;
            GAPRole_SetParameter(GAPROLE_ADVERT_ENABLED, sizeof(uint8_t), &advertising_enable);
        }
#endif

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

 

⑤关掉BLE_MESH_BEACON_ENABLED使能后,每10s一次安全广播用于IV值更新。低功耗节点可以由朋友节点支持IV值更新,可以关掉。

.relay = BLE_MESH_RELAY_ENABLED   默认就好,节点功能宏定义中关掉转发功能后,结构体中的.relay不再生效。

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

⑥减少不必要的附加功能来降低功耗按键检测尽量用GPIO唤醒+GPIO中断的方式实现;驱动LED就直接在TMOS事件中拉IO电平即可,sleep休眠期间IO状态是保持的。

⑦配好网并与朋友节点建立朋友关系配网在WCH MESH手机APP中完成;建立朋友关系需要周围有正在工作的朋友节点。配网和朋友关系的建立都是由低功耗节点发起的,如果这两件事情不做,低功耗节点“寝食难安”,即使休眠了也会不断唤醒去做这两件事。 

 

接下来是实测情况,测试条件为最小电路板,启用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  阅读(1617)  评论(0编辑  收藏  举报