蓝牙mesh组网实践(在mesh工程中添加BLE功能)
CH582这款芯片是能够同时跑mesh+BLE的,在我司提供的透传模型“一般节点”或者叫“普通节点”的代码adv_vendor中,也可以添加BLE功能,方便用户随时连接BLE。
在adv_vendor工程中添加BLE的操作步骤如下:
①如图配置预编译宏。
BLE_MAC:用于配置BLE广播所用的MAC地址为代码中自定义的MAC,位于app_main.c的前几行。如果BLE-MAC不配置,使用芯片内置的MAC地址,也可以进行BLE广播。在mesh的未配网节点代码中,配网信标广播默认会用到芯片内置的MAC地址,所以这里建议开启,避免BLE广播和配网信标广播使用同一个MAC。
BLE_MEMHEAP_SIZE:用于给BLE协议栈预留RAM空间。这里使用BLE->LIB文件夹中的LIBCH58xBLE.a文件中的BLE协议栈,按建议是预留6K的RAM。如果RAM资源紧张,该值可以适当减小。如果该值过小,会导致BLE广播难以被发现或者BLE连接后出异常。
②从peripheral工程将profile文件夹、peripheral源/头文件拷贝到adv_vendor工程文件夹中。
③添加头文件包含,在APP_INIT初始化函数中加上下图中的两行BLE相关初始化。
之后就能使用BLE功能了,具体的BLE相关配置可以研究研究peripheral例程。
如果需要使能低功耗节点功能,需要再按如下步骤多几步修改。
④使能mesh低功耗节点功能,关闭转发功能(最好关掉,不关的话LPN长期休眠,也执行转发)。
⑤增加HAL_SLEEP宏,删除HAL_KEY宏,注释掉按键检测功能以及多余的循环TMOS事件。
⑥固定所有引脚的电平。本测试中绝大多数引脚悬空,故将GPIO电平都固定在上拉高电平。
⑦关闭10s一次的安全广播,disable掉就行,IV同步功能会由低功耗节点帮助完成。
在CH582最新EVT中,有支持WCH MESH的demo,能够实现通过厂商定义的指令,走手机APP配网,借助手机保存网络信息及管理网络。鉴于APP开发工程师中熟悉BLE协议的要比熟悉mesh协议的多得多,这一套指令可以帮助APP开发工程师走BLE管理mesh网络。
如果看上这套指令,但是为了更大的codeflash而要舍弃OTA功能,可以尝试将代码移植到adv_vendor_self_provision工程中(理论上adv_vendor也行,保险起见笔者先用adv_vendor_self_provision作为基础工程)。这样移植涉及到多个源文件内部的更改,所以直接拷贝覆盖app及profile两个文件夹即可。注意ld、Startup文件夹不要复制过去,其中包含了OTA的配置;移植后的工程运行中不要触发OTA升级功能。如果需要低功耗节点功能,也请按上面的步骤④~⑦进行修改。