Bluetooth: Mesh Provisioner¶
1 功能概述¶
此sample为pan1080a_afld_evb作为mesh_provisioner的实例演示项目,可以演示作为provisioner,先进行自我配置netkey,存储,然后通过pb adv对其他待入网设备广播进行扫描,建立link,入网的流程,并包括后续的配置流程。
3 编译和烧录¶
项目位置:zephyr\samples_panchip\bluetooth\mesh_provisioner
目前可使用ZAL工具或quick build脚本进行编译和下载。
脚本位置:quick_build_samples\bluetooth\mesh_provisioner.bat
。
打开脚本后默认会编译项目,编译完成时,可输入字符进行后续下载等操作:
Input the keyword to continue:
'b' build 编译项目
'r' make clean and rebuild 重新编译项目
'f' flash download 下载
'e' erase chip 擦除芯片
'o' open project by VS Code 打开 `VS Code`,可查看源码,执行编译下载等
others exit 退出
wait input:
4 演示说明¶
根据Zephyr编译环境搭建VSCode开发环境, 准备至少1块其他待入网设备,发送beacon如1020.
下载前需要erase chip(
CONFIG_BT_SETTINGS=y
情况下需要,因为需要stored cdb,防止flash冲突),CONFIG_BT_SETTINGS=n
情况下不需要烧录完成后观察入网,当附近没有待入网设备时,provisioner持续扫描,当附近存在待入网设备时,provisioner会入网第一个扫描的设备,并尝试配置
配置由于adv扫描效率问题,可能会出现失败,这时可以采用复位已入网的设备继续流程(不是擦除入网信息,是保留入网状态条件的复位)
5 开发说明¶
5.1 KCONFIG宏说明¶
flash相关
CONFIG_BT_SETTINGS
建议关闭,此宏控制入网信息是否保存至provisioner的CDB(configuration database)# Store Bluetooth state and configuration persistently CONFIG_BT_SETTINGS=n CONFIG_BT_MESH_RPL_STORE_TIMEOUT=600 # menuconfig Enable support for the flash hardware. CONFIG_FLASH=y CONFIG_FLASH_PAGE_LAYOUT=y #Enables API for retrieving the layout of flash memory pages. # menuconfig Enable support of flash map abstraction. CONFIG_FLASH_MAP=y # Enable support of Non-volatile Storage. CONFIG_NVS=y # menuconfig users settings store CONFIG_SETTINGS=y
Provisioner 相关
选择provisioner
CDB使能
网络node最大2:除去provisioner 可以再入1个
# need config as this to be noticed as provisioner rather than a provisionee CONFIG_BT_MESH_PROVISIONER=y CONFIG_BT_MESH_PROV_DEVICE=n # creat a configuration database not use stored CONFIG_BT_MESH_CDB=y # count of net config,can only provision other 1 node CONFIG_BT_MESH_CDB_NODE_COUNT=2 CONFIG_BT_MESH_CDB_SUBNET_COUNT=3 CONFIG_BT_MESH_CDB_APP_KEY_COUNT=3
调试LOG宏,不建议全开,log较多占一定ram
CONFIG_BT_DEBUG_LOG=y CONFIG_BT_MESH_DEBUG=y CONFIG_BT_DEBUG_CONN=y CONFIG_BT_MESH_DEBUG_BEACON=y CONFIG_BT_MESH_DEBUG_PROV=y CONFIG_BT_MESH_DEBUG_ADV=y CONFIG_BT_MESH_DEBUG_PROXY=y CONFIG_BT_MESH_DEBUG_MODEL=y CONFIG_BT_MESH_DEBUG_ACCESS=y CONFIG_BT_MESH_DEBUG_TRANS=y CONFIG_BT_MESH_DEBUG_KEYS=y CONFIG_BT_MESH_DEBUG_NET=y
mesh相关参数
CONFIG_BT_MESH=y CONFIG_BT_MESH_SUBNET_COUNT=1 CONFIG_BT_MESH_APP_KEY_COUNT=1 CONFIG_BT_MESH_ADV_BUF_COUNT=10 CONFIG_BT_MESH_TX_SEG_MSG_COUNT=3 CONFIG_BT_MESH_RX_SEG_MAX=32 CONFIG_BT_MESH_MODEL_GROUP_COUNT=2 CONFIG_BT_MESH_LABEL_COUNT=0 CONFIG_BT_MESH_CFG_CLI=y CONFIG_BT_MESH_HEALTH_CLI=y CONFIG_BT_MESH_BEACON_ENABLED=n CONFIG_BT_MESH_RELAY=y CONFIG_BT_MESH_RELAY_RETRANSMIT_COUNT=3
ble相关参数
CONFIG_BT=y CONFIG_BT_TINYCRYPT_ECC=y # Select this for LE Observer role support CONFIG_BT_OBSERVER=y # Select this for LE Broadcaster role support. CONFIG_BT_BROADCASTER=y
5.2 MAIN函数说明¶
main函数包括3部分:
bt_enable()
初始化蓝牙bt_ready()
初始化MESH信号量操作
k_sem_reset
k_sem_reset(&sem_unprov_beacon);
k_sem_reset(&sem_node_added);
先reset信号量标志,再通过sem_unprov_beacon或者sem_node_added的回调give信号量,while(1)持续获取take以上信号量完成循环入网/配置流程:
先获取配置信息,首先配置自己,由于
CONFIG_BT_SETTINGS=n
,因此不会记录入网信息,重启后复原,不会采用stored cdb搜索广播包,由于配置最大网络个数2,
CONFIG_BT_MESH_CDB_NODE_COUNT=2
,还可以入网1个设备入网后会对该设备进行配置
static void configure_node(struct bt_mesh_cdb_node *node)
配置包括get composition data,add appkey,bind appkey to each model as usual.
5.3 其他说明¶
入网演示走的流程是pb adv广播方式入网,包含的zephyr应用库subsys\bluetooth\mesh下的
pb_adv.c
prov.c
prov_bearer.c
provisioner.c
等源码,运行sample可以参考以上。对比原始sample,provisioner调整过CONFIG_MAIN_STACK_SIZE=2048栈大小
对比原始sample,由于入网adv扫描在pan1080a_afld_evb上还待优化,修改过入网超时时间
err = k_sem_take(&sem_node_added, K_SECONDS(30));
入网不会失败,但会经过较长时间。