Demo:Btble:修订间差异
小 武楷轩移动页面Demo:Btble至Demo:Btble |
无编辑摘要 |
||
| (未显示同一用户的4个中间版本) | |||
| 第1行: | 第1行: | ||
== Demo介绍: == | |||
'''这部分Demo主要是蓝牙通讯相关功能的实例代码,这些demo保存在SDK的 example/btble路径下。''' | |||
== blemesh_cli: == | |||
=== 基本介绍: === | |||
该demo创建了一个 Bluetooth mesh 网络,通过向串口发送指令进行初始化后,就可以通过手机APP在mesh网络中进行添加并连接。 | |||
DEMO命令和输出:<syntaxhighlight lang="bash" line="1"> | |||
bouffalolab />blemesh_init #初始化bluemesh网络 | |||
#输出: | |||
Init successfully | |||
Env[LOCAL_NAME] Data len[10], setting_env_cb | |||
Use pb-adv or pb-gatt to enable advertising | |||
bouffalolab />blemesh_pb 2 1 | |||
#输出: | |||
PB-GATT enabled | |||
</syntaxhighlight>执行完上述命令后,就可以使用手机APP进行NODE的添加和连接。 | |||
添加的步骤如下:<gallery> | |||
文件:APPopen.png|step1 | |||
文件:Meshnode2.png|step2 | |||
文件:Meshnode3.png|step3 | |||
文件:Meshnode4.png|step4 | |||
文件:Meshnode5.png|step5 | |||
文件:Meshnode6.png|ste6 | |||
文件:Meshnode7.png|step7 | |||
文件:Meshnode8.png|step8 | |||
文件:Meshnode9.png|step9 | |||
文件:Meshnode10.png|step10 | |||
文件:Meshnode11.png|step11 | |||
文件:Meshnode12.png|step12 | |||
文件:Meshnode13.png|step13 | |||
</gallery> | |||
=== 如何使用配网器 Provisioner 将新设备添加进网络中: === | |||
大概流程如下: | |||
'''1.打开未配网设备 ---- 2.启动配网器Provisioner ---- 3.监听设备广播 ---- 4.添加设备到网络 ---- 5.获取设备信息 ---- 6.分配密钥''' | |||
provisioner设备编译时,必须更改一个编译选项: | |||
CONFIG_BT_MESH_PROVISIONER=1 | |||
==== 执行步骤1:打开未配网设备并且输入以下命令: ==== | |||
<syntaxhighlight lang="bash" line="1"> | |||
blemesh_init # 初始化Mesh协议栈 | |||
blemesh_pb 1 1 # 开启PB-ADV和PB-GATT配网承载 | |||
</syntaxhighlight> | |||
==== 执行步骤2: 打开配网器设备输入以下命令: ==== | |||
<syntaxhighlight lang="bash" line="1"> | |||
bouffalolab />blemesh_pvnr_init #初始化Provisioner | |||
#得到输出: | |||
......... | |||
Local node provisioned, net_idx 0x0000 address 0x0001 | |||
Network key:8fe7deea92943001567251dc1f9b0f03 | |||
Dev key:89c2f18f9f286661c6bbb1430d7aadb7 | |||
Provisioning completed | |||
</syntaxhighlight> | |||
* <code>net_idx 0x0000</code>:网络索引 | |||
* <code>address 0x0001</code>:Provisioner自身地址 | |||
* <code>Network key</code>:网络层加密密钥 | |||
* <code>Dev key</code>:设备专属配置密钥 | |||
==== 执行步骤3:打开广播 ==== | |||
执行以下命令: | |||
blemesh_beacon_listen 0x01 # 开启广播监听 | |||
* 扫描周围广播Mesh信标的设备 | |||
* 捕获并显示未配网设备的UUID(如:<code>07af000011112222333318b905de96c2</code>) | |||
* UUID包含设备身份信息(厂商ID、产品ID等) | |||
==== 执行步骤4:在配网器设备上执行 添加设备到网络命令 ==== | |||
<syntaxhighlight lang="bash" line="1"> | |||
bouffalolab />blemesh_provision_adv 07af000011112222333318b905de96c2 0 3 0 | |||
#输出 | |||
P1:“07af000011112222333318b905de96c2" is UUID information. | |||
P2:0:net_idx | |||
P3:3: assign node unicast address。 | |||
P4:0:attention_duration | |||
</syntaxhighlight> | |||
* <code>UUID</code>:目标设备的唯一标识 | |||
* <code>net_idx 0</code>:使用的网络索引 | |||
* <code>address 3</code>:分配给设备的单播地址(0x0003) | |||
* <code>attention_duration 0</code>:配网指示时长(0=无提示) | |||
==== 执行步骤5:获取设备信息 ==== | |||
执行的命令与输出内容:<syntaxhighlight lang="bash" line="1"> | |||
bouffalolab /> blemesh_get_comp 0x0000 0x0003 0x00 | |||
#输出: | |||
P1:net index. | |||
P2:dst address. | |||
P3:page number. | |||
</syntaxhighlight> | |||
* <code>net_idx 0x0000</code>:网络索引 | |||
* <code>dst 0x0003</code>:目标设备地址 | |||
* <code>page 0x00</code>:组成数据页码 | |||
==== 执行步骤6:分配密钥key ==== | |||
<syntaxhighlight lang="bash" line="1"> | |||
bouffalolab /> blemesh_app_key_add 0x0000 0x0003 0x0000 0x0000 | |||
#输出 | |||
P1:net index. | |||
P2:dst address. | |||
P3:Network key index。 | |||
P4:Application key index. | |||
</syntaxhighlight> | |||
== blemesh_simple == | |||
该demo的功能与上述的一致,但是该demo不需要前置的命令操作,在板子上电后会自动启动 blue mesh 网络,你可以参考blemesh_cli中的连接步骤直接进行节点连接。 | |||
如果你需要发送指令来控制,你可以发送以下指令: | |||
"gen_cli_send dstaddress"将控制数据发送到指定的设备地址或这组地址。 | |||
== btble_cli == | |||
该demo会启动一个基本的BLE设备。你需要使用命令去进行操控该设备。 | |||
如果您不熟悉BLE的通信流程,请参考以下基本流程。<syntaxhighlight lang="bash" line="1"> | |||
#服务端执行 | |||
ble_init | |||
ble_start_adv 0 0 0x80 0x80 | |||
#客户端设备执行 | |||
ble_start_scan 0 1 0x80 0x50 | |||
#scan后会获取到对应的地址 进行连接 这里是示例地址 | |||
#连接成功后 服务端的终端会显示 connected | |||
ble_connect 0 B40ECF2E90FC | |||
#查询GATT服务 这里是通用服务码 | |||
ble_discover 0 0x1800 0x1 0xffff 或者 ble_discover 0 0x1801 0x1 0xffff | |||
#如果要查询特殊码(这里可以省略这一步) | |||
ble_discover 3 0x1800 0x1 0xffff | |||
#查询到服务后,可以选择直接读写: | |||
ble_read 0x7 0 | |||
ble_write 0x7 0 2 0102 | |||
#也可以通过CCC进行订阅操作 | |||
ble_subscribe 0x4 0x3 0x1 | |||
#取消订阅: | |||
ble_unsubscribe | |||
</syntaxhighlight>''<big>上述的函数相关具体说明,全部保存在SDK的路径下: docs/en/api_reference/ble.rst</big>'' | |||
=== BLE基本通信流程 GATT服务框架: === | |||
[[文件:BLE.png|链接=https://docs.bouffalolab.com/%E6%96%87%E4%BB%B6:BLE.png|左|450x450像素]] | |||
[[文件:GATT.png|链接=https://docs.bouffalolab.com/%E6%96%87%E4%BB%B6:GATT.png|居中|450x450像素]] | |||
CCC则是一个订阅开关,本质上是一个数值,服务端会监控这个数值,假设该数值变化了,那么服务端则认为连接设备需要订阅消息。 | |||
== btble_controller_test == | |||
BLE控制器测试demo,终端返回 pwr_mod is bf 则表示正常。 | |||
== btble_central == | |||
该demo上电后会直接自动扫描周围的BLE设备,当设备存在并且名称匹配时,会直接进行连接并扫描对应的GATT服务然后进行订阅。 | |||
设备名称,GATT服务等都是程序提前设定好的,这部分设定在同级目录下的 config.h 文件中。 | |||
这里展示一部分 :<syntaxhighlight lang="bash" line="1"> | |||
#endif | |||
/** | |||
* CONFIG_BT_DEVICE_NAME:Bluetooth device name. Name can be up | |||
* to 248 bytes long (excluding NULL termination). Can be empty string | |||
*/ | |||
#ifndef CONFIG_BT_DEVICE_NAME | |||
#if defined(CONFIG_AUTO_PTS) | |||
#define CONFIG_BT_DEVICE_NAME "AUTO_PTS_TEST0123456789012345" | |||
#else | |||
#if defined(BL602) | |||
#define CONFIG_BT_DEVICE_NAME "BL602-BLE-DEV" | |||
#elif defined(BL702) | |||
#define CONFIG_BT_DEVICE_NAME "BL702-BLE-DEV" | |||
#elif defined(BL702L) | |||
#define CONFIG_BT_DEVICE_NAME "BL702L-BLE-DEV" | |||
#else | |||
#define CONFIG_BT_DEVICE_NAME "BTBLE-DEV" | |||
#endif | |||
#endif | |||
#endif | |||
/** | |||
</syntaxhighlight> | |||
== btble_periphral == | |||
该demo测试了BLE的OAD服务,上电后会直接执行GATT的OAD服务注册,然后进行广播,所有了连接上该服务端的设备订阅OAD服务都可以进行OAD远程升级。 | |||
注意这部分代码需要分区表,所以在烧录时必须进行 make whole 将分区表信息烧录进去。 | |||
OAD烧录的固件需要手动生成:<syntaxhighlight lang="bash" line="1"> | |||
#其中FW.bin 是你要进行升级的bin | |||
python3 components/wireless/bluetooth/tools/GenerateOAD.py FW.bin FW.bin.sha256 | |||
</syntaxhighlight> | |||
2025年7月29日 (二) 09:12的最新版本
Demo介绍:
这部分Demo主要是蓝牙通讯相关功能的实例代码,这些demo保存在SDK的 example/btble路径下。
blemesh_cli:
基本介绍:
该demo创建了一个 Bluetooth mesh 网络,通过向串口发送指令进行初始化后,就可以通过手机APP在mesh网络中进行添加并连接。
DEMO命令和输出:
bouffalolab />blemesh_init #初始化bluemesh网络
#输出:
Init successfully
Env[LOCAL_NAME] Data len[10], setting_env_cb
Use pb-adv or pb-gatt to enable advertising
bouffalolab />blemesh_pb 2 1
#输出:
PB-GATT enabled
执行完上述命令后,就可以使用手机APP进行NODE的添加和连接。 添加的步骤如下:
-
step1
-
step2
-
step3
-
step4
-
step5
-
ste6
-
step7
-
step8
-
step9
-
step10
-
step11
-
step12
-
step13
如何使用配网器 Provisioner 将新设备添加进网络中:
大概流程如下:
1.打开未配网设备 ---- 2.启动配网器Provisioner ---- 3.监听设备广播 ---- 4.添加设备到网络 ---- 5.获取设备信息 ---- 6.分配密钥
provisioner设备编译时,必须更改一个编译选项:
CONFIG_BT_MESH_PROVISIONER=1
执行步骤1:打开未配网设备并且输入以下命令:
blemesh_init # 初始化Mesh协议栈
blemesh_pb 1 1 # 开启PB-ADV和PB-GATT配网承载
执行步骤2: 打开配网器设备输入以下命令:
bouffalolab />blemesh_pvnr_init #初始化Provisioner
#得到输出:
.........
Local node provisioned, net_idx 0x0000 address 0x0001
Network key:8fe7deea92943001567251dc1f9b0f03
Dev key:89c2f18f9f286661c6bbb1430d7aadb7
Provisioning completed
net_idx 0x0000:网络索引address 0x0001:Provisioner自身地址Network key:网络层加密密钥Dev key:设备专属配置密钥
执行步骤3:打开广播
执行以下命令:
blemesh_beacon_listen 0x01 # 开启广播监听
- 扫描周围广播Mesh信标的设备
- 捕获并显示未配网设备的UUID(如:
07af000011112222333318b905de96c2) - UUID包含设备身份信息(厂商ID、产品ID等)
执行步骤4:在配网器设备上执行 添加设备到网络命令
bouffalolab />blemesh_provision_adv 07af000011112222333318b905de96c2 0 3 0
#输出
P1:“07af000011112222333318b905de96c2" is UUID information.
P2:0:net_idx
P3:3: assign node unicast address。
P4:0:attention_duration
UUID:目标设备的唯一标识net_idx 0:使用的网络索引address 3:分配给设备的单播地址(0x0003)attention_duration 0:配网指示时长(0=无提示)
执行步骤5:获取设备信息
执行的命令与输出内容:
bouffalolab /> blemesh_get_comp 0x0000 0x0003 0x00
#输出:
P1:net index.
P2:dst address.
P3:page number.
net_idx 0x0000:网络索引dst 0x0003:目标设备地址page 0x00:组成数据页码
执行步骤6:分配密钥key
bouffalolab /> blemesh_app_key_add 0x0000 0x0003 0x0000 0x0000
#输出
P1:net index.
P2:dst address.
P3:Network key index。
P4:Application key index.
blemesh_simple
该demo的功能与上述的一致,但是该demo不需要前置的命令操作,在板子上电后会自动启动 blue mesh 网络,你可以参考blemesh_cli中的连接步骤直接进行节点连接。
如果你需要发送指令来控制,你可以发送以下指令:
"gen_cli_send dstaddress"将控制数据发送到指定的设备地址或这组地址。
btble_cli
该demo会启动一个基本的BLE设备。你需要使用命令去进行操控该设备。
如果您不熟悉BLE的通信流程,请参考以下基本流程。
#服务端执行
ble_init
ble_start_adv 0 0 0x80 0x80
#客户端设备执行
ble_start_scan 0 1 0x80 0x50
#scan后会获取到对应的地址 进行连接 这里是示例地址
#连接成功后 服务端的终端会显示 connected
ble_connect 0 B40ECF2E90FC
#查询GATT服务 这里是通用服务码
ble_discover 0 0x1800 0x1 0xffff 或者 ble_discover 0 0x1801 0x1 0xffff
#如果要查询特殊码(这里可以省略这一步)
ble_discover 3 0x1800 0x1 0xffff
#查询到服务后,可以选择直接读写:
ble_read 0x7 0
ble_write 0x7 0 2 0102
#也可以通过CCC进行订阅操作
ble_subscribe 0x4 0x3 0x1
#取消订阅:
ble_unsubscribe
上述的函数相关具体说明,全部保存在SDK的路径下: docs/en/api_reference/ble.rst
BLE基本通信流程 GATT服务框架:


CCC则是一个订阅开关,本质上是一个数值,服务端会监控这个数值,假设该数值变化了,那么服务端则认为连接设备需要订阅消息。
btble_controller_test
BLE控制器测试demo,终端返回 pwr_mod is bf 则表示正常。
btble_central
该demo上电后会直接自动扫描周围的BLE设备,当设备存在并且名称匹配时,会直接进行连接并扫描对应的GATT服务然后进行订阅。
设备名称,GATT服务等都是程序提前设定好的,这部分设定在同级目录下的 config.h 文件中。
这里展示一部分 :
#endif
/**
* CONFIG_BT_DEVICE_NAME:Bluetooth device name. Name can be up
* to 248 bytes long (excluding NULL termination). Can be empty string
*/
#ifndef CONFIG_BT_DEVICE_NAME
#if defined(CONFIG_AUTO_PTS)
#define CONFIG_BT_DEVICE_NAME "AUTO_PTS_TEST0123456789012345"
#else
#if defined(BL602)
#define CONFIG_BT_DEVICE_NAME "BL602-BLE-DEV"
#elif defined(BL702)
#define CONFIG_BT_DEVICE_NAME "BL702-BLE-DEV"
#elif defined(BL702L)
#define CONFIG_BT_DEVICE_NAME "BL702L-BLE-DEV"
#else
#define CONFIG_BT_DEVICE_NAME "BTBLE-DEV"
#endif
#endif
#endif
/**
btble_periphral
该demo测试了BLE的OAD服务,上电后会直接执行GATT的OAD服务注册,然后进行广播,所有了连接上该服务端的设备订阅OAD服务都可以进行OAD远程升级。
注意这部分代码需要分区表,所以在烧录时必须进行 make whole 将分区表信息烧录进去。
OAD烧录的固件需要手动生成:
#其中FW.bin 是你要进行升级的bin
python3 components/wireless/bluetooth/tools/GenerateOAD.py FW.bin FW.bin.sha256