2025-02-27 17:59:18 +08:00

181 lines
5.7 KiB
ReStructuredText
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Mesh
======================================
1 功能概述
-------------------------------------
本工程实现了mesh provisioner/provisionnee角色主要功能有
| 1.作为provisioner发送unprov广播
| 2.作为provisionee加入provisioner组网
| 3.作为灯设备加入天猫精灵组网
1.1 软件规格
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
* host协议栈
* zephyr v2.7.6 bluetooth host
* 天猫精灵demo:
* 支持click
1.2 代码路径及编译命令
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
| sample: ``./components/bk_bluetooth/mesh/sample``
| zephyr: ``./components/bk_bluetooth/mesh/``
| build cmd``make bk7258 PROJECT=bluetooth/mesh``
2 测试命令
-------------------------------------
2.1 双板demo
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+--------------------------------------------------+------------------------------------------------+
| ble_mesh provision init provisionee | Provisionee 初始化并加入组网 |
+--------------------------------------------------+------------------------------------------------+
| ble_mesh provision init provisioner | Provisioner 初始化并生成组网 |
+--------------------------------------------------+------------------------------------------------+
| ble_mesh provision deprovision <MAC> | 退出组网 |
+--------------------------------------------------+------------------------------------------------+
| ble_mesh provision send_count <time> | 作为provisioner定时在组网内发送数据 |
+--------------------------------------------------+------------------------------------------------+
2.2 天猫精灵demo(灯)
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
+--------------------------------------------------+-----------------------------------------------------------------------+
| ble_mesh tmall init <product_id> <device_secret> |加入天猫精灵组网,参数请参考天猫精灵官方说明 |
| |`天猫精灵开放平台 <https://www.aligenie.com/doc/357554/gtgprq>`_ |
+--------------------------------------------------+-----------------------------------------------------------------------+
3 测试过程
-------------------------------------
3.1 多板组网收发
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
| 1.A板输入 ``ble mesh provision init provisioner``
| 2.其他板子输入 ``ble mesh provision init provisionee``最多20块
| 3.组网成功A会有打印: ``user_prov_node_added:success, mac xxxxxxxx addr xxx i xxx``
| ``do_add_appkey_cb:bind success, addr xxx appaddr xxx``
| 5.A输入 ``ble mesh provision send_count xxx`` xxx为发送间隔(ms)
| 6.正常情况A会有打印 ``remote C8:47:8C:43:2C:A7 mesh 2, we send X, we recv Y, peer recv Z`` 其中包括对方地址mesh地址X为A发送次数Y为A接收此对方次数Z为对端接收次数
| 7.其他板子也会有打印 ``peer count X server recv count Y`` 其中X为A发送次数Y为本端接收次数。
3.2 天猫精灵外设demo(灯)
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
| 1.令天猫精灵进入配网模式
| 2.开发板输入 ``ble_mesh tmall init <product_id> <device_secret>``,等待天猫精灵提示配网成功
| 3.对着天猫精灵说出“开灯”或在手机天猫精灵app控制开关灯可以看到开发板的led灯受到控制。
4 模块图
-------------------------------------
.. figure:: ../../../../_static/bluetooth_mesh_arch.png
:align: center
:alt: module architecture Overview
:figclass: align-center
Figure 1. arch
5 重要流程说明
-------------------------------------
5.1 provisionee初始化
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
::
static void bt_mesh_xxx_ready(int err)
{
if (err)
{
BT_INFO("Bluetooth init failed (err %d)\n", err);
return;
}
BT_INFO("Bluetooth initialized\n");
//注册prov回调注册相关服务
err = bt_mesh_init(&prov, &comp);
if (err)
{
BT_INFO("Initializing mesh failed (err %d)\n", err);
return;
}
...
//开启provisionee
bt_mesh_prov_enable(BT_MESH_PROV_ADV);
BT_INFO("Mesh initialized\n");
}
5.2 provisioner初始化
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
::
static void bt_mesh_xxx_ready(int err)
{
if (err)
{
BT_INFO("Bluetooth init failed (err %d)\n", err);
return;
}
BT_INFO("Bluetooth initialized\n");
//注册prov回调注册相关服务
err = bt_mesh_init(&prov, &comp);
if (err)
{
BT_INFO("Initializing mesh failed (err %d)\n", err);
return;
}
...
bt_rand(net_key, sizeof(net_key));
BT_WARN("netkey %s", bt_hex(net_key, sizeof(net_key)));
//根据net key 创建数据库
err = bt_mesh_cdb_create(net_key);
if (err == -EALREADY)
{
BT_INFO("Using stored CDB");
}
else if (err)
{
BT_ERR("Failed to create CDB (err %d)", err);
return;
}
s_provision_ctx.local_addr = 1 & BIT_MASK(15);
//开启provisioner
err = bt_mesh_provision(net_key, s_netkey_idx, 0, 0, s_provision_ctx.local_addr, dev_key);
if (err)
{
BT_ERR("Provisioning failed (err %d)", err);
return;
}
BT_INFO("Mesh initialized\n");
}