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

Bluetooth: Multi-roles

1 功能概述

此项目演示了蓝牙多角色的功能。可以通过 zephyr shell 控制设备执行广播、扫描、连接(主和从)等。

2 环境要求

  • board: pan1080a_afld_evb

  • uart: 显示串口log和shell交互

  • 测试软件:SecureCRT,用于 shell 交互

  • 测试软件 (option): nRF Connect

执行多连接时,需要多个支持蓝牙的设备。

3 编译和烧录

项目位置:zephyr\samples_panchip\bluetooth\mult_roles

目前可使用ZAL工具或quick build脚本进行编译和下载。

脚本位置:quick_build_samples\bluetooth\mult_roles.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 演示说明

4.1 启动广播

uart:~$ ble adv conn_ind_start
Advertising successfully started

4.2 启动扫描

uart:~$ ble scan passive_start
Scanning successfully started
uart:~$ 00 > 37:09:A7:33:53:B6 (random) (RSSI -98) (ADV_NONCONN_IND)
01 > 39:E9:F4:88:25:21 (random) (RSSI -95) (ADV_NONCONN_IND)
02 > 3B:2C:F8:A6:0D:85 (random) (RSSI -95) (ADV_NONCONN_IND)
03 > 25:A0:8B:A9:CE:CB (random) (RSSI -98) (ADV_NONCONN_IND)
04 > 1A:E1:B2:2D:BC:1A (random) (RSSI -94) (ADV_NONCONN_IND)
05 > 74:AC:D5:CF:97:3A (random) (RSSI -92) (ADV_IND)
06 > 0A:6F:3B:F4:FC:77 (random) (RSSI -93) (ADV_NONCONN_IND)
07 > 00:20:21:05:27:FF (public) (RSSI -92) (ADV_IND)
08 > BB:CA:11:20:00:06 (public) (RSSI -91) (ADV_IND)
09 > 01:95:C8:38:2E:C1 (random) (RSSI -81) (ADV_NONCONN_IND)
10 > 7B:7B:2B:BD:A7:BA (random) (RSSI -81) (ADV_NONCONN_IND)
11 > 3E:18:64:B8:8A:B4 (random) (RSSI -92) (ADV_NONCONN_IND)
12 > 26:D1:B3:49:78:A5 (random) (RSSI -92) (ADV_NONCONN_IND)
13 > 12:1D:7C:92:53:B1 (random) (RSSI -85) (ADV_NONCONN_IND)
14 > 64:D6:45:C8:ED:3C (random) (RSSI -86) (ADV_IND)
15 > FF:FF:FF:FF:FF:FF (public) (RSSI -75) (ADV_IND)
16 > 21:88:3B:73:56:62 (random) (RSSI -94) (ADV_NONCONN_IND)
17 > 2B:46:04:9D:A9:08 (random) (RSSI -88) (ADV_NONCONN_IND)
18 > 1A:A0:5E:42:34:6E (random) (RSSI -88) (ADV_NONCONN_IND)
19 > 4E:E5:97:61:EB:3B (random) (RSSI -88) (ADV_IND)

需要注意的是:

  • 当前可以存储20条设备信息,当扫描到的设备信息存储满时,将自动终止扫描

  • 发起连接(ble conn create)时如果当前处于扫描状态,则会终止扫描后启动连接

4.3 显示设备信息

显示扫描、连接设备列表信息。

uart:~$ ble devs show
Detected List:
00 > 37:09:A7:33:53:B6 (random) (RSSI -98) (ADV_NONCONN_IND)
01 > 39:E9:F4:88:25:21 (random) (RSSI -95) (ADV_NONCONN_IND)
02 > 3B:2C:F8:A6:0D:85 (random) (RSSI -95) (ADV_NONCONN_IND)
03 > 25:A0:8B:A9:CE:CB (random) (RSSI -98) (ADV_NONCONN_IND)
04 > 1A:E1:B2:2D:BC:1A (random) (RSSI -94) (ADV_NONCONN_IND)
05 > 74:AC:D5:CF:97:3A (random) (RSSI -92) (ADV_IND)
06 > 0A:6F:3B:F4:FC:77 (random) (RSSI -93) (ADV_NONCONN_IND)
07 > 00:20:21:05:27:FF (public) (RSSI -92) (ADV_IND)
08 > BB:CA:11:20:00:06 (public) (RSSI -91) (ADV_IND)
09 > 01:95:C8:38:2E:C1 (random) (RSSI -81) (ADV_NONCONN_IND)
10 > 7B:7B:2B:BD:A7:BA (random) (RSSI -81) (ADV_NONCONN_IND)
11 > 3E:18:64:B8:8A:B4 (random) (RSSI -92) (ADV_NONCONN_IND)
12 > 26:D1:B3:49:78:A5 (random) (RSSI -92) (ADV_NONCONN_IND)
13 > 12:1D:7C:92:53:B1 (random) (RSSI -85) (ADV_NONCONN_IND)
14 > 64:D6:45:C8:ED:3C (random) (RSSI -86) (ADV_IND)
15 > FF:FF:FF:FF:FF:FF (public) (RSSI -75) (ADV_IND)
16 > 21:88:3B:73:56:62 (random) (RSSI -94) (ADV_NONCONN_IND)
17 > 2B:46:04:9D:A9:08 (random) (RSSI -88) (ADV_NONCONN_IND)
18 > 1A:A0:5E:42:34:6E (random) (RSSI -88) (ADV_NONCONN_IND)
19 > 4E:E5:97:61:EB:3B (random) (RSSI -88) (ADV_IND)
Connected List:
- Empty

4.4 与设备建立连接

在与设备建立连接时,需要先获取待连接设备的编号,可以通过 ble devs show 获取。

如下命令,表示将与 Detected List列表中编号为05的设备建立连接:

uart:~$ ble conn create 5
Connecting ...
uart:~$ Connect to 74:AC:D5:CF:97:3A (random) successful

5 其它说明

5.1 配置

项目配置文件: prj.conf,其中包含了 Bluetoothshelldebug等的一些配置。

其中支持的最大连接数量由如下参数配置:

CONFIG_BT_MAX_CONN=8

5.2 shell 命令

shell 支持的 ble 命令

ble - BLE commands
Subcommands:
  adv    :LE Advertising commands
  Subcommands:
    conn_ind_start     :LE Start Advertising with ADV_IND command
    nonconn_ind_start  :LE Start Advertising with ADV_NONCONN_IND command
    stop               :LE Stop Advertising command
  scan   :LE Scanning commands
  Subcommands:
    passive_start  :LE Start Passive Scanning command
    active_start   :LE Start Active Scanning command
    stop           :LE Stop Scanning command
  conn   :LE Connection commands
  Subcommands:
    create   :LE Create Connection command
    disconn  :Disconnect command
  devs   :LE Device Status commands
  Subcommands:
    show   :Display BLE Devices command
    clear  :Clear Detected List command
  reset  :Reset commands