网络通信
返回首页

蓝牙Mesh技术如何实现智能应用

2018-08-27 来源:集微网

蓝牙从2000年推出以来即积极追求成长,初衷只是希望取代有线技术,但旋即成为无线音频与计算机周边产品的重要标准,例如无线鼠标和键盘。

 

2010年,低功耗蓝牙的诞生让蓝牙技术又向前迈进一大步。 其影响力既深且广,应用范围涵盖智能型手机和平板、医疗和健身、智能家庭,以及穿戴式装置市场。 以Mesh网络拓扑建立的无线通信系统,已证实能够有效提供大范围的涵盖率,不仅能延伸涵盖范围,而且相当稳定可靠。 然而,在此之前这类网络都是建构在特殊技术之上,无法与大多数消费者的计算机、智能型手机与周边配件兼容,亦不适用于企业端。

 

此次蓝牙Mesh技术规格的制定是120家蓝牙技术联盟企业会员共同努力的成果,远远超越了一般正常的规模,也因此才能满足全球对于蓝牙网状网络产业标准的要求。 对蓝牙技术而言,Mesh规格的制定,象征着型态的转变,而其影响层面之庞大,也让它成为一项典范转移。 本文章共分上下篇,上篇叙述蓝牙Mesh应用与特点,下篇则描述蓝牙Mesh技术与设计架构。

 

蓝牙Mesh实现智能建筑

 

想象一下,在一个天还未亮的冬日清晨,您开车去上班,经过公司保全系统之后,系统自动分配一个车位给您(图1)。 车位上方的编号自动亮起,引导您轻松将车停好。 接着,车位分配系统立即将这个车位标记为已占用。

 

image.png

 

图1 蓝牙Mesh网状网络涵盖整个办公室和停车场。

 

走进大楼,人员传感器侦测到您的存在,立即透过您的穿戴式装置辨认您的身分。 您走进电梯,搭到二楼,然后走出电梯。 一如往常,您又是第一个进办公室。 当电梯门开启,从电梯口到您办公室及厨房的沿路,灯光自动亮起,咖啡是您公司不可或缺的要素,为了节能,其他区域依然保持在黑暗中。

 

您走进办公室,身后的门自动关上。 天花板及您桌上的台灯都已经为您开启,并且调整在您觉得最舒适的亮度。 您注意到室内的温度似乎比整个办公室稍微温暖一点,这正好是您个人最爱的温度。 您一坐下,您的计算机就自动将您登入。

 

您的一天就此顺利展开,大楼自动应答了您的需求,甚至贴心地配合您的喜好。 所有系统都很有效率地运作,而这一切是如何办到的?

 

几个月前,公司安装了一套蓝牙Mesh网状网络,一开始先安装的是Mesh照明系统;后来人员传感器、环境传感器、无线暖气空调及停车管理系统也陆续加入Mesh网络当中。 公司因此省下了不少的电费和暖气费,而且工作环境也变得更有人性,大幅提升了个人的工作效率。 不仅如此,维护成本也因而降低,因为公司再也不必为了增加新的照明开关而大费周章地布线,既省下昂贵的成本,又不会干扰正常营运。

 

与此同时,大楼管理团队也能透过各种数据来了解整个大楼及各项服务的状况,同时掌握人们的使用情况,然后再利用这些数据将系统调整至最佳状况。

 

蓝牙Mesh网状网络让您轻松、经济地掌握整栋建筑的各项服务,并透过无线方式来操控并设定自动化行为。 回想起来,您还真不知道以前没有这套先进系统时是怎么过活的。

 

蓝牙Mesh技术基本概念

 

要了解蓝牙Mesh网状网络拓扑,首先要先对一些蓝牙以外的最新科技名词和概念有所认识。 本章节将介绍一些最基本的名词和概念。

 

「网状网络」与「点对点」

 

大多数的低功耗蓝牙装置都是经由简单的「点对点」网络拓扑来和其他装置通讯(一对一通讯),在蓝牙的核心规格当中,这样的网络称为「Piconet」微微网。

 

想象一支智能型手机和一台心率监视器之间建立了点对点联机,并将数据传输到手机上。 蓝牙有一项不错的特性就是装置可以建立多个联机,因此这支智能型手机还可和另一个活动纪录器建立点对点联机。 尽管这支智能型手机可以同时和两个外部装置直接通讯,但外部装置彼此之间却无法直接通讯。

 

反观网状网络则是一种「多对多」的网络拓扑(图2),网状网络中的每个装置都能与其他任一装置通讯,这一点会在后续的文章当中详细说明。 装置之间通讯的方式是透过讯息,而且每一装置都可以转发讯息,因此从两端的通讯距离可以超越个别节点无线射频功率所及的范围。

 

image.png

 

图2 采用讯息转发架构的多对多网络拓扑。

 

装置与节点

 

网状网络中的每一个装置就是一个节点,而尚未加入的装置则称为「未启动配置装置」(Unprovisioned Device)。 因此,一个未启动配置装置转变成网络节点的过程就叫做「启动配置」(Provisioning)。 想象一个情境,用户新买了一个支持蓝牙Mesh技术的灯具带回家安装,而为了将它加入蓝牙Mesh网络,必须先启动配置灯具以便能够透过现有的蓝牙照明开关或调光器来操作。

 

启动配置是一个安全的程序,经过此一程序,未启动配置的装置会获得一连串的加密密钥,并且向「启动配置器」(Provisioner)装置(通常是平板或智能型手机)注册,其中一把密钥是「网络密钥」,简称NetKey。

 

Mesh网络中的所有节点至少都会有一把网络密钥,也正因为拥有此一密钥,装置才可算是该网络的成员,并称为一个节点。 不过,节点在能发挥作用之前,还要满足几项条件;首先最基本的就是透过一个安全的配置程序取得一把网络密钥。

 

元素

 

有些节点会有多个组成单元,每一个单元都能够独立被操控。 在蓝牙Mesh技术的术语中,这些组成单元叫做「元素」(Element)。 图3显示一个LED灯具,当它加入蓝牙Mesh网状网络时,会变成一个拥有三个元素的单一节点,每一元素则分别对应至不同的LED灯。

 

image.png

 

图3 包含三个「元素」的照明节点。

 

讯息

 

当一节点须要查询其他节点的状态,或者操控其他节点时,就要传送某种类型的讯息;若节点需要向其他节点通报自己的状态,也是藉由发送讯息通报。

 

网状网络中的所有通讯都是透过「讯息」来达成,蓝牙Mesh技术已定义了许多讯息类型,每一类都有自己独特的代码(Opcode)。

 

讯息主要分成两大类:「须确认」(Acknowledged)和「不须确认」(Unacknowledged)两种。 须确认讯息的接收端节点必须做出回应,响应有两项目的:第一,确认讯息已收到;第二,将接收端的数据传回发送端。

 

须确认讯息的发送端若未收到预期的响应,可重新发送讯息,因此须确认讯息必须具备等幂(Idempotent)特质。 换句话说,当某个节点收到多次相同的须确认讯息,效果和收到一次是一样的,不须确认讯息则不须响应。

 

地址

 

讯息的传递必须从某一地址到另一地址,蓝牙Mesh技术定义了三种地址。 单播(Unicast)地址用来对应单一元素寻址,在配置程序中,单播地址会被指派至装置。

 

群组地址是一种群播(Multicast)地址,可用来对应一个或多个元素寻址。 群组地址可由蓝牙技术联盟定义或动态指派,前者就是所谓的「SIG固定群组地址」(SIG Fixed Group Addresses)。 目前共定义了四个SIG固定群组地址,包括All-proxies、All-friends、All-relays及All-nodes。 本文后续会对代理(Proxy)、好友(Friend)和转发(Relay)等名词的意义做进一步解释。

 

动态群组地址的用意是要让用户透过一个组态设定程序,建立并对应一栋建筑的实体组态。

 

例如,建筑中的每一个房间都有对应的群组地址,虚拟地址则用来对应一个或多个元素寻址的地址,并可涵盖多个节点。 其格式是一个128位的通用唯一标识符(UUID),可对应任何元素,就如同卷标的作用。

 

发布/订阅

 

「发布」就是传送讯息的动作,而设定让节点从特定地址接收某些讯息的动作,就是「订阅」。 一般来说,讯息会发送至群组地址或虚拟地址。 群组和虚拟地址的名称,通常会让用户一看就知道用意,因此在使用上既方便又直觉。

 

如图4,我们看到「开关1」节点会发布讯息到「厨房」群组地址。 「灯泡1」、「灯泡2」、「灯泡3」这三个节点,则订阅了「厨房」这个地址, 因此会接收及处理发布至该地址的讯息。 换句话说,「灯泡1」、「灯泡2」和「灯泡3」即可透过「开关1image.png」来操控。

 

 

 

图4 发布/订阅情境示意图

 

「开关2」会发布讯息到「餐厅」这个地址。 而图中只有「灯泡3」订阅了该地址的讯息,因此「开关2」只能控制此一灯泡。 请特别留意,此范例也示范了节点可订阅不只一个地址的讯息,这样的设计既强大又弹性。

 

同样地,请特别留意「开关5」和「开关 6」两个节点皆可发布讯息至「花园」这个地址。 采用群组和虚拟地址并搭配「发布/订阅」的通讯机制的另一绝佳优点,就是当网络中移除、更换或新增节点时,不须重新设定其他节点。

 

想象一下,如果餐厅需要新增安装一盏灯会需要哪些流程。 首先,新的装置必须经过配置程序加入网络,并且设定订阅「餐厅」的地址讯息;而其他的节点完全不会因改变而受到影响。 「开关2」就像之前一样,依然将讯息发布至「餐厅」,但现在「灯泡3」,以及新的灯泡都会做出回应。

 

状态与属性

 

元素可以有多种状态,在蓝牙Mesh技术当中,这样的概念是透过状态值来表示。 「状态」为一元素当中某种类型的数值(请参阅文后的「服务器」模型章节)。 除了数值以外,状态还有一些对应的行为,且无法重复应用在其他情境。

 

例如一颗简单的灯泡,其状态不是「开」就是「关」。 蓝牙Mesh技术定义了一个叫做「通用开关」(Generic OnOff) 的状态。 灯泡即含有这样的状态,因此,数值「On」对应的就是灯泡开启的状态,或者让灯泡点亮。

 

反观一个数值为「Off」的Generic OnOff状态,对应的就是灯泡关闭的状态,或者让灯泡熄灭。

 

稍后我们会再谈到Generic通用定义的重要性。 属性与状态一样,都含有关于某元素的数值,这方面两者类似,但在其他方面却截然不同。 对于熟悉低功耗蓝牙的读者可能会联想到特性(Characteristic),这是一种没有对应行为定义的数据类型,因此可应用至各种不同情境,属性提供解读某个特性的情境。

 

为了示范情境对于属性的重要性及使用方式,本文举「Temperature 8」为例,这是一个8位的温度状态类型,并且有一些对应的属性,包括当前室内周遭温度(Present Indoor Ambient Temperature) 与当前室外周遭温度(Present Outdoor Ambient Temperature)。

 

这两个属性可让传感器发布传感器读值,供接收讯息的装置可以根据温度的情境,更正确地解读温度数值。 属性主要分成两大类:制造商(Manufacturer)属性是一种只读属性,系统管理员(Admin)属性则是读写两用属性。

 

讯息/状态/属性

 

讯息是用来触发Mesh网络装置运作的机制。 形式上,讯息类型代表着一种针对个别或一群状态数值的操作。 所有讯息都可归为三大类型,各自反映蓝牙 Mesh技术所支持的操作类型,这三大类分别为,读取(GET)、设定(SET)和状态(STATUS)。

 

读取讯息用以取得一个或多个节点的状态数值。 状态消息则是用来响应读取讯息,内含对应状态的数值。 设定讯息用来改变某状态的数值。 须确认的设定讯息最后会产生一个状态消息,以响应设定讯息;不须确认的设定讯息则不须响应。 状态消息则用来响应读取讯息、须确认的设定讯息,或者单独使用无关的其他讯息,例如某个元素上的定时器所触发的状态消息。

 

讯息所参照到的个别状态,必须从讯息的代码导出其意义;属性则不然,在通用属性相关讯息当中,它是直接以一个16位属性标识符(ID)来表示。

 

状态转换

 

从某一状态变成另一个状态就叫做「状态转换」。 状态转换可以是瞬间的,或者持续一段时间才完成,这段时间就叫做「转换时间」。 状态的转换很可能会对节点在应用层的行为产生影响。

 

状态绑定

 

状态之间彼此可能会存在着某种关系,因此改变一个状态,可能会连带影响另一个状态。 这样的关系就是「状态绑定」(State Binding)。 一个状态可以跟其他多个状态绑定。 例如某个透过调光器控制的灯泡有两个状态:通用开关通用高低(Generic Level),彼此互相关联。 假使将亮度调整至通用高低的数值「零」(也就是全暗状态),就会使得通用开关的状态从「On」转换至「Off」。

 

模型

 

模型则将前面所介绍的概念都集合起来,用来定义一个元素在网状网络当中的部分或所有功能,模型基本上分成三种。

 

第一种是「服务器」模型,此模型定义了一些状态、状态转换、状态绑定,以及包含此模型的元素可能发送或接收的讯息。 此外,服务器模型也定义了讯息、状态、状态转换对应的行为。

 

第二种是「客户端」模型,此模型未定义任状态,但定义了其可能发送或接收的讯息,以便「读取」、「设定」状态或接收其对应服务器模型中所定义的「状态」讯息。 第三种是「控制」模型,此模型同时结合了「服务器」模型(可与其他客户端模型通讯)以及「客户端」模型(可与服务器模型通讯)。

 

当然,也可以透过延伸其他模型来建立模型,未延伸过的模型称为根模型(Root Model)。 模型一旦定义就永远不能改变,换句话说,不能透过新增或移除行为来改变模型,要满足新的需求,唯一正确且允许的方式就是延伸既有的模型。

 

Generic通用定义

 

有许多不同类型的装置,其基本上都有一些意义相同的状态。 最简单的就是「开」和「关」两种状态,例如灯泡、风扇、插座,全部都可切换成「开」或「关」。

 

因此,蓝牙Mesh模型规格定义了一系列可重复使用且通用的状态,例如通用开关和通用高低。 同样地,也定义了一系列作用于通用状态的通用讯息,例如:通用开关读取「Generic OnOff Get」和通用高低设定「Generic Level Set」。

 

通用状态和通用讯息基本上用于通用模型,例如:通用服务器模型「Generic OnOff Server」和通用客户端模型「Generic Level Client」(图5)。 这些通用定义可以让许多类型的装置不须自行建立模型就能轻松支持蓝牙Mesh技术,也可以藉由延伸其他模型来建立模型,因此,当有新型的装置须要支持时,就延伸通用模型来快速建立模型。

 

image.png

 

图5 Generic模型

 

场景

 

所谓「场景」(Scene)是指一组状态,可在接收到某种类型的讯息,或者在指定的时间内套用成当下的状态。 场景是以一个在网状Mesh中独一无二的16位场景编号(Scene Number)表示。

 

有了场景,就能统一地将一群节点设定成先前储存且互相搭配的状态。 想象一下当夜晚来临,您可能希望家中的客厅温度维持在摄氏20度左右,并将天花板上的六颗LED灯泡维持在特定亮度,房间角落桌上的台灯设定成舒适温暖的黄色。 当将各装置都手动设定成想要的状态,就能透过一个设定应用程序将这些状态储存成场景,等未来有需要时即可发送一个场景Mesh讯息,或者在排定的时间,自动将这组设定调出来套用。

 

启动配置

 

「启动配置」是让装置加入网状网络成为其中一个节点的程序,过程包含了好几个阶段,并且会产生好几把安全密钥,而启动配置本身也是一个安全的程序。 启动配置需要透过装置(如平板)上的应用程序来完成,此时装置的角色是引导整个启动配置程序的进行,因此称为「启动配置器」(Provisioner)。

 

启动配置程序共有五个步骤,以下分别详细说明:

 

. 发出讯号

 

为了支持各种不同的蓝牙Mesh功能,包括但不限于配置程序,蓝牙在规格中导入了一些新的GAP广播类型,其中之一就是「Mesh Beacon」广播类型。

 

一个未配置的装置需在广播封包(Advertising Packet)当中使用「Mesh Beacon」广播类型,以让网络知道它的存在。 用户可能需要让新的装置启动并进入此状态来发送广播封包,例如同时按下某几个按钮,或者按住某个按钮一段时间。

 

. 邀请

 

当进入此步骤时,启动配置器会发送一个邀请给配置中的装置,也就是「Provisioning Invite PDU」。 接着,在前一步骤当中发出讯号的装置要透过一个「Provisioning Capabilities PDU」来响应一些有关于自己的信息。

 

. 交换公钥

 

接下来,启动配置器及启动配置中的装置要互相交换公钥,此密钥可以是永久或临时的,交换方式可以是直接交换或透过频外(OOB)方式。

 

. 认证

 

在认证步骤中,启动配置中的装置需根据自身的能力,透过某种方式发送一个随机的个位数或多位数号码给用户。 例如,启动装置可以让某个LED闪几下。 此时,用户要在启动配置器上输入设备所发送的号码,两个装置之间会利用此随机号码进行一连串的加密数据交换,藉此认证对方的装置。

 

. 发送启动配置数据

 

当认证成功之后,双方装置都会利用自己的私钥加上对方提供的公钥,来产生一个联机阶段密钥(Session Key)。 这个联机阶段密钥将用来保护后续配置程序所需发送的数据,如前面提过的NetKey网络密钥。

 

当启动配置程序完成后,已启动配置的装置就会拥有网状网络的网络密钥、一个称为「IV Index」的Mesh安全性参数,以及一个启动配置器配发的单点传送地址(Unicast Address),至此,装置就正式成为一个节点。

 

选择性功能

 

所有节点都能发送及接收网状网络讯息,但节点还可能有一些选择性的特殊功能。 目前有四种选择性功能:转发(Relay)、代理(Proxy)、好友(Friend)以及低功耗(Low Power);一个节点可以自行决定是否支持,或支持多个选择性功能,此外,任何选择性功能都可以随时启用或停用。

 

转发(Relay)节点

 

凡是支持「转发」功能的节点即可称为转发节点,这类节点可将其收到的讯息再传送出去。 透过转发的机制,讯息就能穿越整个网状网络,沿途经过多次转跳(Hop)。

 

Mesh网络的协议数据单元(PDU)当中包含了一个字段叫做TTL(Time To Live)存活时间。 这是一个整数值,用来限制讯息在网络中的转跳次数。 比方说,如果将TTL设成「3」,那讯息在途中最多能转发三次。

 

假使将它设为「0」,那讯息就无法转发,必须直接传送至目的地。 Mesh网络中的节点只要稍微了解拓扑的组态,以及网络上有那些成员,就能利用TTL字段来提升网状网络的使用效率。

 

低功耗(Low Power)节点与好友(Friend)节点

 

某些类型的节点供电能力有限,因此必须尽可能节省电力。 此外,这类装置可能绝大部分时间都在传送讯息,但偶尔还是需要接收一些讯息。

 

以温度传感器为例,它很可能透过一颗小小的钮扣型电池来供电。 当温度超过或低于某个预先设定的上、下门坎值时,就会每分钟传送一次温度计读值。 假使温度维持在上、下门坎值之间,那它就不会发出讯息。 这样的运作方式不难达成,而且不须消耗太多电力。

 

但问题是,用户有时必须传送讯息给传感器来设定新的门坎值。 这种情况虽不多,但传感器必须能够支持。 然而,接收讯息的需求会增加装置的负荷,进而消耗电力,如果装置随时处于待命状态,就可不漏接任何温度门坎的设定讯息,但却将因此消耗大量电力;若装置处于低度待命状态,固然可以节省电力,但却可能让传感器漏接一些设定讯息。

 

要解决这样的困境,答案就在「好友」节点以及「友谊」的概念,以前述温度传感器为例,我们可将传感器设定成「低功耗节点」(LPN),这一点可透过在传感器的设定数据中加入一个功能旗标来达成。

 

LPN需要另一个节点的配合才能运作,一个没有供电能力限制的节点(例如随时连接着插座的节点),此节点就是所谓的「好友」节点。 好友节点负责帮忙储存发送给LPN的讯息,而LPN再透过轮巡(Poll)的方式向好友节点查询是否有「等待接收的讯息」。

 

只要LPN向好友节点轮巡的频率不要太高,就能兼顾省电与适时接收讯息的需求。 每当LPN向好友节点轮巡的时候,好友节点就会将其储存的所有讯息,逐一传送给LPN,并且透过一个MD(More Data)旗标来让LPN知道好友节点还有更多的讯息待传。

 

LPN与好友节点之间的关系称为「友谊」(Friendship)。 对于电力相当有限却又必须接收讯息的节点来说,友谊的概念非常重要,如此才能让它在蓝牙Mesh网状网络当中持续保持运作,却又能够发挥能源效率。

 

代理(Proxy)节点

 

全世界支持低功耗蓝牙的装置数量非常庞大,大多数的智能型手机及平板即是一例。

 

然而,当蓝牙Mesh网络正式获得采纳时,市场上的蓝牙装置并不具备蓝牙Mesh技术。 不过它们却能支持低功耗蓝牙,因此可透过GATT(Generic Attribute Profile)通用属性配置文件与其他装置连接并互动。

 

「代理」(Pxoxy)节点的作用即在此,这类节点会提供一个GATT接口让低功耗蓝牙装置与Mesh网络互动。 蓝牙定义了一套「Proxy Protocol」的通讯协议,以供面向连接的载体(Bearer)装置(如GATT)使用;GATT装置会从Proxy节点以GATT特性(Characteristic)读取和写入Proxy Protocol PDU,Proxy节点会将这些PDU转换成Mesh PDU,反之亦然(图6)。

 

http://s.laoyaoba.com/jwImg/news/2018/08/27/15353193851043.jpg?imageView2/0/w/760

 

图6 智能型手机经由Mesh代理节点进行通讯,P=代理功能开启。

 

简而言之,Proxy节点可让不具备蓝牙Mesh技术的低功耗蓝牙装置能与Mesh网状网络中的节点互动。

 

节点组态

 

每个节点皆支持一套标准的组态状态,会在组态服务器模型(Configuration Server Model)当中执行,并且透过组态客户端模型(Configuration Client Model)来存取。 组态状态数据关乎到节点在Mesh网状网络内的能力和行为,但与个别应用或装置类型的行为无关。

 

举例来说,一个节点所支持的功能,不论是否为代理节点、转发节点等,都是透过组态服务器状态来标示。 一个节点所订阅的地址,会储存在Subscription List订阅列表当中,网络和子网密钥会标示节点所属的网络,并列在组态区块(Configuration Block)当中,节点所持有的应用密钥亦然。 蓝牙Mesh网络定义一系列的组态讯息,以供组态客户端模型和组态服务器模型,能够在组态服务器模型的状态下执行读取、设定和状态等操作。

 


进入网络通信查看更多内容>>
相关视频
  • 微波毫米波电路分析与设计

  • 天线原理与基本参数

  • Digi-Key: Follow Me 系列(1) 直播回放及答疑记录

  • 无线感测网络

  • 微波五讲

  • 天线原理 哈工大 林澍

精选电路图
  • 家用电源无载自动断电装置的设计与制作

  • 短波AM发射器电路设计图

  • 开关电源的基本组成及工作原理

  • 用NE555制作定时器

  • 带有短路保护系统的5V直流稳压电源电路图

  • 基于TDA2003的简单低功耗汽车立体声放大器电路

    相关电子头条文章