当前文档版本为 v1.0.1,您可以访问当前页面的 开发中 版本以获取最近可能的更新。

Bluetooth: Mesh Provisionee

注意:pan1080-dk-v0.8.0 已验证过Mesh Genie Curtain 的稳定性和部分性能,其他相关的mesh demo 未进行大量测试验证,请用户参考 Mesh Genie Curtain 进行开发测试。

1 功能概述

此sample为pan108xxb5_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: pan108xxb5_evb

  • uart (option): 显示串口log

  • App: PanMesh(IOS) 或 nRF Mesh(IOS/Android)

  • mesh:

  1. 测试PB Remote:需要额外准备一块开发板。

  2. Mesh OTA 只能运行在 1K flash的板子上。

  3. 测试Boot OTA: Boot源码keil烧录,准备串口dongle,升级及boot log通过P30,P31打印,固件生成需要拷贝ota.bin至build目录。

3 编译和烧录

例程位置:zephyr\samples_panchip\Bluetooth\mesh_provisionee

使用 ZAL 工具可以对其进行编译、烧录、打开 VS Code 调试等操作。关于 ZAL 工具的详细介绍请参考:Zephyr APP Launcher 工具介绍

4 演示说明

  1. 根据Zephyr编译环境搭建VSCode开发环境, 准备至少1块其他待入网设备,发送beacon如1020.

  2. 下载前需要erase chip(CONFIG_BT_SETTINGS=y情况下需要,因为需要stored cdb,防止flash冲突),CONFIG_BT_SETTINGS=n情况下不需要

  3. 观察ADC打印

  4. 通过Nrf Mesh进行入网,入网时选择入网方式output oob

  5. 连接后可以通过抓包确认连接间隔为100ms

  6. 入网后按键4次擦除入网信息

  7. 通过PanMesh入网,验证灯控

  8. 通过PanMesh绑定appkey后验证packet test vendor

  9. 通过PanMesh验证Pbremote入网流程

5 开发说明

5.1 KCONFIG

  1. 栈大小分配

    CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=2048
    CONFIG_ISR_STACK_SIZE=2048
    CONFIG_BT_RX_STACK_SIZE=3072
    
  2. flash区域划分,boot应用相关,带boot的程序需要如下配置

    CONFIG_IS_BOOTLOADER=n
    CONFIG_USE_DT_CODE_PARTITION=y
    
  3. driver相关,需要adc driver相关的宏

    CONFIG_ADC=y
    
  4. flash相关 ,demo开启了flash存储功能,入网信息可以保存擦除等操作,并且需要flash driver完成ota

    CONFIG_BT_SETTINGS=y
    CONFIG_FLASH=y
    CONFIG_FLASH_MAP=y
    CONFIG_NVS=y
    CONFIG_SETTINGS=y
    
  5. 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"
    
  6. mesh相关参数

    1. CONFIG_BT_PAN_MESH_MODELS=y开发model层总开关

    2. 可以有3个可选择model

    3. 其他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
    
  7. 调试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
    
  8. 扫描相关参数

CONFIG_BT_MESH_OBSERVER=y          # enhanced controller dynamic scan

5.2 MAIN函数

main函数包括3部分

  1. flash相关的配置擦除, 包括函数ps_settings_initshort_time_multireset_bt_mesh_unprovisioning

  2. bt_enable() 初始化蓝牙

  3. bt_ready() 初始化MESH

  4. 蓝牙回调接口

    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相关操作:

  1. static const struct bt_mesh_prov prov 配置入网参数

  2. struct bt_mesh_model root_models[] 配置mesh model

    通过pro.conj配置使能相应 model

  3. UUID生成方式:静态数组static uint8_t dev_uuid[16]

  4. 入网认证方式:output string

  5. 入网beaer选择:bt_mesh_prov_enable(BT_MESH_PROV_ADV | BT_MESH_PROV_GATT);

5.4 其他说明

  1. light model和config model,health model相关参考后续介绍model文档,参考spec文档。

  2. Pb remote model实现在zephyr内subsys\bluetooth\mesh_models\sig_models\remote_srv.c

  3. Sig OTA实现在zephyr内subsys\bluetooth\mesh_models\sig_models\blob_srv.c

  4. Packet Test Vendor Model实现在zephyr内subsys\bluetooth\mesh_models\vendor_models\ptv_srv.c

6 补充说明

  1. mesh_model 源码在subsys\bluetooth\mesh_models\内统一coding

  2. 由于Ram剩余不足,Mesh Log分情况打开。

7 RAM/Flash资源使用情况

Memory region         Used Size  Region Size  %age Used
FLASH:      161680 B       384 KB     41.12%
SRAM:       39399 B        50 KB     76.95%