编者按:这个由两部分组成的系列的第1部分详细介绍了蓝牙网格1.0协议的体系结构和功能。在这里,第2部分介绍了如何将蓝牙网络集成到使用芯片和开发套件的蓝牙低功耗设计中。
蓝牙网络为流行的短程协议带来了显着的网络优势。第1部分对此进行了详细讨论。但是,规范也带来了新的设计挑战,特别是在实现其模型时。
克服这些挑战的关键在于利用升级的开发工具来更好地了解蓝牙网络。本文介绍如何使用选择的蓝牙硬件和软件,开发套件(DK)和软件开发套件(SDK)来设置和构建蓝牙网格应用程序。
蓝牙网状网络堆栈包含一个全新的主机层,与BLE主机层共享一些概念,但与其不兼容。早期版本的蓝牙网格堆栈现在可用于工程开发,通常作为SDK的一部分。
由于蓝牙网络是蓝牙核心规范的补充规范,因此供应商不需要更新其蓝牙低功耗(BLE)物理层(PHY)或软件堆栈来支持它。但是,添加蓝牙网络要求供应商为他们的客户推出他们自己的堆栈实现。
例如,BLE供应商Nordic Semiconductor已经推出了Mesh的nRF5 SDK。该套件包括一个蓝牙网络堆栈,选择驱动程序,库和网格应用程序的示例。该SDK的几个集成开发环境(IDE)和编译器,包括工作SEGGER嵌入式工作室从套件含有Segger微控制器系统和CMake的。
由于蓝牙网格兼容所有版本的BLE(即:4.0,4.1,4.2和5),Nordic的网格SDK最终将与其所有BLE芯片一起工作。但是,目前的版本仅适用于该公司最新的nRF52系列 BLE解决方案,例如中档蓝牙5兼容nRF52832芯片。
由于BLE PHY或软件堆栈没有变化,因此可以在包含目标设备的现有DK上执行蓝牙网格开发工作。推荐用于nRF52832的DK是nRF52 DK(图1)。
图1:北欧半导体的网格SDK将与包含nRF52832 SoC目标器件的nRF52 DK配合使用。(图片来源:北欧半导体)
网格开发需要至少三个(最好是更多)设备来进行通信和模拟网状环境。理想情况下,可以使用几个DK来表示网格中的节点,但是这具有显着增加开发硬件成本的缺点。另一种方法是使用一个DK并购买经测试和验证的BLE模块(基于目标设备)以形成附加节点。对于使用Nordic nRF52832进行开发,Rigado的 BMD-300或Laird的 BL652-SA-01-T / R是很好的模块选件。
赛普拉斯半导体对北欧采取了类似的方法。该公司为BCM92073X WICED Smart DK 提供蓝牙网格SDK,该DKM基于赛普拉斯的BCM20736S蓝牙v4.1 PHY。基于此PHY的网格开发工作的合适BLE模块包括Inventek的 ISM20736S。
北欧和赛普拉斯的硬件,软件和开发工具均附有示例和教程,以指导开发人员完成构建简单的蓝牙网格应用程序的步骤。但是在开始第一个设计之前,它有助于贯穿相关教程,以了解蓝牙网格体系结构的独特特性,因为它对设计过程有重大影响。
这些教程强调,尽管蓝牙网格节点有四种通用类型(参见这两部分系列文章的第1部分),但每种类型的功能都取决于其模型。了解模型是充分利用蓝牙网络功能的关键。
蓝牙网格提供了构建新型网格应用所需的灵活性,因为开发人员可以构建模型,使设备具有许多自定义行为。模型定义了所需的状态,作用于这些状态的消息以及相关的行为。所有通过网状网络的通信都通过消息来促进。
状态是表示元素状态的值。元素是设备或节点的可寻址实体。每个设备至少有一个(主要)元素,并可能有一个或多个次要元素。元素的数量和结构在整个节点的生命周期中都不会改变。“暴露”状态的元素称为服务器。元素“访问”状态被称为客户端。
重要的是,模型有三种类型; 服务器,客户端和控制。服务器模型由跨越一个或多个元素的一个或多个状态组成。它定义了一组可发送或接收的强制性消息,发送和接收消息时的元素行为以及发送或接收消息后发生的任何其他行为。
客户端模型定义了一组客户端用于请求,更改或“消耗”相应服务器状态的消息,如服务器模型所定义的。客户端模型没有状态。
控制模型可以结合客户端模型功能(与其他服务器模型进行通信)和服务器模型功能(与其他客户端模型进行通信)。控制模型还可能包含控制逻辑 - 一组规则和行为,用于协调控制模型与控制模型连接的其他模型之间的交互作用(图2)。
图2:所示为实现控制模型的蓝牙网状设备的元件模型结构。设备C可以作为客户端(分别为消息X,Y和Z以及消息R,S和T)与客户端模型(在设备D内)作为服务器与服务器模型(设备A和B内)进行通信(支持消息A,B和C)。(图片来源:蓝牙SIG)
为了说明模型在实际应用中的用途,考虑一个电源板,它包括两个独立的电源插座,每个电源插座都能够控制功率输出,并集成一个BLE收音机,从而允许连接蓝牙网络。
该设备(电源板)具有两个代表两个电源插座的元件。每个元素的功能由通用功率级别服务器模型定义,该模型定义服务器上的一组状态,以及一组对这些状态进行操作的消息。通用功率电平设置消息可以被发送到设备以控制输出功率。该消息被发送到一个套接字的元素。
套接字也可以由实现通用级客户端模型的通用设备(如调光器)控制。该模型将期望水平设置为零,最大值或两者之间的值。通过状态绑定来控制插座的电源。在每个电源插座中,通用电源实际状态都绑定到通用电平状态。通用级客户端将通用级消息发送到通用级服务器。通用级别状态发生改变,反过来(通过已定义的绑定)改变控制功率输出的通用功率实际状态。
因为元素可以报告状态,所以每个套接字可以报告功率水平以及插入插座的设备的能量消耗。使用Sensor Server模型定义的消息报告能耗。
假设开发人员已经对蓝牙网格体系结构和BLE开发有所了解(请参阅Digi-Key文章:“ 蓝牙4.1,4.2和5兼容的蓝牙低功耗SoC和工具满足IoT挑战 ”以了解关于通用BLE设计的更多信息),并配备蓝牙网格SDK,主机SDK,DK和附加模块或DK来建立网络,开发人员可以相对轻松地配置蓝牙网格实现。
第一步是构建网格堆栈。在北欧的情况下,堆栈是使用选定的IDE构建的。例如,使用SEGGER Embedded Studio,通过使用Bluetooth mesh SDK中包含的一个示例(例如“light switch”示例)和使用IDE进行编译来构建堆栈。
然后,DK上的目标PHY被擦除,并用编译的蓝牙网格堆栈和BLE堆栈重新编程。一旦堆栈被编程和验证,SDK就可以用来设置和建立网状网络。
配置:Nordic的开发工具包括配置应用程序编程接口(API),用于将新设备添加到网状网络。供应由供应商(已经连接到网络并且先前为供应任务配置的设备)处理,用于向新设备提供他们需要加入网状网络所需的信息。最初,设备提供了一个网络密钥,一个地址和一个设备密钥,用于在配置之后建立用于配置的安全通道。
API允许开发人员开始监听在BLE的三个广告频道中的一个上发送的未提供(或供应商 - 要添加到网络的设备)节点的广播信标。蓝牙网格使用BLE的广告通道而不是37个全带宽数据通道传输和接收消息。通道上的入局链接请求将被自动接受。
链接建立后,使用带外(OOB)方法对其进行身份验证,以确保加入网络的设备是预期的目标。使用OOB方法可以减少设备监听BLE频谱分配的“中间人”攻击机会。API事件然后为设备提供配置数据和设备密钥。
配置:Nordic的“灯开关”应用程序(包含在SDK中)显示了如何开发具有供应者和供应者角色的应用程序。在演示中,一个灯开关客户端模型(开关)是供应商,灯开关服务器模型(灯泡)是供应商。
Nordic的例子充分利用了蓝牙网络规范中最简单的服务器是Generic OnOff服务器的事实,表示服务器处于开启或关闭状态。例如,最简单的客户端是通用OnOff客户端,它能够通过通用OnOff模型定义的消息来控制通用OnOff服务器。
当此服务器模型从客户端模型接收到GET或(可靠)SET消息时,它将发送OnOff状态的当前值作为响应。这可以使客户端了解服务器状态(图3)。
Name定义操作码描述参数参数大小组SIMPLE_ON_OFF_OPCODE_SET0xc1设置当前的开/关状态新的状态1个字节得到SIMPLE_ON_OFF_OPCODE_GET为0xC2获取当前的开/关状态N / A没有参数SET不可靠SIMPLE_ON_OFF_OPCODE_SET_UNRELIABLE0xc3设置当前的开/关状态新的状态1个字节状态SIMPLE_ON_OFF_OPCODE_STATUS0xc4包含当前状态当前状态1个字节图3:通用OnOff模型支持的消息和ATT操作码。(图片来源:北欧半导体)
配置服务器用于表示设备的网状网络配置,并且是蓝牙网状节点的强制要求。配置服务器处理与配置客户端(由配置器控制)的通信以及来自配置客户端的指令。
配置完成后开始配置。供应商读取供应商的组成数据以识别设备的元数据以及哪些模型绑定到设备中的元素。接下来,将应用程序和/或网络密钥添加并绑定到不同的模型(图4)。
图4:nRF5 SDK for Mesh的配置和配置流程图。“nrf_mesh ...”标注是API函数。(图片来源:北欧半导体)
向网络添加更多设备仅仅是为每个新节点重复供应和配置过程的情况。
发布和订阅:设置和构建初始应用程序的最后阶段是配置模型的发布状态。例如,用于发布状态事件的地址,使用什么密钥,使用什么“生存时间”(TTL)值,以及设置订阅。
消息在从每个模型的发布地址发布时发送。例如,通过传感器节点定期报告数据来使用发布。消息只能发布一次或重复发送,并发送到单播,组或虚拟地址(请参阅本文的第1部分)。客户机模型也使用发布向服务器模型发送消息。
发布相关状态的配置通常由配置者通过配置模型来控制。
使用Nordic SDK时,使用“access_model_publish()”API函数发布消息,该函数将根据发布模型的发布设置(间隔,目标)发布消息。
订阅允许模型监听来自特定地址的传入消息。例如,这可用于侦听从传感器节点发布的周期性消息。Nordic SDK允许模型通过使用“access_model_subscription_list_alloc()”API函数分配预订列表来预订地址。
请注意,使用客户端模型时,不需要订阅发送消息的地址以接收对这些消息的回复。订阅仅用于接收来自节点的未经请求的消息。
在开发过程中,将非蓝牙网格功能的设备连接到蓝牙网格可能会有所帮助。一个例子可能是开发人员希望用来控制原型智能照明网格应用的智能手机。手机和网状网络之间的互动是通过蓝牙堆栈中的智能电话和节点设备的通用属性配置文件(GATT)接口实现的,而不是蓝牙网状网络堆栈。
蓝牙网格为BLE应用程序增加了新功能。然而,由于它不是原始核心规范的一部分,网格的采用已经引入了一些折衷并增加了设计过程的一些复杂性。熟悉使用蓝牙协议栈进行设计的开发人员对那些没有知识的人来说是一个优势,但即使对于经验丰富的工程师来说,实现蓝牙网络也需要学习一种新的体系结构并了解它的细微差别,例如状态,元素和模型。
通过与Nordic半导体或赛普拉斯半导体等供应商合作,可以缓解设计挑战。这些供应商现在已经发布了蓝牙网格堆栈,以补充他们成熟的BLE解决方案。该堆栈附带有专门设计的软件开发工具包,可让开发人员使用他们熟悉的芯片,固件和设计工具加速设计蓝牙网格应用程序的学习过程。
“ Mesh Profile ”,蓝牙规范v1.0,蓝牙SIG,2017年7月。
全部0条评论
快来发表一下你的评论吧 !