iBeacon技术详解与应用
1 名称解释
BLE:Bluetooth Low Energy,蓝牙低功耗技术。
iBeacon:一种技术,基于蓝牙4.0的精确定位技术。
Beacon:实现iBeacon技术的模组、设备。
2 iBeacon介绍
iBeacon是苹果在2013年WWDC上推出一项基于蓝牙4.0(Bluetooth LE | BLE | Bluetooth Smart)的精准微定位技术,在iPhone 4S后支持。当你的手持设备靠近一个Beacon基站时,设备就能够感应到Beacon信号,范围可以从几毫米到50米。因为是一种定位技术,苹果将iBeacon相关的接口放到了 CoreLocation.framework。Google在Android 4.3及后续版本支持了该功能,只要满足iBeacon技术标准即可。iBeacon底层的技术使用的使用BLE(Bluetooth Low Energy)。
3 BLE介绍
BLE起源于2006年Nokia的Wibree技术,后被整合入蓝牙,在2010年发布的蓝牙4.0技术规范成为其中一部分,协议栈如下图所示。它是一组与传统蓝牙不同的协议,且对应设备也未向后兼容。因此形成三种设备类型:
(1)Bluetooth设备(蓝牙BR/EDR):只支持传统蓝牙的设备。如一些老式设备,比如外设、汽车系统、旧型手机等。
(2)Bluetooth Smart Ready设备(蓝牙4.0双模):同时支持传统蓝牙和LE模式的设备。(iOS、Android系统等)新型手机、笔记本、平板电脑等。
(3)Bluetooth Smart设备(BLE单模):只支持LE模式的设备。Beacon设备只支持low energy protocols(LE低功耗协议),因此能靠一颗纽扣电池就能运行很长时间。
BLE和传统蓝牙使用的都是相同的波段(2.4GHz-2.4835GHz)。BLE协议的传输速率比较低,因此除了用于发现设备和做一些简单通信之外,不太适合用于传输大量的数据流。在协议条款上,BLE和传统蓝牙的信号都能够覆盖到100米的范围,但BLE稍广。
BLE与传统的蓝牙相比最大的优势是功耗降低90%,同时传输距离增大(理想状况下超过100米)、安全和稳定性提高(支持AES加密和CRC验证)。iBeacon同时有一些自己的特点:
(1)无需配对,一般蓝牙设备印象中都需要配对工作。iBeacon无需配对,因为它是采用蓝牙的广播信道传送信号。
(2)程序可以后台唤醒,iBeacon的信息推送需要App支持。但是我们接收iBeacon信号无需打开App,只要保证安装了,同时手机蓝牙打开。
(3)iBeacon不具备传统意义上的数据传输功能,Beacon基站只推送位置信息,是采用的不可连接模式。如果开发的APP要运行起来并与服务器通信以实现定制化功能、获取定制化数据,需要开启其他的数据通信方式,如WIFI、4G等。注:采用iBeacon定位,可以不使用网络,定位算法在本地实现,即在设备本身完成定位而不通过服务器计算,前提是地图数据需提前初始化进本地设备。
4 beacon设备如何使用BLE
首先,我们先纵观一下BLE完整的连接过程。
4.1 BLE的广告扫描连接解析
广告(Advertising)
广告(Advertising),也可以译成广播,符合常用理解性。为了使主机(Central)能连接得上从机(Peripheral),从机必须进行广告。从机会每间隔一定的时间发送一个广告包(Advertisement Packet),间隔的时间在20ms到10.24s之间。广告的间隔时间会影响之后启动一次连接所需要花费的时间。
主机在发送连接请求(Connection Request)启动连接之前必须接收广告包。而从机在发送完一个广播包后的一小段短时间内,只监听主机的连接请求。一个广告包能够包含31个字节的数据。通常包含的内容有一个用户可读的名称、光宇设备发送包的信息、一些用于获知本设备是否能够连接等。广告可以设置成以下类型:
1) Connectable Undirected Event Type(可连接无定向型)
2) Connectable Directed Event Type(可连接定向型)
3) Scannable Undirected Event Type(可扫描无定向型)
4) Non-connectable Undirected Event Type(不可连接无定向型)
当主机接收到一个广告包时,它将发送一个叫做“扫描请求”(Scan Request)的请求来获得更多的广告数据,当然前提是这个活跃的扫描者(Active Scanner)已经进行了配置。然后从机通过发送一个“扫描响应”(Scan Response)来回应这个请求,这个回应可以包含额外的31个字节的数据。
广告,包括扫描请求和响应,它们采用三个不同的2.4G频率段以避开WLAN的干扰。
扫描(Scanning)
扫描是主机用来监听广告包和发送扫描请求的。有两个时序参数我们需要意识到他们的内容:“扫描窗口”(Scan Window一次扫描进行的时间宽度)和“扫描间隙”(Scan Interval一次扫描的总时间,包括扫描休息的时间和扫描进行的时间)。 对于每一次的扫描间距,主机扫描的时间等于“扫描窗口”,意思是说,如果“扫描窗口”等于“扫描间距”,那就意味着主机在进行连续的扫描。所以说,主机扫描的占空比就是“扫描窗口”的时间对于“扫描间隙”的时间乘以百分之百。
启动连接(Initiating)
当主机想要进入连接时,它将使用跟当扫描广告包时一样的程序。当启动连接时,在接收到一个广告包时,主机将发送一个连接请求(Connection Request)给从机。
连接(Connection)
根据连接中第一次数据交换来定义主机(Central)和从机(Peripheral)。当进行连接时,主机将从从机的特别定义的“间隙时间”(Interval)请求数据。这个间隙时间称作“连接间隙”(Connection interval)。它取决于并用于主机连接,不过从机可以发送更新连接参数请求(Connection Parameter Updata Requests)给主机。根据Bluetooth Core Specification,这个时间间隙必须在7.5ms到4s之间。如果从机在时间帧内(time-frame)不响应这个来自于主机的包,这称作连接监管超时(Connection supervision timeout)此次连接被认为已丢失。在每次连接间隙中通过传输多个包来获得更多的数据吞吐量是可以的。每次包的发送最多可以是20个字节。但是,如果当前消耗是重要的,从机没有数据发送,就可以选择忽略一定数量的间隙。被忽略的间隙被称作“从机延迟”(slave latency)。在一次连接中,设备们将通过所有的通道在频率带中进行跳频(hop),除了广告通道,对应应用程序来说,某种程度上是完全透明的。当然,最后还有终止连接。
4.2 使用方式
Beacon设备只使用了广告通信信道,因此无BLE后续连接相关步骤,也正是这样,面向其低功耗室内精确定位的应用细分领域。正如beacon(信标、灯塔)的字面意思,这种设备以一定的时间间隔发送数据包,并且发送的数据被可以被像手机这样的设备获取。
比如:一个小型温控器可以开放一个service用于获取当前的温度或者湿度读数,它是面向连接的,温控器和操作设备之间可以相互通信;Beacon不使用连接模式,操作设备只接收到Beacon的广播信号。
4.3 iBeacon API 介绍
下面主要介绍iBeacon具体怎么使用:
(1)Beacon的表示
iBeacon本质上来说是一个位置(区域)信息,所以 Apple把iBeacon功能集成在了Core Location里面。
iBeacon信标在Core Location中表现为一个CLBeacon,它圈定的范围则表现为CLBeaconRegion,这是一个CLRegion的子类。
CLBeaconRegion主要用三个属性来标识一个iBeacon,proximityUUID、major和minor。
proximityUUID是一个NSUUID,用来标识公司,每个公司、组织使用的iBeacon应该拥有同样的proximityUUID。
major用来识别一组相关联的beacon,例如在连锁超市的场景中,每个分店的beacon应该拥有同样的major。
minor则用来区分某个特定的beacon。
这些属性如果不指定(即nil),匹配的时候就会忽略这个属性。例如只指定proximityUUID的CLBeaconRegion可以匹配某公司的所有beacons。
(2)Monitoring
以苹果手机为例。Apple在iOS4中增加了地理围栏API,可以用来在设备进入/退出某个地理区域时获得通知,这些API包括:
-startMonitoringForRegion:
-locationManager:didEnterRegion:
-locationManager:didExitRegion:等。
CLBeaconRegion作为CLRegion的子类也可以复用这些API,这种检测iBeacon的方式叫做monitoring。
使用这种方法可以在程序在后台运行时检测iBeacon,但是只能同时检测20个region,也不能推测设备与beacon的距离。
(3)Ranging
除了使用地理围栏API的方式,Apple还在iOS7中新增加了iBeacon专用的检测方式,也就是ranging。
通过CLLocationManager的-startRangingBeaconsInRegion:方法可以开始检测特定的iBeacon。
当检测到beacon的时候,CLLocationManager的delegate方法-locationManager:didRangeBeacons:inRegion:会被调用,通知调用者现在被检测到的beacons。
这个方法会返回一个CLBeacon的数组,根据 CLBeacon的proximity属性就可以判断设备和beacon之间的距离。
proximity属性有四个可能的值,unknown、immediate、near和far。
另外CLBeacon还有accuracy和rssi两个属性能提供更详细的距离数据。
使用iOS设备作为iBeacon:
我们可以使用Core Bluetooth框架来广播特定的payload来让iOS设备成为一个iBeacon。
这个payload可以由CLBeaconRegion的-peripheralDataWithMeasuredPower:方法来获取。
之后交给CBPeripheralManager广播出去就可以了。
需要注意的是,广播iBeacon信息的时候app必须在前台运行。
5 应用场景
5.1 BLE应用
BLE使用连接方式,则可应用于低速率、低功耗的信息交换。
心率监测腕带
医疗设备数据传输
寻物与防丢失
电动玩具
键盘控制
游戏娱乐
遥控器
智能家居
体育运动
设备外设(触摸笔)
电子支付
5.2 iBeacon应用
iBeacon是用于室内精确定位的技术,可以衍生出以下应用。
定位与导航
兴趣商品精确推送
商场互动游戏
反向寻车
设备巡检
人流统计
电子围栏
更多图文资料,敬请关注微信公众号“智物客”,“智物客”和您免费分享物联网、智慧城市相关技术和项目解决方案。
扫码关注