*Beacon*
Beacon也指ibeacon,beacon是信标,是建立在低功耗蓝牙协议基础上的一种广播协议,它也是拥有这个协议的一款低功耗蓝牙从机设备。
Beacon工作机制:
Beacon会每隔一定的时间(SKYLAB的beacon为100毫秒)广播一个数据包到周围,作为独立的蓝牙主机(比如手机等)在执行扫描动作时,会间隔地接收到Beacon广播出来的数据包。该数据包内容最多可以包含31个字节的内容。
同时,在主机接收到广播包时,其中会指示该广播包来自于哪一个蓝牙从机MAC地址(每个Beacon拥有唯一的MAC地址)的从机设备和当前的接收发送信号强度指示值RSSI为多少。这时候,如果手机上安装有beacon对应的app,接收到该ID的app会根据该ID的设置条件采取相应的动作!
ibeacon的应用领域:
(1)推送消息
(2)室内导航和定位,资产定位追踪和管理
(3)和微信摇一摇结合做OfflineToOnline营销,摇班车信息,摇一摇签到,摇一摇投票
(4)身份识别、门禁、考勤、打卡签到等
(5)传感器应用
(6)大型公共场合beacon综合应用,比如机场、火车站等,功能应用包括推送行车信息;室内导航,引导客户去往目的地;推送附近商场信息等等。
ibeacon设备整合BLE
Beacon设备只使用了通告通信信道。正如beacon(信标、灯塔)的字面意思,这种设备以一定的时间间隔发送数据包,并且发送的数据被可以被像手机这样的设备获取。也就是说,iBeacon只是BLE广告模式的一种简单的使用,并在此基础上提供了对IOS的一些附加支持。
如果你试着拦截一段iBeacon通告数据包,你会发现它是这样的:
02 01 06 1A FF 4C 00 02 15 B9 40 7F 30 F5 F8 46 6E AF F9 25 55 6B 57 FE 6D 00 49 00 0A C5
以上的数据已经将广告数据包的报头、修正地址、广告PDU数据包的报头和其中的MAC地址部分都移除掉了,也就是说这部分数据只包含了实际信息数据——一共30个字节,符合实际信息数据最多31个字节的限制。
那么一个iBeacon设备的BLE广告数据是如何组成的?以苹果设备为例:
02 01 06 1A FF 4C 00 02 15: iBeacon prefix (fixed)
B9 40 7F 30 F5 F8 46 6E AF F9 25 55 6B 57 FE 6D: proximity UUID (here: Estimote’s fixed UUID)
00 49: major
00 0A: minor
C5: 2’s complement of measured TX power
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5xRvjtd8-1660621327032)(new 2 (1)].assets/wps1.jpg)
iBeacon数据解析
除了修正的iBeacon前缀数据(02 01 … 15),其它各部分数据各代表什么?
Proximity UUID
(上面例子中的B9 … 6D部分):这是将你所有的beacon与其他人的beacon设备区别开的id!例如,目前在商店里某个区域分布着多个beacon形成一条“链带”,用于为顾客提供特定的服务,那么归属于同一条“链带”的beacon将分配到相同的proximity UUID。为这条“链带”设计的专用应用程序将会在后台使用这个UUID扫描到这条“链带”中的beacon设备。
major
编号(2个字节,上面例子中为0x0049,也就是73):用于将相关的beacon标识为一组。例如,一个商店中的所有beacon将会分配到相同的major编号。通过这种方式,应用程序就能够知道顾客位于哪一家商店。
minor
标号(也是2个字节,上面例子中为0x000A,也就是10):用于标识特定的beacon设备。例如一个商店中的每一个beacon设备都拥有唯一的minor编号,这样你才能够知道顾客位于商店中的哪个位置。
TX power
上面例子中为0xC5=197,根据2的补码测得256-197=-59dBm是距离设备1米测得的信号强度值(RSSI- Received Signal Strength Indication,接收到的信号强弱指标)。假如接收到的信号强度减弱了,那么我们可能在远离。只要知道1米距离的RSSI,以及当前的RSSI(我们可以从接收到的信号中一块获取到这些信息),那么计算出当前的距离是可能的。IOS已经实现了个这个功能,对于其它平台需要自己手动编码计算。