Bluetooth Beacons的介绍和技术实现
Bluetooth Beacons的介绍和技术实现
Bluetooth信标技术在智慧零售、智慧医疗、智慧交通等领域的应用日益广泛。本文详细介绍了Bluetooth Beacons的技术原理和应用场景,包括其广播工作方式、信标帧格式(iBeacon、AltBeacon和Eddystone),以及Beacon应用程序的开发和使用。
概述
本文主要介绍Bluetooth Beacons相关的技术要点和应用场景,主要介绍信标的3类帧格式,并详细介绍了帧的各个字段的定义,还介绍了信标功能在实际生活中的应用范例。
1 Bluetooth Beacons
在大多数情况下,信标被用于提供一种确定建筑物内(如百货公司、机场、办公室或博物馆)内人员位置的方法,并提供利用该位置信息的服务。在这些情况下,信标安装在固定位置,并且人的智能手机上有一个应用程序,该应用程序知道它打算使用的每个信标的位置。有趣的是,我们开始看到一类新的信标应用程序,其中信标是移动的,而不是固定的。
看看 Lighthouse 解决方案 (http://www.lighthouseforkids.co/),这是一种可穿戴信标设备,旨在跟踪有特殊需求的学生并确保他们的安全。我们认为,未来将会看到更多涉及移动和可穿戴信标的解决方案。
蓝牙信标是低功耗蓝牙(LE)的众多应用之一。
市场上有许多商业信标,如图所示,它们有各种形状和大小。它们都服务于相同的基本目的,并利用了蓝牙 LE 的相同方面。也就是说,已经出现了一些略有不同的信标工作方式方法,这对给定信标产品可能解决也可能无法解决的使用案例范围以及创建使用信标的应用程序的开发人员都有影响。
2 广播工作方式
蓝牙 LE 堆栈包括一个称为 Generic Access Profile 的组件,我们简称为“GAP”。GAP 负责允许设备相互发现然后连接的过程。发现过程涉及设备 “广告” 或 “扫描”。广告设备定期广播小数据包,这些数据包包含的信息可帮助扫描设备确定广告设备是否属于它可能想要连接的相关类型。
信标做广告,但一般来说,其他设备不会连接到它们。信标据说是 GAP广播公司,这是蓝牙LE设备的技术术语,它发布广告,但 不接受连接。信标之所以是GAP广播公司,是因为 实现允许智能手机应用程序确定其位置的目标所需的一切都包含在 广告包中。那么信标发出的广告包中究竟有什么内容呢?
3 信标帧格式
广告报文可以包含少量的各种类型的数据字段。数据可用的字节数上限为 31 个,因此产品设计师必须谨慎选择要包含在广告数据包中的字段。有许多称为AD类型的字段类型,它们是 由蓝牙SIG在称为核心规范补充(CSS)的文档中定义的。所有AD类型的结构相同,由三部分组成:
第一部分:是长度字节,
第二部分:是指示 类型的字节,
第三部分:是值。
信标在一个或多个标准广告包字段中编码信息,但目前使用的方案有 几种,我们称这些变体为帧格式。三种主要的格式是:
1)iBeacon来自苹果,
2)AltBeacon来自Radius Networks,
3)Eddystone来自b谷歌。
创建信标应用程序的应用程序开发人员需要知道其应用程序必须使用的 信标使用的帧格式,并能够对其进行解码。
3.1 帧格式:iBeacon
3.1.1 格式介绍
在本文描述的三种帧格式中,最著名的可能是苹果公司的iBeacon。iBeacon 使用称为制造商数据字段的标准AD类型,其类型值为0xFF。iBeacon 广告包以原始格式显示在下面,然后在 表中列出每个单独的AD类型:
应用程序需要识别特定iBeacon并获得有关它的有用信息的所有内容都在 制造商数据字段中。以下是它的价值分解:
Company ID
“制造商数据”字段必须始终以2字节的公司标识码开头。这些代码 由蓝牙SIG发给公司,并指示应用程序如何解码 字段的其余部分。上图中显示的值0x004C是Apple的Company ID。
iBeacon Type
表示设备为邻近信标,对于 iBeacon设备,该值始终为0x02。后面的iBeacon长度字段表示字段 的剩余部分包含多少字节。
UUID
标识拥有信标的组织。
Major and Minor field
Major和Minor字段对位置进行编码,Major字段通常表示特定的建筑物 ,Minor字段表示该建筑物中的特定位置。
举一个实例: Major代表伦敦市中心的商店,Minor代表体育用品部门。
TX Power field
TX功率场用于帮助应用程序估计用户与信标的距离。我将在下面说 更多关于这一点,但在iBeacon的情况下,它包含了距离信标1米 处测量的信号强度。
3.1.2 详细分析
采用 iBeacon 技术的设备可以使用纽扣电池供电一个月或更长时间,也可以使用较大容量的电池连续运行数月,或者通过外部电源长时间供电。iOS 设备也可以配置为生成 iBeacon 广告,不过此功能的应用范围有限。这适用于诸如销售点或信息亭应用程序,或者在用户积极使用应用程序的短时间内希望成为 iBeacon 的应用程序。
iBeacon 通告通过低功耗蓝牙提供以下信息:
UUID、major 和 minor 值提供 iBeacon 的标识信息。一般来说,此信息本质上是分层的,主要和次要字段允许对 UUID 建立的身份进行细分。可以使用 OS X 中的 uuidgen 命令行实用程序生成 UUID,也可以使用 NSUUID Foundation 类以编程方式生成。
下表显示了如何将这些值用于全国零售店的示例。UUID 由所有位置共享。这允许 iOS 设备使用单个标识符来识别具有单个区域的任何商店。然后,为每个特定商店(旧金山、巴黎和伦敦)分配一个唯一的主要值,以允许设备识别它所在的特定商店。在每个单独的商店中,部门被赋予单独的次要值,尽管这些值在商店中是相同的,以便设备上的应用程序更容易识别部门。
3.2 帧格式:AltBeacon
AltBeacon 规范定义了广告的格式 Bluetooth Low Energy 邻近感应信标广播的消息。
AltBeacon 规范旨在创建一个开放的、 接近信标实施的竞争市场。
AltBeacon 规范对所有人免费实现,没有 特许权使用费或费用。
AltBeacon 不会偏袒一个供应商而不是另一个供应商 供应商的技术标准合规性以外的原因 实现。
3.2.1 格式介绍
AltBeacon帧格式几乎与iBeacon帧格式相同。这两种格式 在下图中并排显示。
AltBeacon 帧通常具有 Radius Networks 的公司 ID,该公司发明了 AltBeacon 帧格式。
它还定义了一个信标代码,其中包含厚颜无耻地选择的十六进制值 0xBEAC,而不是 iBeacon 类型和长度字段。
UUID 用于根据 iBeacon 识别拥有信标的组织。AltBeacon 不是将位置代码分成两部分,而是让您以任何您喜欢的方式使用这 4 个字节。最后的 TX Power 字段与 iBeacon 相同。
3.2.2 AltBeacon 协议字段
3.3 帧格式:AltBeacon
AltBeacon 帧格式与 iBeacon 帧格式几乎相同。下图 中并排显示了这两种格式。
Google 的 Eddystone 的工作方式与 iBeacon 和 AltBeacon 略有不同。它根本不使用广告数据包中的 Manufacturer Data 字段。相反,它使用 Complete List of 16-bit Service UUID 字段和关联的 Service Data 字段。具体来说,服务 UUID 为 0xFEAA 显示在服务 UUID 字段中,Service Data 字段包含 0xFEAA 后跟服务数据,即信标数据。
此外,Eddystone 定义了一个可扩展的子类型列表,如下所示:
4 Beacon 应用程序
4.1 专用应用程序还是通用的信标浏览器?
除了 Eddystone 之外,由特定组织为特定目的部署的一组给定的信标将需要相应的应用程序来识别这些信标并以某种方式响应它们。因此,例如,一个旨在与部署在全国连锁店所有分店的信标一起使用的应用程序可能需要识别来自这些商店的信标,确定广告包中的数据所指示的位置,然后向用户弹出与他们所在的部门和商店相关的特别优惠。 假设这是此用户可能感兴趣的内容。或者,机场可能会部署信标,以允许其应用程序在用户通过特定信标时向服务器报告。
这样,系统就可以在用户通过机场时跟踪用户并提供帮助,例如,如果用户被困在安检处并有错过航班的风险。每当信标广播唯一代码(如 UUID/Major/Minor 数据)时,就需要一个专用的应用程序,目的是让应用程序将此数据映射到其他内容(如位置)并采取自定义作,例如向用户提供该特殊优惠。
Eddystone 允许将 URL 作为唯一 ID 的替代方案进行广播。URL 可以被浏览器之类的东西使用和作,因此很容易设想一个通用的信标应用程序,它可以处理由任何 信标广播的 URL,而不仅仅是一个特定组织部署的 URL。
4.2 API接口
对于 API,开发人员有两种广泛的选择。他们可以使用其平台提供的原生蓝牙 LE API,并实施定期扫描和过滤,旨在从其应用程序感兴趣的信标中捕获广告数据包,或者可以选择使用信标制造商或帧格式说明器提供的更高级别的专用信标 API。例如,Radius Networks 提供了一个 Android 库,该库实现了 AltBeacon API。您采取哪种方法是个人选择,您可能会权衡完全控制与更快完成工作的利弊。
4.3 定位功能
这个问题的答案可以根据您的要求用各种方式来表达。不过,在每种情况下,不要忘记更正确表述的问题应该是 “Where's this beacon”。用户具体所在的位置,相对于给定的信标更为复杂。答案可能是精确的 GPS 位置,也可能是以描述性方式表示的位置,例如 The sporting goods department of the London store。或者,该位置可以用与霸王龙展览等其他事物的接近程度来表示。
使用 iBeacon 和 AltBeacon,您不会直接获得此位置数据。您需要以某种方式将 UUID/主要/次要 (iBeacon) 或 UUID/信标代码 (AltBeacon) 映射到该位置数据。有多种方法可以解决这个问题,显而易见的是 :
1.在 smartphone
2 上对本地数据库执行查找。对远程服务器上的数据库执行查找
3.引用本地数据库,但在网络条件合适时,将该数据库的内容与远程服务器副本保持同步。
4.4 距离估计
估计用户与信标距离的标准方法是采用智能手机测量和报告的信标信号强度,然后执行路径损耗计算。信号强度称为 RSSI,即接收信号强度指示。路径损耗计算将同时使用该值和广播数据包中包含的 TX 功率值,因为它充当参考值,并在距离信标一定距离(iBeacon 为 1 米,Eddystone 为 0 米)时为我们提供预期的信号强度。
但是,这种方法只能产生粗略的估计,并且信标所处的环境可能会对距离估计产生非常重大的影响。例如,信号强度较弱可能是由于用户走在博物馆的柱子后面,而不是他们远离信标。
一种更高级的方法是使用一种称为无线电指纹的技术,该技术会创建该位置的无线电地图,并利用这些数据来产生更好的结果。
4.5 扫描功能
Beacon 应用程序将定期扫描 Beacon 并实施筛选,以便仅更仔细地检查感兴趣的设备。即使使用蓝牙 LE 也是如此,扫描也是一项相对耗电的作,因此应尽可能避免长时间进行非常激进的扫描。
在设置扫描时,您可以使用两个基本参数。“扫描窗口”指定扫描的时间,“间隔”,即两次扫描之间等待的时间。不同平台上的 API 可能以不同的方式表达这一点,但这就是归根结底的原因。
在考虑扫描窗口和间隔值时,应考虑信标的广告频率。如果您的信标每 2000 毫秒只发出一个广告数据包,那么以 100 毫秒的间隔扫描 500 毫秒是没有意义的。显然,在很多情况下您没有收到广告包,并且扫描活动将是一种浪费。
请注意,从蓝牙核心规范的 4.2 版开始,广告不是确定性的,因为调度算法中包含小的随机延迟,以帮助避免持续冲突。因此,您需要采用合理的近似值来将扫描与信标的广告同步,并确保当扫描接收的数据包中不再存在信标时,您的代码不会太快下结论。
4.6 消失的信标
每次应用程序扫描时,它都会检测到零到多个信标。您可能会在扫描结果中连续多次看到相同的信标,因为用户移出特定信标范围所需的时间比其广告间隔(可能在数百毫秒左右)要长得多。
但是,在某些时候,信标将停止出现在您的扫描结果中,您的应用程序将需要决定如何解释它。您可以立即得出结论,信标不再在范围内,因为用户已远离它,但这可能是一个错误。信标可能由于多种原因而停止报告,它在一组扫描结果中缺失并不意味着它不会在您下次扫描时(几秒钟后)再次出现。也许用户走在一个物体后面,该物体将来自信标的信号衰减到足以使其暂时超出范围,尽管用户的物理距离并不比上次收到来自信标的数据包时更远,在这种情况下,当用户向前多走几步并从柱子后面出现时, 您将再次开始接收这些数据包。简而言之,用户始终 “靠近” 信标,即使您短暂地停止接收广告数据包也是如此。
应用程序通常会维护一个 “实时” 信标列表,即用户认为靠近的信标。从活动列表中删除时,可以立即执行:信标未出现在最新的扫描结果中,或者您可以决定推迟删除,直到该信标连续从 n 组扫描结果中消失,或者可能在它不存在特定时间之后。这两种方法中的任何一种都可能有助于您为 beacon 应用程序的用户提供更好的体验。
4.7 信标-行动
从信标的数据中确定了位置后,下一步是什么?显然,您的应用程序现在所做的是非常特定于应用程序的。您可以执行一些交互式作,例如向用户显示有关最近的博物馆展品的信息。如果您确实要进行交互式响应,那么重要的是您只为用户提供相关信息,并且不要太频繁地这样做。信息很容易变得烦人,用户确实知道如何卸载应用程序!或者,您可以在后台静默执行某些作。通过机场跟踪用户,以便在他们延误时可以得到帮助就是一个很好的例子。显然,尊重用户的隐私是最重要的,用户应该明确选择加入这样的内容。
4.8 免打扰信标
用户想要和喜欢的内容可能会随着时间的推移而变化。当全家人一起去商场时,也许他们不想让手机通知他们特别优惠,而当他们独自购物时,他们却想。考虑这一点并为用户提供一种简单的方法来告诉 beacon 应用程序在被告知其他情况之前不要打扰他们,这是一个好主意。
4.9 穿戴设备信标
像 Smart Watches 这样的可穿戴设备是为信标应用量身定制的,瞥一眼您的手腕比从口袋里掏出手机看屏幕要容易得多。智能手表应用程序也可以是完全交互式的,因此一些非常有趣的可穿戴信标应用程序有很大的空间。
4.10 实现一个信标功能
开发人员需要测试他们的应用程序,这意味着他们需要在测试环境中使用 Beacon。您可以(并且应该)使用您将推出的相同类型的信标。但在此阶段之前,使用可编程设备作为测试信标可以更灵活、更高效。
使用可编程设备意味着您可以快速轻松地更改信标广播数据和其他参数,这些参数控制其测试目的的行为。像 Raspberry Pi 或 Intel Edison 这样的设备可以变成信标,更专业的蓝牙开发板也可以变成信标,例如大多数蓝牙芯片和模块制造商销售的那些。像德州仪器 (TI) 的 SensorTag、Nordic Thingy 或 BBC micro:bit 这样的设备也可以很容易地变成信标,而无需做任何编程,但仍然为你提供了大量的多功能性,用于其他蓝牙开发目的。
5 结论
信标将成为各种环境中非常常见的特征。了解它们的工作原理以及如何利用它们是任何开发人员在物联网新时代都会从中受益的一项技能。