电力电子技术
直播中

李巍

7年用户 1442经验值
私信 关注
[问答]

如何开发蓝牙mesh项目?

最新的蓝牙mesh 1.0规范(Bluetooth mesh 1.0)允许低功耗蓝牙(Bluetooth Low Energy,Bluetooth LE)网络中的设备(或称“节点”)相互通信而无需使用网络中的中枢设备(Hub),从而实现了更大的通信范围、灵活性和可靠性,并且是实现局域网络(LAN)物联网(IoT)无线技术的先决条件。蓝牙mesh网络的主要应用包括企业照明设施、托管式信标后端,以及工业监控。
然而,该规范同时带来了新的设计挑战,例如开通(provisioning)及配置网络,以及使用蓝牙mesh的模型。幸好Nordic Semiconductor这样的低功耗蓝牙领导供货商提供半导体、固件、开发工具(DK)及软件开发工具等协助,能够解决这些难题。

回帖(4)

曹玥

2020-12-29 09:39:27
蓝牙mesh的介绍
蓝牙mesh网络建立于标准低功耗蓝牙物理层(PHY)之上(图1),具有七层架构:承载层、网络层、底层传输层、上层传输层、访问层、基础模型和模型。当一个节点接收信息时,将该信息从下层的PHY向上传播,经由承载层送达至网络层。网络层使用多个检查方法来决定究竟应该将这个信息传递到堆栈上方或者忽略。

图1:蓝牙mesh堆栈位于低功耗蓝牙物理层之上。(来源:BluetoothSIG)
蓝牙mesh采用一种称为“扩散式”(flooding)的通信方式,将每个数据包向网络中的每个节点广播。有三种类型寻址可配合扩散式网络:“单一广播”(Unicast)(在节点初始设置期间使用)、“群组”以及“虚拟”(主要由设备制造商用来“标记”产品)。其中,群组寻址最适用于日常操作。群组地址代表着网络中一个或多个设备的群播地址。蓝牙技术联盟(SIG)定义了四种“固定群组地址”,称作“全代理”(All-proxies)、“全朋友”(All-friends)、“全中继”(All-relays),以及“全节点”(All-nodes),以配合下述的各个节点类型。
主要的智能家居应用(例如照明)适合采用扩散网络方式的mesh网络和群组寻址。采用扩散网络方式的mesh网络允许交换器向智能照明群组发送“开启”指令,通过网络快速传播,然后每个节点(灯光)都接收到指令,几乎瞬时全部点亮。
Mesh网络的另一个优势是简单,把通信限制到低功耗蓝牙技术的三种广播频道,而非37个全带宽数据通道。然而,这样做的代价是带宽减小了,原因在于需要管理流量以防止数据包完全霸占这个有限的频率子集。
Mesh网络技术内建多个机制以缓减广播和扫描通道阻塞,包括了TTL(Time-To-Live)计数器,它定义一个数据包能够被中继传输的次数,在达到给定次数之后,就不会继续进行中继操作。第二个防止阻塞机制就是数据包的信息暂存,一旦数据包流传整个mesh网络之后,最后只会到达暂存,在这一点上,我们可以安心假设它不必再进行传输。还有一个“选择性中继”功能可以限制mesh网络拥塞。只要关闭中继,节点便可以仅接收数据包而不会向外传送。
蓝牙mesh网络的规范详细描述了四种类型“节点”,包含中继节点(RelayNodes)、低功耗节点(LowPowerNodes)、朋友节点(FriendNodes)和代理节点(ProxyNodes)。中继节点能够重新发送所接收到的数据包,并且利用这个机制,让数据包可以在整个网络上快速传播。中继的缺点是耗电量增加,这是由于这种节点一直“醒着”。虽然在mesh网络配置中低功耗蓝牙的功耗远低于其它竞争技术,但如果时常醒着,也无法单单依靠电池供电来持久运作。
低功耗节点(LPN)与朋友节点协同工作,因而能够使用电池运作。朋友节点通常是由主电源供电,因而能够永远保持醒着,并且暂存任何发往LPN的信息;LPN根据预先设定的日程表切换至“接收”模式来接收朋友节点所暂存的信息,并根据指令进行运作,接着便快速返回节能的“睡眠”状态。
“代理节点”允许运行低功耗蓝牙堆栈但不支持蓝牙mesh网络的设备(例如现在的智能手机)连接至蓝牙mesh网络。它利用节点和设备的通用型属性配置文件(GATT)接口进行交互(图2)。

图2:代理节点(P)允许不支持蓝牙mesh的低功耗蓝牙设备(例如智能手机)连接到蓝牙mesh网络。
举报

张西子

2020-12-29 09:39:44
  蓝牙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开发工作。
  Mesh的开发需求至少要有三个(最好是更多)设备来进行通信和仿真mesh环境。理想情况下,可以使用几个DK来表示mesh的节点,但此举的缺点是硬件开发成本显着增加。另一种方法是使用一套DK,并向第三方供货商购买经测试和验证过的低功耗蓝牙模块。如果使用Nordic的nRF52832 SoC所构建的模块,可以有许多选择。
举报

王莹

2020-12-29 09:40:58
开通配置mesh网络
整合蓝牙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函数。
要在网络上增添更多节点,可以重复为每个新设备进行开通和配置。
举报

陈芳

2020-12-29 09:41:08
  发布和订阅
  在添加和配置网络设备后,蓝牙mesh需要开发人员配置模型的“发布状态”,并设定“订阅”。发布状态包括用于发布状态事件的地址,以及所使用的密匙和TTL值。
  信息在每个模型的发布地址“发布”时被送出。例如,由传感器节点报告资料时发布。信息能够只发布一次,或重复发送到单播地址、群组地址或虚拟地址。客户端模型也使用发布消息功能将信息发送到服务器模型。
  发布状态的配置通常由开通者利用配置模型来控制。
  使用Nordic nRF5 SDK时,信息以“access_model_publish()”API函数发布,该函数根据发布模型的发布设定(间隔、目的地)来发布信息。
  订阅用于接收来自节点的未经请求信息。Nordic SDK的“access_model_subion_list_alloc()” API函数分配一个预定表,让模型能够订阅一个地址。该订阅功能允许模型侦听发布的信息,例如包含传感器节点数据的信息。
  在开发过程中,将不支持蓝牙mesh网络功能的设备(例如智能手机)连接至蓝牙网络设备以配置智能照明,将有许多好处。我们可以利用节点和设备的通用型属性配置文件(GATT)接口,将智能手机设为代理节点。
  熟悉低功耗蓝牙设计的开发人员在开始使用蓝牙mesh时,将十分有利。但是,实施蓝牙mesh的确需要学习新的架构,并了解当中的细微差异,例如状态、元件和模型,以及如何增添和配置新的网络设备。
  与成熟的低功耗蓝牙供货商合作,例如Nordic Semiconductor,可以降低开发设计的难度。Nordic提供适用于蓝牙mesh的 nRF5 SDK,让开发人员能够使用他们熟悉的Nordic芯片、固件和设计工具来加速蓝牙mesh应用的设计。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分