蓝牙之二十三-beacon
来源:互联网 发布:js object 添加对象 编辑:程序博客网 时间:2024/06/05 14:16
本文基于Bluetooth SIG group资料。
Beacon 2014年推出,ABI预测到2019年预计有2019将有6千万台设备。
beacon用于个人定位,这些场景如百货商场,机场,办公室,博物馆等。这些场景中,beacon安装在固定的位置,手机上的API知道beacon的位置。
BLE协议栈包括一个称为GAP(Generic Access Profile),GAP的负责设备发现和连接。发现过程包括advertising和scanning。Advertising设备以等间隔广播小数据包,这些数据包包含了设备类型,这种类型有利于对设备进行区别选择。
Beacon设备广播,其它设备并不向他们连接。Beacon被称为“GAP广播”。
Beacon帧格式
广播包可以包括少量不同类型的数据域。数据长度是31字节,因此产品开发者需要选择广播包支持哪些类型的数据域。这些数据域中有一些由SIG定义的称为AD类型。所有的AD类型有相同的包括三个字段的结构。第一个字段是字节长度,第二个字段是类型,第三个字段是值。
Beacon编码格式目前有三种“帧格式”,它们是Apple的iBeacon,Radius Network的AltBeacon以及谷歌的Eddystone。
应用开发者需要知道如何解析这三种格式数据。
Frame Format:IBeacon
采用了标准的AD类型,即值为0xFF的Manufacturer 数据域,一个示例如下:
图2:iBeacon广播数据包
应用程序需要解析的有用信息在manufacturer数据域,如下是上面字段的划分。
Manufacturer数据字段以两字节的公司ID码开始。SIG将这些ID码发放给公司,并且能知道应用程序如何解析这些字段。上图的0x004C就是apple公司的ID。
iBeacon type指明了其类型是“proximity beacon”,即0x02.IBeacon长度字段描述了剩下的字段的长度。
UUID字段描述的是拥有该beacon的组织。
Major和Minor字段包含了位置信息,Major字段通常指示了建筑物,Minor指示的是建筑物里的位置信息。
Tx Power字段用于估计用户和beacon之间的距离。
详细见:
https://developer.apple.com/ibeacon/Getting-Started-with-iBeacon.pdf
AltBeacon
AltBeacon和iBeacon较为相似,二者之间的比较如上图。
AltBeacon帧的Company ID是Radius Network公司的。其定义了Beacon Code。AltBeacon使用四个字节而不是Major和Minor两个部分。
http://altbeacon.org/
Eddystone
Google的Beacon实现方式是Eddystone。其广播包并不包括Manufacturer 数据域。其使用“Complete List of 16-bit Service UUID 。具体来说,值为0xFEAA的服务UUID在服务UUID集合里,服务数据在其后面。
See https://github.com/google/eddystone
Beacon 应用程序
开发者有两大类的API可以选择。一种是使用平台提供的原生BLE API去周期扫描和捕获感兴趣的从beacon发送来的广播包。另一类是使用beacon厂商或者帧格式定义者提供的beacon API。
Radius Network提供基于Android的AltBeacon API。
距离估计
通过信号强度和路径损耗估计计算和beacon的距离。信号强度称为RSSI(Received Signal Strength Indication)。
路径损耗计算方式见维基百科https://en.wikipedia.org/wiki/Free-space_path_loss
Android Beacon Application
该应用程序显示扫描到的beacon的如下信息:
- manufacturerUUID(Beacon ID的前16个字节)
- 其它数据(BEACON ID的后4个字节)
- 当前的RSSI以及参考RSSI。
设置应用程序权限
<uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
测试用例的log如下:
示例代码下载地址:
- 蓝牙之二十三-beacon
- 室内定位之蓝牙Beacon-部署方案
- 室内定位之蓝牙Beacon-部署方案
- 室内定位之蓝牙Beacon-部署方案
- 手机蓝牙搜索Beacon设备
- 蓝牙之十三-HFPclient JNI层
- 蓝牙之二十一-蓝牙免弹窗配对
- shell十三问之二
- 蓝牙之二十二-BLE
- 可移动Beacon(蓝牙)现场布控小结
- Cobalt Strike之DNS Beacon使用记录
- 我和我女朋友之二十三
- 二十三 设计模式之桥梁模式
- Android 学习笔记二十三之 ActionBar
- linux学习之二十三---共享内存
- javaee学习之路(二十三)JFreeChart
- Linux kernel 分析之二十三:文件系统
- MSSQL之二十三 实现HTTP端点
- POSIX 标准
- 微信多开App操作流程
- matlab 高阶(一) —— assignin与evalin
- android调用音乐播放器,三种方法
- Java特性之多态详解
- 蓝牙之二十三-beacon
- Mybatis 学习
- [已解决]nginx: [emerg] invalid number of arguments in "root" directive in /etc/nginx/nginx.conf:45
- 4 编 码
- C++简单计算器实现(四则运算加括号)
- 【React Native开发】React Native进行签名打包成Apk(5)
- 贪心算法 汽车加油问题
- 集成百度地图sdk小白操作
- 历周移动开发周刊