使用蓝牙网状网络设计低功耗蓝牙智能应用 - 第 2 部分

投稿人:DigiKey 北美编辑

编者按:本系列包含两部分,第 1 部分详细介绍了蓝牙网状网络 1.0 协议的架构和功能。本文是第 2 部分,介绍如何使用芯片和开发套件将蓝牙网状网络集成到低功耗蓝牙设计中。

蓝牙网状网络让广受欢迎的短程协议具有了显著的网络优势。这些已在第 1 部分中详细讨论过了。但是,该规范也带来了新的设计挑战,特别是在要实现其模型时。

克服这些挑战的关键在于利用升级的开发工具来更好地熟悉蓝牙网状网络。本文介绍如何使用精选的蓝牙硬件和软件、开发套件 (DK) 以及软件开发套件 (SDK) 来设置和构建蓝牙网状网络应用。

蓝牙网状网络开发工具

蓝牙网状网络堆栈包括一个全新的主机层,它与 BLE 主机层共用某些概念,但与之不兼容。早期版本的蓝牙网状网络堆栈现在通常可作为 SDK 的一部分用于工程开发。

由于蓝牙网状网络是蓝牙核心规范的补充规范,因此不要求厂商更新其低功耗蓝牙 (BLE) 物理层 (PHY) 或软件堆栈以支持网状网络。但是,添加蓝牙网状网络需要厂商为其客户推出自己的堆栈实现。

例如,BLE 厂商 Nordic Semiconductor 推出了 nRF5 SDK for Mesh。该套件包括蓝牙网状网络堆栈、精选驱动程序、库和网状网络应用示例。该 SDK 可在多种集成开发环境 (IDE) 和编译器上运行,包括 Segger Microcontroller SystemsSEGGER Embedded Studio 和 CMake。

蓝牙网状网络兼容所有版本的 BLE(即 4.0、4.1、4.2 和 5),因此 Nordic 的网状网络 SDK 最终将适用于其所有 BLE 芯片。但目前的版本仅适用于该公司最新的 nRF52 系列 BLE 解决方案,例如中程蓝牙 5 兼容型 nRF52832 芯片。

由于 BLE PHY 或软件堆栈没有变化,因此蓝牙网状网络开发工作可以在包含目标器件的现有 DK 上进行。推荐用于 nRF52832 的 DK 是 nRF52 DK(图 1)。

Nordic Semiconductor 的 nRF52 DK 图片

图 1:Nordic Semiconductor 的网状网络 SDK 将与包含 nRF52832 SoC 目标器件的 nRF52 DK 配套使用。(图片来源:Nordic Semiconductor)

网状网络开发至少需要三个(最好更多)器件来进行通信及仿真网状网络环境。理想情况下,可以使用多个 DK 来表示网状网络中的节点,但这样做的缺点是会显著增加开发硬件成本。另一种办法是使用一个 DK 并购买经过测试和验证的 BLE 模块(基于目标器件)以形成附加节点。对于采用 Nordic nRF52832 的开发工作,Rigado 的 BMD-300LairdBL652-SA-01-T/R 都是不错的模块选择。

Cypress Semiconductor 采用了类似于 Nordic 的方法。该公司为其基于 Cypress BCM20736S 蓝牙 v4.1 PHY 的 BCM92073X WICED Smart DK 提供了蓝牙网状网络 SDK。适合基于此 PHY 的网状网络开发工作的 BLE 模块包括 InventekISM20736S

了解模型

Nordic 和 Cypress 的硬件、软件和开发工具都很完整,附带了示例和教程,可逐步指导开发人员构建简单的蓝牙网状网络应用。但在开始第一个设计之前,通过相关教程了解蓝牙网状网络架构的独有特性会很有帮助,因为它对设计过程有重大影响。

此类教程特别指出,虽然蓝牙网状网络节点有四种通用类型(参见本系列文章的第 1 部分),但每种类型的功能取决于其模型。了解模型是充分利用蓝牙网状网络功能的关键所在。

蓝牙网状网络提供了构建新型网状网络应用所需的灵活性,因为开发人员可以构建模型,使设备支持许多定制行为。模型定义了所需的状态、响应这些状态的消息以及相关的行为。网状网络上的所有通信都由这些消息来达成。

状态是代表元件状况的一个值。元件是设备或节点的可寻址实体。每个设备至少有一个(主要)元件,并且可以有一个或多个次要元件。在节点的生命周期内,元件的数量和结构不会改变。“暴露”状态的元件称为服务器。“访问”状态的元件称为客户端。

重要的是,模型有三种类型:服务器、客户端和控制。服务器模型由涉及一个或多个元件的一个或多个状态组成。它定义了一组可以发送或接收的强制消息,发送和接收消息时的元件行为,以及发送或接收消息后发生的任何其他行为。

客户端模型也定义了一组消息,且客户端可使用这些消息来请求、更改或“消耗”服务器模型定义的相应服务器状态。客户端模型没有状态。

控制模型可以将客户端模型功能(与其他服务器模型通信)和服务器模型功能(与其他客户端模型通信)结合起来。控制模型还可以包含控制逻辑,即一组规则和行为,用于协调控制模型与连接到控制模型的其他模型之间的交互(图 2)。

蓝牙网状网络设备的元件模型结构图

图 2:实现控制模型的蓝牙网状网络设备的元件模型结构。设备 C 可以作为客户端与设备 A 和 B 内的服务器模型通信(分别是消息 X、Y、Z 和消息 R、S、T),以及作为服务器与设备 D 内的客户端模型通信(支持消息 A、B、C)。(图片来源:Bluetooth SIG)

为了说明模型在实际示例中的应用,考虑一个含两个独立电源插口的电源板,每个电源插口都能控制电源输出,并集成 BLE 无线电,允许电源板连接到蓝牙网状网络。

该设备(电源板)具有两个元件,分别代表其中一个电源插口。每个元件的功能由“通用功率水平服务器”模型定义,该模型定义了服务器的一组状态以及处理这些状态的一组消息。可以将“通用功率水平设置”消息发送到该设备以控制输出功率。该消息会被发送到其中一个插口元件。

该插口也可以由像调光器这样的实现“通用级别客户端”模型的通用设备控制。此模型将所需级别设置为零、最大值或介于其间的值。该插口的功率通过状态绑定来进行控制。在每个电源插口中,“通用电源实际”状态会绑定到“通用级别”状态。“通用级别客户端”将“通用级别”消息发送到“通用级别服务器”。更改“通用级别”状态后,进而(通过已定义的绑定)就会更改控制功率输出的“通用电源实际”状态。

由于元件可以报告状态,因此每个插口可以报告功率水平以及插入插口的设备所消耗的能量。能耗通过“传感器服务器”模型所定义的消息来予以报告。

构建蓝牙网状网络

假设开发人员已经略微熟悉了蓝牙网状网络的架构和 BLE 开发(有关一般 BLE 设计的更多消息,请参见 DigiKey 文章:“可应对物联网挑战的兼容蓝牙® 4.1、4.2 和 5 规范的低功耗蓝牙 SoC 和工具”),并且配备了蓝牙网状网络 SDK、主机 SDK、DK 及其他模块或 DK 来建立网络,那么开发人员就可以相对容易地配置一个蓝牙网状网络实现。

第一步是构建网状网络堆栈。在 Nordic 的实例中,堆栈是利用选定的 IDE 来构建的。例如,借助 SEGGER Embedded Studio,堆栈可以利用蓝牙网状网络 SDK 附带的示例之一(例如“灯开关”示例)来构建,并使用 IDE 进行编译。

然后擦除 DK 上的目标 PHY,并同时用编译好的蓝牙网状网络堆栈和 BLE 堆栈进行重新编程。完成对堆栈的编程和验证之后,便可使用 SDK 来设置和构建网状网络。

启动配置:Nordic 的开发工具包括一个启动配置应用编程接口 (API),可用于向网状网络添加新设备。启动配置由启动配置器(已连接到网络且先前已针对启动配置任务进行配置的设备)处理,可用于向新设备提供加入网状网络所需的消息。首先,为设备提供网络密钥、地址和设备密钥,以在启动配置后建立用于配置的安全通道。

API 允许开发人员开始侦听未启动配置节点(或启动配置对象,即要添加到网络的设备)在 BLE 三个广告通道之一上发送的广播信标。蓝牙网状网络使用 BLE 的广告通道发送和接收消息,而不是使用 37 个全带宽数据通道。启动配置器会自动接受通道上的传入链路请求。

建立链路之后,使用带外 (OOB) 方法对其进行身份验证,以确保加入网络的设备是目标设备。使用 OOB 方法可以降低侦听 BLE 频谱分配的设备发起“中间人”攻击的可能性。然后,API 事件为设备提供启动配置数据和设备密钥。

配置:Nordic 的“灯开关”应用(包含在 SDK 中)说明了如何使用启动配置器和启动配置对象角色开发应用。演示中的灯开关客户端模型(开关)是启动配置器,灯开关服务器模型(灯泡)是启动配置对象。

Nordic 的示例充分利用了蓝牙网状网络规范中最简单的服务器是“通用开关服务器”(表示服务器处于打开或关闭状态)这一事实。例如,最简单的客户端是“通用开关客户端”,它能通过“通用开关模型”定义的消息控制“通用开关服务器”。

当此服务器模型从客户端模型收到 GET 或(可靠)SET 消息时,它会将开关状态的当前值作为响应发送出去。这样一来,客户端便能了解服务器的最新状态(图 3)。

名称 定义 操作码 描述 参数 参数大小
SET SIMPLE_ON_OFF_OPCODE_SET 0xc1 设置当前开/关状态 新状态 1 字节
GET SIMPLE_ON_OFF_OPCODE_GET 0xc2 获取当前开/关状态 不适用 无参数
SET UNRELIABLE SIMPLE_ON_OFF_OPCODE_SET_UNRELIABLE 0xc3 设置当前开/关状态 新状态 1 字节
Status SIMPLE_ON_OFF_OPCODE_STATUS 0xc4 包含当前状态 当前状态 1 字节

图 3:通用开关模型支持的消息和 ATT 操作码。(图片来源:Nordic Semiconductor)

配置服务器用于表示设备的网状网络配置,是蓝牙网状网络节点的强制要求。配置服务器可处理与配置客户端的通信及后者发出的指令(由启动配置器控制)。

配置在启动配置完成后开始。启动配置器可读取启动配置对象的成分数据,从而识别设备的元数据,以及哪些模型与设备中的哪个元件绑定。接下来便是添加应用和/或网络密钥,并将其绑定到不同的模型(图 4)。

nRF5 SDK for Mesh 的配置流程图图片

图 4:nRF5 SDK for Mesh 的启动配置和配置流程图。“nrf_mesh...”标注即为 API 函数。(图片来源:Nordic Semiconductor)

若要向网络添加更多设备,只需对每个新节点简单重复进行启动配置和配置过程。

发布和订阅:设置和构建初始应用的最后阶段是配置模型的发布状态。例如:用于发布状态事件的地址、使用什么密钥、使用什么“生存时间”(TTL) 值以及设置订阅。

消息是在从每个模型的发布地址发布时发送的。例如,传感器节点会使用发布来周期性报告数据。消息可以只发布一次或重复发布,并且可以发送到单播、组播或虚拟地址(参阅本系列文章的第 1 部分)。客户端模型也可使用发布来向服务器模型发送消息。

与发布相关状态的配置一般由启动配置器通过配置模型加以控制。

使用 Nordic SDK 时,消息会通过“access_model_publish()”API 函数予以发布,该函数将根据发布模型的发布设置(间隔、目标)发布消息。

订阅允许模型侦听从特定地址传入的消息。例如,这可以用来侦听传感器节点发布的周期性消息。Nordic SDK 使用“access_model_subscription_list_alloc()”API 函数分配订阅列表,使得模型能够订阅某一地址。

请注意,使用客户端模型时,不需要订阅发送消息的地址便可接收对这些消息的回复。订阅仅用于接收节点自发提供的消息。

在开发过程中,将非蓝牙网状网络设备连接到蓝牙网状网络可能会有所助益。举例而言,开发人员可能会希望使用智能手机来控制智能照明网状网络应用原型。移动设备和网状网络之间的交互可通过智能手机和节点设备的蓝牙堆栈中的通用属性规范 (GATT) 接口实现,而不是通过蓝牙网状网络堆栈。

总结

蓝牙网状网络为 BLE 应用增添了新功能。但是,由于它未被纳入原始核心规范,因此网状网络的采用引入了一些折衷方案,并给设计过程增加了一定的复杂性。开发人员对使用蓝牙协议堆栈进行设计非常熟悉,因此相比于那些没有相关知识的人来说,这是他们的优势,但即便是经验丰富的工程师,实现蓝牙网状网络也需要学习新的架构并了解其细微差别,如状态、元件和模型等。

通过与 Nordic Semiconductor 或 Cypress Semiconductor 等厂商合作,即可化解设计挑战。这些厂商现已发布蓝牙网状网络堆栈,补充了其亦已成熟的 BLE 解决方案。除堆栈外,还有专门设计的 SDK,允许开发人员使用他们熟悉的芯片、固件和设计工具来加快蓝牙网状网络应用设计的学习过程。

参考文献

  1. Mesh Profile”,蓝牙规范 v1.0,Bluetooth SIG,2017 年 7 月。

免责声明:各个作者和/或论坛参与者在本网站发表的观点、看法和意见不代表 DigiKey 的观点、看法和意见,也不代表 DigiKey 官方政策。

关于此出版商

DigiKey 北美编辑