最新的蓝牙mesh 1.0规范(Bluetooth mesh 1.0)允许低功耗蓝牙(Bluetooth Low Energy,Bluetooth LE)网络中的设备(或称“节点”)相互通信而无需使用网络中的中枢设备(Hub),从而实现了更大的通信范围、灵活性和可靠性,并且是实现局域网络(LAN)物联网(IoT)无线技术的先决条件。蓝牙mesh网络的主要应用包括企业照明设施、托管式信标后端,以及工业监控。
然而,该规范同时带来了新的设计挑战,例如开通(provisioning)及配置网络,以及使用蓝牙mesh的模型。幸好Nordic Semiconductor这样的低功耗蓝牙领导供货商提供半导体、固件、开发工具(DK)及软件开发工具等协助,能够解决这些难题。
蓝牙mesh网络建立于标准低功耗蓝牙物理层(PHY)之上(图1),具有七层架构:承载层、网络层、底层传输层、上层传输层、访问层、基础模型和模型。当一个节点接收信息时,将该信息从下层的PHY向上传播,经由承载层送达至网络层。网络层使用多个检查方法来决定究竟应该将这个信息传递到堆栈上方或者忽略。
图1: 蓝牙mesh堆栈位于低功耗蓝牙物理层之上。(来源:Bluetooth SIG)
蓝牙mesh采用一种称为“扩散式”(flooding)的通信方式,将每个数据包向网络中的每个节点广播。有三种类型寻址可配合扩散式网络:“单一广播”(Unicast)(在节点初始设置期间使用)、“群组”以及“虚拟”(主要由设备制造商用来“标记”产品)。其中,群组寻址最适用于日常操作。群组地址代表着网络中一个或多个设备的群播地址。蓝牙技术联盟(SIG)定义了四种“固定群组地址”,称作“全代理”(All-proxies)、“全朋友”(All-friends)、“全中继”(All-relays),以及“全节点”(All-nodes),以配合下述的各个节点类型。
主要的智能家居应用(例如照明)适合采用扩散网络方式的mesh网络和群组寻址。采用扩散网络方式的mesh网络允许交换器向智能照明群组发送“开启”指令,通过网络快速传播,然后每个节点(灯光)都接收到指令,几乎瞬时全部点亮。
Mesh网络的另一个优势是简单,把通信限制到低功耗蓝牙技术的三种广播频道,而非37个全带宽数据通道。然而,这样做的代价是带宽减小了,原因在于需要管理流量以防止数据包完全霸占这个有限的频率子集。
Mesh网络技术内建多个机制以缓减广播和扫描通道阻塞,包括了TTL(Time-To-Live)计数器,它定义一个数据包能够被中继传输的次数,在达到给定次数之后,就不会继续进行中继操作。第二个防止阻塞机制就是数据包的信息暂存,一旦数据包流传整个mesh网络之后,最后只会到达暂存,在这一点上,我们可以安心假设它不必再进行传输。还有一个“选择性中继”功能可以限制mesh网络拥塞。只要关闭中继,节点便可以仅接收数据包而不会向外传送。
蓝牙mesh网络的规范详细描述了四种类型“节点”,包含中继节点(Relay Nodes)、低功耗节点(Low Power Nodes)、朋友节点(Friend Nodes)和代理节点(Proxy Nodes)。中继节点能够重新发送所接收到的数据包,并且利用这个机制,让数据包可以在整个网络上快速传播。中继的缺点是耗电量增加,这是由于这种节点一直“醒着”。虽然在mesh网络配置中低功耗蓝牙的功耗远低于其它竞争技术,但如果时常醒着,也无法单单依靠电池供电来持久运作。
低功耗节点(LPN)与朋友节点协同工作,因而能够使用电池运作。朋友节点通常是由主电源供电,因而能够永远保持醒着,并且暂存任何发往LPN的信息;LPN根据预先设定的日程表切换至“接收”模式来接收朋友节点所暂存的信息,并根据指令进行运作,接着便快速返回节能的“睡眠”状态。
“代理节点”允许运行低功耗蓝牙堆栈但不支持蓝牙mesh网络的设备(例如现在的智能手机)连接至蓝牙mesh网络。它利用节点和设备的通用型属性配置文件(GATT)接口进行交互(图2)。
图2: 代理节点(P)允许不支持蓝牙mesh的低功耗蓝牙设备(例如智能手机)连接到蓝牙mesh网络。(来源:Bluetooth SIG)
蓝牙mesh网络沿用蓝牙技术的架构,其中GATT的“配置文件”允许众多用例分享共同的信息结构。然而,由于mesh网络的分布式特性,所以这两类配置文件的设计是不同的。为了避免GATT配置文件被错误认为是网络配置文件,因此mesh的配置文件称作“模型”(Model)。
蓝牙mesh 1.0包括“设定”、“心跳”和“健康”基础模型,这些基础模型与“mesh模型”相辅相成,用于“通用”、“照明”、“传感器”和“场景”等用例。有了镜像GATT配置文件,还可以建立定制化的基础和mesh模型。
Nordic的开发工具包括示例和学习指南,以指引开发人员逐步构建简单的蓝牙mesh应用。对于新开发蓝牙mesh的设计人员来说,示例和学习指南是最佳的起步点。这个学习指南中一个重要的区别是,尽管蓝牙mesh节点具有前面所述的四种通用类型,但每个类型的功能都由其“模型”决定。了解模型是开始使用蓝牙mesh的关键。(请参阅附件文中的“模型方法”)。
开发人员现在可以利用蓝牙mesh,因为该规范并未要求低功耗蓝牙供货商更新其支持该功能的PHY或软件堆栈。(Nordic的PHY是nRF51或nRF52系列系统单芯片(SoC)),这软件堆栈被称为协议栈(SoftDevice,例如S112、S132和 S140)。除此之外,蓝牙mesh不限制PHY须兼容最新版本蓝牙5,因此mesh可采纳蓝牙4.0、4.1和4.2芯片的旧版产品。
然而,蓝牙mesh确实需要引进供货商的兼容mesh堆栈。该堆栈包含了一个全新的主机层,与低功耗蓝牙主机层的概念有点相似,但两者并不相容。
Nordic的蓝牙mesh堆栈是针对mesh的nRF5 SDK的一部分。该套件还包括为蓝牙mesh应用提供的一系列驱动程序、链接库(library)和应用示例,SDK可运行在多个集成开发环境(IDE)和编译程序上,包括CMake 和SEGGER Embedded Studio。
用于蓝牙mesh的nRF5 SDK瞄准该公司最新的nRF52系列低功耗蓝牙解决方案,例如符合蓝牙5规范的中阶nRF52832 SoC器件。由于蓝牙mesh不需要更改现有的PHY或堆栈,因此可以利用包含目标设备的现有DK,例如Nordic的nRF52 DK(图3)来进行蓝牙mesh开发工作。
图3: Nordic用于mesh的nRF5 SDK可与包含nRF52832 SoC的nRF52 DK共用。
Mesh的开发需求至少要有三个(最好是更多)设备来进行通信和仿真mesh环境。理想情况下,可以使用几个DK来表示mesh的节点,但此举的缺点是硬件开发成本显著增加。另一种方法是使用一套DK,并向第三方供货商购买经测试和验证过的低功耗蓝牙模块。如果使用Nordic的nRF52832 SoC所构建的模块,可以有许多选择。
整合蓝牙mesh堆栈需要多少熟悉跟目标设备有关的硬件、软件和开发工具。假设开发人员有这样的经验,并配备SDK、DK和模块(或更多的DK)形成一个小型网络,便可以相对容易地将其初步的蓝牙mesh应用整合起来。
第一步是构建mesh堆栈。在Nordic的情况下,堆栈是使用选定的IDE来构建的。例如,SEGGER Embedded Studio,是使用蓝牙mesh SDK附带的一个示例,并以IDE编译来构建堆栈。接着DK上的目标PHY将被清除,并利用经编译的蓝牙mesh堆栈和协议栈(Nordic 的低功耗蓝牙堆栈)重新编程。一旦该堆栈经编程和验证后,SDK就可以用来设置和建立蓝牙mesh网络。
Nordic的开发工具包括为mesh网络增添新设备的应用程序编程接口(API),这称为“开通”(provisioning)。开通由先前已配置作开通用途,并且已是网络的一部份的设备处理,称作“开通者”。(在开发示例中,开通者为nRF52 DK)。开通者可为新设备提供加入网络的信息。最初,未开通的设备会接收到一组网络密匙、地址和设备密匙(在开通之后,可建立用于配置的安全通道)。
API 允许开发人员开始侦听等待加入网络的未开通设备。这些设备将以低功耗蓝牙的三个广播频道中的其中一个频道所发送的广播信标进行通信,频道上的导入链接(incoming link)请求将被开通者自动接受。
建立链接后,设备将会被认证(使用频外配对OOB方法增强安全性),以确保加入网络的设备是预期的目标设备。之后进行API事件,为设备提供开通数据和设备密匙。
用于mesh的nRF5 SDK包括一个灯光开关示例,展示如何开发同时具有开通者和被开通者两种角色的应用程序。在这个演示中,一个灯光开关“客户端模型”(Client Model,开关)是开通者,而灯光开关“服务器模型”(Server Model,灯泡)是被开通者。
Nordic的示例突显了蓝牙mesh规范中最简单的服务器就是“通用OnOff服务器”(Generic OnOff Server),它表示服务器可以“开”或“关”。最简单的客户端是“通用OnOff客户端”,它能够利用通用OnOff模型定义的信息来控制通用OnOff服务器。
当此服务器模型从客户端模型接收到GET或(可靠)SET信息,它将发送OnOff状态的当前值作为响应。这可以使客户端了解服务器的最新状态。(表1)
表1:通用开/关模型(Generic OnOff Model)支持的信息和ATT。
“配置服务器”(Configuration Server)是蓝牙mesh节点的强制性要求,用于表示设备的mesh网络配置。配置服务器可处理与配置客户端的通信和来自配置客户端的指示(由开通者控制)。
开通完成后开始配置。开通者读取被开通者的组成数据以辨识设备的元数据(metadata),以及哪些模型会配合哪些元件。然后添加应用程序或网络密匙并配合到不同的模型(参见图4)。
图4:Nordic用于mesh的nRF5 SDK所产生的开通与配置流程图,“nrf_mesh…”标注是API函数。
要在网络上增添更多节点,可以重复为每个新设备进行开通和配置。
在添加和配置网络设备后,蓝牙mesh需要开发人员配置模型的“发布状态”,并设定“订阅”。发布状态包括用于发布状态事件的地址,以及所使用的密匙和TTL值。
信息在每个模型的发布地址“发布”时被送出。例如,由传感器节点报告资料时发布。信息能够只发布一次,或重复发送到单播地址、群组地址或虚拟地址。客户端模型也使用发布消息功能将信息发送到服务器模型。
发布状态的配置通常由开通者利用配置模型来控制。
使用Nordic nRF5 SDK时,信息以“access_model_publish()”API函数发布,该函数根据发布模型的发布设定(间隔、目的地)来发布信息。
订阅用于接收来自节点的未经请求信息。Nordic SDK的“access_model_subscription_list_alloc()”API函数分配一个预定表,让模型能够订阅一个地址。该订阅功能允许模型侦听发布的信息,例如包含传感器节点数据的信息。
在开发过程中,将不支持蓝牙mesh网络功能的设备(例如智能手机)连接至蓝牙网络设备以配置智能照明,将有许多好处。我们可以利用节点和设备的通用型属性配置文件(GATT)接口,将智能手机设为代理节点。
熟悉低功耗蓝牙设计的开发人员在开始使用蓝牙mesh时,将十分有利。但是,实施蓝牙mesh的确需要学习新的架构,并了解当中的细微差异,例如状态、元件和模型,以及如何增添和配置新的网络设备。
与成熟的低功耗蓝牙供货商合作,例如Nordic Semiconductor,可以降低开发设计的难度。Nordic提供适用于蓝牙mesh的 nRF5 SDK,让开发人员能够使用他们熟悉的Nordic芯片、固件和设计工具来加速蓝牙mesh应用的设计。
蓝牙mesh网络在构建mesh应用时提供了灵活性,允许开发人员构建许多拥有不同定制化行为设备的“模型”。模型定义了所需mesh网络的“状态”,作用于这些状态的“信息”以及这些状态的相关行为。所有通过mesh网络的通信都经由这些信息来促进。
图a:实现控制模型的蓝牙mesh设备的元件--模型架构。设备C可以作为和服务器模型(设备A和B内)进行通信的客户端(分别是信息X、Y和 Z ,以及信息 R、S和T),以及作为服务器(支持信息 A、B和 C)的客户端模型(设备D内)。
状态是表示“元件”状态的值。元件代表设备或节点的网络可寻址实体。每个设备由至少一个(主要)元件组成,并可能有一个或多个次要元件。在初始配置后的整个节点生命周期内,所有的元件都保持不变。“揭示”状态的元件称为“服务器”,“访问”状态的元件则称为“客户端”。
服务器、客户端和“控制”是规范中定义的三种类型的模型。服务器模型是由跨越一个或更多元件组成的一个或多个状态,并定义一组可以发送或接收的强制信息、在处理信息时的元件行为,以及信息处理后所发生的任何其它行为组成。
客户端模型定义了一组客户端用来请求、改变或“消耗”相应服务器状态的信息,就如服务器模型所定义的。客户端模型本身没有状态。控制模型可以结合客户端模型功能(与其它服务器模型通信)和服务器模型功能(与其它客户端模型通信)。控制模型还可以包括一组规则和行为,以协调控制模型与控制模型连接的其它模型之间的交互通信。
蓝牙技术联盟(SIG)以电源插座为例来说明模型的工作原理[1]。在这个示例中,电源插座包含两个独立的电源插口,两者均连接到蓝牙mesh网络。该电源插座设备由两个组件(个别的电源插座)组成。这些元件的每一个功能由通用功率水平服务器模型定义,该模型定义服务器上的一组状态,以及在这些状态下操作的一组信息。发送到其中一个插座组件的通用功率水平设置信息,可以发送到连接的设备以控制其输出功率。
插座也可以由调光器控制。在这种情况下,调光器必须实施通用级的客户端模型。该模型将期望水平设为零,最大值或两者之间的某个值。利用称为“状态绑定”(state binding)的功能来控制插座的电源,使得在每个电源插座中,通用电源实际状态均会绑定通用级状态。通用级客户端将通用级信息发送到通用级服务器,更改通用级状态,然后利用定义的绑定,更改控制功率输出的通用电源实际状态。
由于元件可以报告状态,因此每个插座均可以报告功率级别,以及插入到插座的设备能源消耗。能源消耗使用传感器服务器模型(Sensor Server Model)定义的信息进行报告。
参考: [1] “mesh Profile” 蓝牙规范 v1.0,蓝牙技术联盟SIG,2017年7月
此文为《EDN电子技术设计》9月刊杂志文章。版权所有,谢绝转载!