分享

蓝牙基本原理

 恰似一场梦 2019-09-21

简介

本次讲座介绍 SimpleLink™ CC26x2 和 CC13x2 软件开发套件 (SDK) 的 低功耗 Bluetooth® 器件。本次实验中的 4 个任务预计将在 2 小时内完成。完成 这些任务需具备中级 C 语言编程知识 以及一定的嵌入式软件开发经验。

本次实验课程将使用 SimpleLink CC26X2R1 无线 MCU LaunchPad 开发套件来演示本模块中的各项任务。第一项任务是演示 如何将项目下载到设备以及如何运行, 然后我们将讨论无线 BLE 接口, 并对 BLE 应用做一些小的更改。

对于后面的任务来说,我们将需要用到一个支持低功耗蓝牙的手机或 运行 TI host_test 示例应用的评估套件。使用 host_test 的优点在于可以使用 BTool 等 TI 工具。

套件和 SDK 兼容性

LAUNCHXL-CC26x2R1LAUNCHXL-CC1352R1 套件均支持 各自的软件开发套件中包含的 低功耗蓝牙栈。在本次实验中,我们将以 CC26x2R Launchpad 和 CC26x2 SDK 为例, 但两者的适用性相同。

除了进行本实验,还建议阅读 TI BLE-Stack 用户指南 以了解详细信息和更多信息。本文还提供了一些参考文献。

必要条件

桌面开发软件

为了进行测试,需要使用蓝牙客户端应用:

  • BTool(位于 SimpleLink CC26x2 SDK 安装程序目录 tools->ble5stack)
  • 蓝牙移动应用:

编译器支持

请参阅支持的 TI ARM 编译器版本的 SimpleLink CC26X2 SDK 发行说明。 与 CCS 中的其他 TI ARM 编译器版本的兼容性尚未经过测试, 因此使用其他编译器版本可能会导致未定义行为。 请参阅《TI BLE-Stack 用户指南》的 SDK 快速入门指南 → IDE → CCS → 步骤 4. 一章,了解安装其他编译器版本的步骤。

硬件

用于测试:

  • 运行 host_test 的其他 CC26xx LaunchPad
  • 用于测试的移动设备

推荐阅读

入门 - 桌面

安装软件

通过 View → Resource Explorer 打开 Resource Explorer,找到 您要安装的 SDK。

在右侧将看到下载图标。单击此处以安装 SDK 以及它的所有依赖项。

1.从上方必要条件下的 SDK 链接下载离线安装程序

2.运行 SimpleLink CC26X2 SDK 安装程序:simplelink_cc26x2_sdk_1_60_00_xx.exe。 以下说明假设默认安装目录为:C:\ti\

在这种情况下,您无需在计算机上进行任何安装。您可以导航到 TI-Rex 中的项目并将它导入 CCS 云。

然后单击 Cloud Import 按钮:

请注意,这不会在计算机上安装 BTool。

这将为您提供:

  • 位于 C:\ti\simplelink_cc26x2_sdk_1_60_00_xx 的 SimpleLink CC26X2 SDK
  • 可通过 SimpleLink CC26X2 SDK 安装目录 tools->ble5stack->btool 目录 访问的 BTool

任务 1 - 运行 ProjectZero 项目

第一个任务只需在 CC26X2R1 LaunchPad 上运行 Project Zero 示例项目, 并验证项目按照预期运行。

无线下载和 BIM 项目

请注意,此项目默认配置为 无线更新 (OAD)。这意味着您可以在手机上将新版本或完全不同的项目 上传到 LaunchPad。

它还意味着项目编译和链接的方式使您的设备的内部闪存中 必须先存在 cc26xxr1lp_bim_offchip 项目, 项目才能正常运行。有关详情,稍后继续。

启动映像管理器

客户配置 (CCFG)

此配置部分用来指示设备在启动后的行为方式, 如复位矢量的位置、时钟源是什么,等等。

启动映像管理器 (BIM) 项目与 CCFG 部分位于内部闪存的最后一个扇区, 负责从外部闪存加载新的映射(如果有), 并启动内部映像。在 我们的案例中,内部映像是 Project Zero

如果不存在 BIM,从 IDE 调试和启动 Project Zero 将正常进行,因为 IDE 覆盖引导配置并 直接跳到它认为项目启动地址所在的位置。但如果 不存在 BIM,在复位后,设备将不知道做什么。

请注意,在使用支持 OAD 的项目时,只需下载 BIM 一次。

导入 CCS 桌面

打开 Code Composer Studio 并导入 Project Zero 应用和堆栈库 项目:

  • 打开 TI Resource Explorer (View → Resource Explorer) 或进入 http://dev./tirex/#/
  • 在左侧的导航面板中,通过展开操作查找 SimpleLink CC26X2 SDK 中的 Project Zero。
    • Software → SimpleLink CC26X2 SDK - v:1.60.00.xx → Examples → Development Tools → CC26x2R LaunchPad → ble5stack → project_zero → TI-RTOS → CCS Compiler → project_zero_app
目录结构
  • 单击上方标记的项目文件夹。在右侧窗口中,单击右上角的 CCS 徽标 将项目导入您的工作区中。

    • 使用 CCS 桌面,导入工作区
      Resource Explorer
    • 使用 CCS 云,在浏览器中导入 CCS 云工作区
      Resource Explorer
  • 项目将显示在您的 Project Explorer 窗口中,如下所示:

已导入

连接 CC26X2R LaunchPad

首先确保您的套件已组装、开启并且通过 USB 线缆 连接到 PC。

连接 CC26X2R Launchpad 后,Windows 设备管理器 (开始 → 控制面板 → 设备管理器, 或在 Windows 10 上使用 Win+X, M) 应该会显示已连接以下设备:

设备管理器

Application/User UART 串行端口用于此示例中的 应用输出。

配置调试器连接

导入项目时会默认选择正确的调试器类型 (XDS110)。

连接终端程序

要查看套件的串行输出,必须使用终端仿真器。 当您确认调试器与设备的连接正常时,立即启动终端仿真器。有多种选择可供使用:

1.启动您的终端程序

2.选择 115200 波特速率、8 位数据、1 个停止位、无奇偶校验、无流量控制。

3.打开串行端口

构建项目并刷写设备

cc26xxr1lp_bim_offchip

1.构建 BIM 项目,方法是右键单击该项目并选择 Build Project

  • 或者通过按 Ctrl + B 构建所有项目。 2.对项目进行编程,方法是右键单击该项目,并选择 Debug As -> Code Composer Debug Session 3.当 IDE 在 bim_main 函数处暂停时,通过单击 Ctrl + F2 或方形红色停止图标来终止调试会话。

ble5_project_zero_cc26x2r1lp_app

1.构建 ble5_project_zero_cc26x2r1lp_app 项目,方法是右键单击该项目并选择 Build Project

  • 这将先为您自动构建堆栈库项目。

2.下载并运行该项目,方法是

  • 右键单击该项目,并选择 Debug As -> Code Composer Debug Session,或
  • 当项目标记为活动时(见上图),按下 F11
  • 单击工具栏中的绿色虫子图标

3.下载项目并在 main() 暂停后,按下 F8 或 Play/Pause 按钮开始执行代码。

应用运行后,您应可在终端应用中观察到如下所示的内容:

Putty 初始内容

这会显示用户应用正在初始化三个服务:LED、Button 和 Data,并设置这些服务中特征的初始值。最后会从堆栈收到回调, 该回调指出设备已准备就绪并已开始广播其存在。

记下您的设备地址供以后使用。

任务 2 - 连接和浏览公开的服务

为了与低功耗蓝牙设备进行交互,您需要使用指向该设备并充当中央设备的东西。

许多移动应用程序可用于此目的。我们将介绍 使用适用于 iOS 和 Android 的 TI SimpleLink Starter 应用的 说明。

除了这些移动应用,德州仪器 (TI) 还为此提供了一些 PC 工具,这些工具可通过串行端口与加载到独立的 CC26xx 器件上的 特定固件进行通信。这些串行命令符合 蓝牙 SIG 定义的 HCI 标准,且除了 HCI 规范要求的裸机链路层命令之外,还允许控制主机层,如 GATT、GAP 和 Security Manager。

诸如 BTool 之类的工具使用此接口连接到其他 BLE 设备以及与这些设备进行交互。

通过展开以下框来选择连接到 Project Zero 的首选方法。

首先,您将使用 host_test 项目对第二个板进行编程。 host_test 项目允许用户通过串行接口调用 BLE 栈的大多数 GAP、GATT 和 ATT 函数。

0 – 在 Launchpad 上进行 HostTest 编程

在这里,您有两个选择:

  • 从 BLE5 示例文件夹构建 ble5 host_test 并将它编程到设备上,或

  • 下载 适用于您的平台的 UniFlash 并在 [sdk]examples/rtos/[board]/ble5stack/hexfiles/[device]/ble5_host_test_[board].hex 中的 预构建十六进制文件中进行编程

1 – 启动 BTool

BTool 是一个使用 HCI 供应商特定命令的 PC 工具, 作为低功耗蓝牙设备使用。BTool 可在 SimpleLink CC26X2 SDK 安装文件夹 tools -> blestack ->3363 btool 中找到。

BTool 打开时,会提示您选择 host_test 设备连接到的串行端口,如下图所示。

BTool 串行端口配置

如果您有多个 COM 端口,请在 host_test 正在运行的情况下使用 Windows 设备管理器查看哪一个端口连接到套件的 Application/User COM 端口。这在上文中有相关说明。

设备管理器

2 – 扫描 BLE 设备

设备完成初始化后,GUI 右侧的选项卡部分可用于执行 BLE 功能。我们将使用以下操作 来扫描和连接 Project Zero 设备。

1) 选择 Discover/Connect 选项卡

2) 选择 Scan。日志将会随时更新已发现的设备。

BTool 中的 Project Zero 扫描报告。广播的一部分是 LocalName,标记为黄色。

3) 在 Slave BDA 下拉菜单中,选择设备地址(来自于先前的终端输出)

4) 单击 Establish 以进行连接

5) 建立连接后,将看到已连接的外设的条目。

BTool 接口

连接后,串行窗口将如以下所示:

已连接 Putty

注意,Peer address 是用作中央设备的套件的地址。

您还将在 BTool 窗口的左侧看到一个 新的 Connection Info 部分:

连接信息

3 – 浏览 Attribute 表

注意,我们已建立连接,接下来我们将要执行发现来查找 Project Zero 设备上的所有特征和服务,以便可与这些属性进行交互。UUID 将告知对等设备 如何解释属性的值。可在自定义配置文件 SimpleLink Academy 模块中了解有关属性和 UUID 的 更多信息。

  • 右键单击 Connection Info 下的 Handle。
  • 选择 Discover UUIDs

您将注意到日志下方的区域会填充设备上可用的 服务和特征的相关信息。

直截了当地说,完成发现后在 BTool 中的日志下方看到的内容, 就是可以通过蓝牙属性协议对任何已连接的 GATT Client 设备 进行访问的内容的可视化结果。

通过无线方式报告的唯一结果是 Handle (即一种解决属性的动态简略方法)和 Type(用于告知您如何解释报告中同时提供的 Value)。这三个值一起组成 Attribute

下图中的每一行都是一个 Attribute。你会注意到一些行有不同的颜色。不同颜色的原因是 Type 在 GATT 协议中 强加了层次结构,如下所示(简化版):

  • 淡红色 – 0x2800服务声明 – Value 为 Service UUID。
  • 淡黄色 – 0x2803特征声明 – Value 描述了特征值属性
  • 白色 – 0xXXXX(-XXX...)特征值属性 – Value 为实际数据;所有其他均为元数据。
  • 白色 – 0x29xx特征描述符 – Value 为 有关特征值属性的信息。
扫描的设备

读取所有值(通过右键单击菜单)后的 Project Zero 的 GATT 表, 包括特征属性/权限。

4 - 交互

您可能会注意到,某些属性没有关联的值。为填充所有属性的该字段,必须手动读取这些值。

  • 右键单击 Connection Info 下的 Handle。
  • 选择 Read Values

或者,也可单击 Value 列中的某个字段 以读取单项的值。

GATT 表填充完成后,接下来可以开始与 Project Zero 设备 进行交互。Value Description 字段中的注释将会指导您如何操作。

要向特征写入,双击 Value 字段,随后将出现一个新窗口。编辑 Value 并选中 Write Value,即可发送 Write Request。

例如,要点亮 LED0,请双击与 LED0 State 对应的 Value 字段。写入一个值高于 00 的字节将点亮 Project Zero LaunchPad 上的 红色 LED。

连接信息

您可通过类似的方式与 Button 和 Data 服务进行交互。

1 – 启动 SimpleLink Starter

使用您的 iOS 设备,找到 SimpleLink Starter 应用并将其打开。

应用图标

2 – 扫描 BLE 设备

该应用应该会开始自动扫描 BLE 设备,但您可以通过下拉操作 刷新列表。

您应该会看到 Project Zero 广播为ProjectZero。连接到 设备,方法是单击名称,并选择 Sensor View 以转到 GUI 界面。

在此处的第一步中选择 Sensor View。稍后您将使用 Service Explorer

连接后,串行窗口将如以下所示:

已连接 Putty

注意Peer address 是移动设备的地址。

3 – 使用 GUI

SimpleLink Starter 可以识别 Project Zero 实施的服务的 UUID,例如 LED 和 Button,并显示 GUI 小工具与这些服务交互。

4 – 浏览 Attribute 表

GUI 很有趣,但我们也可以在更低的层级上探索 BLE 服务。为此, 请返回 GUI 屏幕,并长按 ProjectZero 以获取 菜单。

选择菜单中的 Service Explorer

直截了当地说,您看到的内容, 就是可以通过蓝牙属性协议对任何已连接的 GATT Client 设备 进行访问的内容的可视化结果。

通过无线方式报告的唯一结果是 Handle (即一种解决属性的动态简略方法)和 Type(用于告知您如何解释报告中同时提供的 Value)。这三个值一起组成 Attribute

SimpleLink Starter 使用 Attribute 信息并以更有用的方式显示它。 SimpleLink Starter 使用发送的 Type 将 Attribute 编排在特征和服务的 层级结构中,如下所示:

SimpleLink Starter Project Zero UUIDs

出现在 ProjectZero 中的 SimpleLink Starter 的 GATT 服务列表

SimpleLink Starter Project Zero UUIDs

LED 服务中的特征列表。请注意,允许的操作突出显示。这里是 Read/Write。

参阅下方的 Project Zero 的自定义标识符列表 了解如何解读自定义 UUD

5 – 交互

要使用 SimpleLink Starter 与特征进行交互,请单击 Characteristic UUID。根据所单击的具体特征,您将看到如下所示的内容:

SimpleLink Starter 特征视图

如上所示的特征具有 Write 属性。要使用 Write 属性 向特征写入新值,请单击其中一个Write项。在新窗口中,使用提供的键盘编辑值,如图所示。

SimpleLink Starter Write New Value

完成后,单击Write,您将回到特征视图。Read characteristic部分将显示一个新值, 如下所示:

6 – 广播数据

通过操作菜单还可以查看设备在等待连接时 发送出去的数据。

在本例中为 Local Name 和它必须提供的其中一项服务。

SimpleLink Starter Write New Value

1 – Start SimpleLink Starter

使用您的 Android 设备,找到 SimpleLink Starter 应用并将其打开。

应用图标

2 – 扫描 BLE 设备

该应用应该会开始自动扫描 BLE 设备,但您可以通过在设备列表上执行下拉操作 强制刷新。

设备

您应该会看到 Project Zero 广播为Project Zero。通过单击设备的方式 连接到该设备。

连接后,串行窗口将如以下所示:

注意Peer address 是移动设备的地址。

3 – 交互

Android SimpleLink Starter 已连接

SimpleLink Starter 应用识别到 Project Zero 服务 (如下所述),并显示要交互的 GUI 小工具。单击其中一个 LED 以更改状态。它还自动启用按钮状态通知, 这反映在按钮图表中。

Project Zero 的自定义标识符列表 (UUID)

使用工具查看运行 Project Zero 的设备的 Attribute 表时, 如果该工具没有元数据可用于解释 UUID 以便显示说明和助记符,请使用此列表来识别 每个服务和特征:

请记住,有些工具会使用通过无线接收的字节顺序来显示 ValueType 字段,这意味着对于 UUID, F0001110-0451-4000-B000-000000000000 将变为 00:00:00:00:00:00:00:B0:00:40:51:04:10:11:00:F0

UUID 哪个 ATT 字段 描述 用法
F0001110-0451-4000-B000-000000000000 Value LED Service 服务声明
F0001111-0451-4000-B000-000000000000 Type/Value LED0 State 读取状态或写入 01 或 00。
F0001112-0451-4000-B000-000000000000 Type/Value LED1 State 读取状态或写入 01 或 00。
F0001120-0451-4000-B000-000000000000 Value Button Service 服务声明
F0001121-0451-4000-B000-000000000000 Type/Value BUTTON0 State 读取状态或订阅通知
F0001122-0451-4000-B000-000000000000 Type/Value BUTTON1 State 读取状态或订阅通知
F0001130-0451-4000-B000-000000000000 Value Data Service 服务声明
F0001131-0451-4000-B000-000000000000 Type/Value String char 读取/写入长字符串
F0001132-0451-4000-B000-000000000000 Type/Value Stream char 发送或接收 WriteNoRsp/通知

识别 ProjectZero 服务和特征的 UUID。

对于服务和特征声明,您将在 ATT-Value 字段中 找到 UUID,而且对于特征值,UUID 位于 ATT-Type 字段中。

ATT Type/UUID GATT Type/UUID 查找 GATT UUID 的位置
0x2800 Service declaration ATT Value 字段为 GATT Service UUID
0x2803 Characteristic declaration ATT Value 字段,字节 3 以后包含特征值的 UUID
<UUID> Characteristic value ATT Type 为 GATT 特征值的 UUID

GATT UUID 在 ATT 表中的位置。 请参阅自定义配置文件 实验以了解更多详细信息

Quiz-time

借助使用 BTool 进行连接部分的此 GATT 表回答以下 问题(单击 GATT 表可将其放大)。

扫描的设备

上图 GATT 表中的 LED 1 Characteristic DeclarationATT Handle 是什么?

在哪里可以找到 GATT Service UUID

Characteristic DeclarationValue 告诉您哪些信息?多个正确答案。

LED Service 总共包含多少个 Attributes

配置文件和发现

当一个设备连接到您的设备时,它不知道就它可交互的服务和特征而言, 您需要提供什么。

诸如 BTool 之类的仿真工具将会发现并显示可供您操作的一切, 但通常对于大多数应用而言,将会有一个 Profile。 这是一个文档,描述了可以通过低功耗蓝牙完成哪些交互, 需要哪些服务来完成各种目标,以及如何对读取和写入的值 进行格式化和排序以便完成此操作。

例如,一个心率监测设备通常会实施 Heart Rate Profile(HRP), HRP 反过来会规定它必须具有 Heart Rate Service(HRM), 且 HRM 在被读取和写入时必须遵循特定的行为方式。

如果您尚不知晓,GATT 会在 ATT 上方强加一个元层。 这意味着,AttributeATT 项,而 Service 是使用 AttributeGATT 项。

使用仿真工具,您可以根据 Profile 来确定应该 写入或读取哪些 Attribute,并且手动地 像启用了 GATT 的应用那样操作。

在建立连接后会发现服务和特征,然后 GATT 交互 才会开始。这样做的原因在于,AttributeHandle 是在 ATT 级别通过无线方式用于读取/写入的内容, 但 Handle 是动态分配的。远程设备在连接之前知道的唯一内容是 它想要在对端上使用的服务和特征的 UUID。

健康温度计示例

例如,您有一个 Health Thermometer Collector 设备, 想要连接并使用一个遵循蓝牙 SIG 针对 健康温度计 [PDF] 采纳的 Profile 的健康温度计。

阅读蓝牙 SIG 规范后,您就会明白 Health Thermometer Service 的 UUID 是 0x1809,而 Temperature Measurement Characteristic 的 UUID 是 0x2A1C。

然后,您通过定义的过程发现它们的 Handle,以便进行配置/读取/写入。

任务 3 - 接收通知

如果使用移动设备

此任务是使用 BTool 进行演示的,因为它提供了最全面的 GATT 表。本任务结尾提供了有关在移动设备上启用通知的说明,但强烈建议您阅读 BTool 说明,以更好地了解蓝牙通知。

您已建立连接。您已读取并写入值来控制蓝牙设备 并已点亮和熄灭 LED。从设备上的传感器取回一些数据(如按钮的状态)如何?

读取发生更改的数据

假设读取 BUTTON0 State 的值。您读取的值如何与按钮的实际状态相关联?例如,您应该多久读出一次该值来做一个可靠的门铃?

在此任务中,您将学习如何在不轮询您感兴趣的值 (这可能会浪费大量精力)的情况下对设备进行配置 以便在值更改时向您传输通知

当您连接到符合 [Project Zero 配置文件] {这是我虚构的。但这实际上在一定程度上 是出于应该如何使用 Project Zero 服务的考虑。}要求的外设时,可对按钮状态实现此目的, 原因在于以下三点:

1.每个 BUTTONx 状态特征的属性包括 GATT_PROP_NOTIFY 标志。

2.BUTTONx 状态特征包括 Client Characteristic Configuration Descriptor(客户端特征配置) (即 CCCD)属性。写入此属性可让 GATT Client 启用或禁用通知

3.该应用会关注 CCCD Attribute 的值,还会尝试 在 Characteristic Value 的状态变化时发送通知

如果我们在 BTool 中查看 Button Service,情况可能会变得更加清晰:

CCCD

在上图中,可在左列中看到 每个 Characteristic DeclarationAccess PropertiesCharacteristic Declaration 值的前导字节中的 12也表现出了这一点。您还会注意到 LED 所没有的 Client Characteristic Configuration 属性。

特征属性

考虑在上面看到的 BUTTONx State 属性的值 0x12。 看看下方代码块中的属性列表, Button 特征值属性有哪些属性?多个属性 通过或进行计算。

按钮状态特征的访问属性有哪些?

访问属性

每个特征都具有属性;在特征声明中通过 位图来声明这些属性。以下列表摘录自 SimpleLink CC26X2 SDK 中的定义。

/** @defgroup GATT_PROP_BITMAPS_DEFINES GATT Characteristic Properties Bit Fields
 * @{
 */
#define GATT_PROP_BCAST         0x01 //!< Permits broadcasts of the Characteristic Value
#define GATT_PROP_READ          0x02 //!< Permits reads of the Characteristic Value
#define GATT_PROP_WRITE_NO_RSP  0x04 //!< Permits writes of the Characteristic Value without response
#define GATT_PROP_WRITE         0x08 //!< Permits writes of the Characteristic Value with response
#define GATT_PROP_NOTIFY        0x10 //!< Permits notifications of a Characteristic Value without acknowledgement
#define GATT_PROP_INDICATE      0x20 //!< Permits indications of a Characteristic Value with acknowledgement
#define GATT_PROP_AUTHEN        0x40 //!< Permits signed writes to the Characteristic Value
#define GATT_PROP_EXTENDED      0x80 //!< Additional characteristic properties are defined in the Characteristic Extended Properties Descriptor
/** @} End GATT_PROP_BITMAPS_DEFINES */

Snippet from gattservapp.h

客户端特征配置(CCC)

0x2902 类型属性的行为和用法由蓝牙规范定义幸运的是,它不是很复杂。

属性的 Value 是一个 16 位宽的字段。写入 01:00 (可转换为 0x0001)将告知设备允许向您发送 值变化通知。如果写入 00:00, 表示禁用传输。如果写入 02:00,表示允许指示。对于按钮特征,这是不允许的。

在移动设备中启用通知的方式略有不同。

对于 SimpleLink Starter,在特征视图中,单击Set notify state

iOS 通知

测验!

查看任务 3 - 接收通知中的此表,BUTTON1 State 特征的 CCCD 属性的 Handle 是什么?

CCCD

每个按钮状态的客户端配置是什么?两个正确答案。

操作!

  • 对 BUTTON0 和 BUTTON1 均启用通知。
  • 尝试按下按钮。
  • 观察 GUI 中显示的串行输出和值。您可以追踪代码中的事件顺序吗?

任务 4 - 对应用进行自定义

此任务教您如何自定义设备对外的外观,使其更加个人化。

您可以通过三种主要方法在设备上设置标记:

  • AdvData 或 Scan Response 中的 GAP_ADVTYPE_LOCALNAME_(SHORT|COMPLETE) 字段。
  • Generic Access Service 中的 Device Name 特征,以及
  • Device Information Service 中的各种字符串

GAP_ADVTYPE_LOCALNAME 是在扫描蓝牙设备时由大多数终端设备显示的字段,也是我们现在要更改的字段。建立 连接并完成服务发现后,许多类型的终端设备 随后将使用 Device Name 的值进行显示。

读取设备名称

使用 BTool 或您选择的 BLE 中央设备,查找 名称为 Generic Access Service (UUID 0x2800) 的服务, 必要时将其展开以查找 Device Name (UUID 0x2A00), 然后读取此值(如果尚未执行此操作)。

更改广播数据

advertDatascanRspData 这两个变量包含 设备在广播其存在状态时会传送的数据。此数据可供任何感兴趣的对端使用,以便它们可以看到设备并连接到该设备。

更改 LOCAL_NAME

project_zero.c 中,查找名称为 advertData 的阵列 (通过 Ctrl+F 进行搜索),并修改 advertDataLOCAL_NAME_COMPLETE 片段 以便广播一个您认为比原来更好的名称。

static uint8_t advertData[] =
{
  /* ...*/
  // Complete name
  10,                               // length of this nugget including flag byte.
  GAP_ADTYPE_LOCAL_NAME_COMPLETE,   // identifier for this nugget
  'S', 'p', 'i', 'd', 'e', 'r', 'P', 'i', 'g',
  /* ...*/
}

示例 LOCAL_NAME 修改。注意长度字段。

完成此操作后,右键单击 Project Zero App 项目,然后选择 Build Project。完成此过程后,下载到目标,运行更改后的代码,并观察当您扫描蓝牙设备时名称是否已更改。 该更改也将显示在串行输出中。

请注意,某些移动设备倾向于缓存先前已知的设备名称,并且可能无法更新您的设备名称。要查看您的新设备名称,请查看如何清除移动设备上的蓝牙缓存.通常 这只需要在系统菜单中禁用蓝牙,然后重新启用蓝牙。

就是这样!

做得很好!冒险一点,也可更改 Device Name 值。

在函数 project_zero.c::ProjectZero_init() 中查找函数调用 GGS_SetParameter(GGS_DEVICE_NAME_ATT,...),并修改指向的阵列的内容。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多