Solution: Mesh Panchip¶
1 功能概述¶
此sample为pan1080a_afld_evb在solutin应用中,多种model的应用,多种function的示例,目的为同时实现多种model的演示,方案级的代码构成。
具体支持的feature如下: 1. Boot 应用 2. 多次擦除验证BT Setting 操作flash 3. 读取DTS ADC温度传感器 4. Light model DTS GPIO灯控功能 5. Pb remote入网功能 6. Panchip Test Vendor Model测试收包率 7. output string oob方式入网 8. BLE 更新连接参数
2 环境要求¶
board: pan1080a_afld_evb
uart (option): 显示串口log
App: PanMesh(IOS) 或 nRF Mesh(IOS/Android)
mesh:
测试PB Remote:需要额外准备一块开发板。
Mesh OTA 只能运行在 1K flash的板子上。
测试Boot OTA: Boot源码keil烧录,准备串口dongle,升级及boot log通过P30,P31打印,固件生成需要拷贝
ota.bin
至build目录。
3 编译和烧录¶
项目位置:zephyr\samples_panchip\solutions\mesh_panchip
统一的配置、编译、下载工具正在开发中,当前可以使用脚本进行编译和下载。
脚本位置:quick_build_samples\solutions\mesh_panchip.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
情况下不需要观察ADC打印
通过Nrf Mesh进行入网,入网时选择入网方式output oob
连接后可以通过抓包确认连接间隔为100ms
入网后按键4次擦除入网信息
通过PanMesh入网,验证灯控
通过PanMesh绑定appkey后验证packet test vendor
通过PanMesh验证Pbremote入网流程
5 开发说明¶
5.1 KCONFIG¶
栈大小分配
CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=2048 CONFIG_ISR_STACK_SIZE=2048 CONFIG_BT_RX_STACK_SIZE=3072
flash区域划分,boot应用相关,带boot的程序需要如下配置
CONFIG_IS_BOOTLOADER=n CONFIG_USE_DT_CODE_PARTITION=y
driver相关,需要adc driver相关的宏
CONFIG_ADC=y
flash相关 ,demo开启了flash存储功能,入网信息可以保存擦除等操作,并且需要flash driver完成ota
CONFIG_BT_SETTINGS=y CONFIG_FLASH=y CONFIG_FLASH_MAP=y CONFIG_NVS=y CONFIG_SETTINGS=y
BLE相关,demo涉及DLE,CONFIG_BT_DEVICE_NAME显示等
CONFIG_BT=y CONFIG_BT_OBSERVER=y CONFIG_BT_DATA_LEN_UPDATE=n CONFIG_BT_AUTO_DATA_LEN_UPDATE=y CONFIG_BT_PHY_UPDATE=n CONFIG_BT_PERIPHERAL=y CONFIG_BT_TINYCRYPT_ECC=y CONFIG_BT_L2CAP_TX_BUF_COUNT=5 CONFIG_BT_DEVICE_NAME_DYNAMIC=y CONFIG_BT_DEVICE_NAME="panchip"
mesh相关参数
CONFIG_BT_PAN_MESH_MODELS=y
开发model层总开关可以有3个可选择model
其他mesh参数的分配和使能
CONFIG_BT_MESH=y CONFIG_BT_PAN_MESH_MODELS=y CONFIG_BT_MESH_PB_REMOTE_SRV=y CONFIG_BT_MESH_SIG_OTA_SRV=y CONFIG_BT_MESH_PTV_SRV=y CONFIG_BT_MESH_SUBNET_COUNT=1 CONFIG_BT_MESH_APP_KEY_COUNT=2 CONFIG_BT_MESH_MODEL_GROUP_COUNT=2 CONFIG_BT_MESH_LABEL_COUNT=1 CONFIG_BT_MESH_TX_SEG_MSG_COUNT=6 CONFIG_BT_MESH_RX_SEG_MSG_COUNT=6 CONFIG_BT_MESH_ADV_BUF_COUNT=30 CONFIG_BT_MESH_TX_SEG_MAX=6 CONFIG_BT_MESH_RX_SEG_MAX=6 CONFIG_BT_MESH_UNPROV_BEACON_INT=5 CONFIG_BT_MESH_MODEL_EXTENSIONS=y CONFIG_BT_MESH_RELAY=y CONFIG_BT_MESH_FRIEND=n CONFIG_BT_MESH_PB_GATT=y CONFIG_BT_MESH_PB_ADV=y CONFIG_BT_MESH_GATT_PROXY=y
调试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
5.2 MAIN函数¶
main函数包括3部分
flash相关的配置擦除, 包括函数
ps_settings_init
,short_time_multireset_bt_mesh_unprovisioning
bt_enable()
初始化蓝牙bt_ready()
初始化MESH蓝牙回调接口
static void connected(struct bt_conn *conn, uint8_t err) { if (err) { printk("Connection failed (err 0x%02x)\n", err); } else { printk("Connected\n"); } } static void disconnected(struct bt_conn *conn, uint8_t reason) { printk("Disconnected (reason 0x%02x)\n", reason); } BT_CONN_CB_DEFINE(conn_callbacks) = { .connected = connected, .disconnected = disconnected, };
5.3 ble_mesh¶
ble/mesh相关操作:
static const struct bt_mesh_prov prov
配置入网参数struct bt_mesh_model root_models[]
配置mesh model通过
pro.conj
配置使能相应 modelUUID生成方式:静态数组
static uint8_t dev_uuid[16]
入网认证方式:output string
入网beaer选择:
bt_mesh_prov_enable(BT_MESH_PROV_ADV | BT_MESH_PROV_GATT);
5.4 其他说明¶
light model和config model,health model相关参考后续介绍model文档,参考spec文档。
Pb remote model实现在zephyr内
subsys\bluetooth\mesh_models\sig_models\remote_srv.c
Sig OTA实现在zephyr内
subsys\bluetooth\mesh_models\sig_models\blob_srv.c
Packet Test Vendor Model实现在zephyr内
subsys\bluetooth\mesh_models\vendor_models\ptv_srv.c
6 补充说明¶
mesh_model 源码在
subsys\bluetooth\mesh_models\
内统一coding由于Ram剩余不足,Mesh Log分情况打开。