稳重的人字拖 · wpf绑定对象的属性-掘金· 1 年前 · |
快乐的麻辣香锅 · 【typescript入门手册】为什么说js ...· 1 年前 · |
仗义的手术刀 · 因果推断&案例集锦 - 知乎· 1 年前 · |
霸气的煎饼 · excel vba sort ...· 1 年前 · |
想旅行的显示器 · Office ...· 1 年前 · |
我有一个需要一系列信标的项目,我看过很多使用
CLLocationManager
和
CLBeaconRegion
的示例代码。我的问题是,
didRangeBeacons
回调每秒只被调用一次。
虽然我还没有找到任何专门针对信标的代码示例,但我是否正确地认为,CoreBluetooth会让我更多地控制我的应用程序扫描信标的频率?
我的想法是,如果我能够以更高的速度(比如200 My )扫描信标,我将能够在我的过滤函数中使用更多的rssi值,从而在不需要太长时间的情况下获得更准确的接近。我的假设正确吗?
有人能告诉我关于CoreBluetooth与信标一起使用的任何示例代码/教程(如果值得的话)?
如果使用CoreBluetooth来扫描信标而不是CoreLocation,那么检测到的每个广告包都会得到一个回调,而CoreLocation则会收到每秒一个回调。 有两种方法的优点和缺点,因此必须准确了解每种方法是如何工作的,从而做出正确的选择。其优缺点受信标广告率的影响很大,标准的iBeacon广告率为10 Hz。
使用CoreLocation测距
下面的方法将获得每秒一次回调,但只对匹配iBeacon布局的BLE广告和已注册为
CLBeaconRegion
对象一部分的布局中的ProximityUUID进行匹配。当满足这些条件时,无论在该时间间隔内检测到多少信标数据包,每秒钟都会调用以下回调:
locationManager(_ manager: CLLocationManager, didRangeBeacons beacons: [CLBeacon], in region: CLBeaconRegion)
。
CLBeacon
数组中的每个
beacons
对象都有一个
rssi
字段。该字段包含在过去一秒间隔内检测到的所有信标数据包的平均rssi。
如果信标以10赫兹作广告,这个rssi读数将是过去一秒钟接收到的8-10个数据包的平均值(由于无线电噪声、碰撞和干扰,通常只有80%-90%的数据包被接收)。
如果信标的广告频率在1Hz或更低(典型的电池信标,试图节省电力),那么平均只会包含一个rssi读数。(无法知道回调返回的rssi值中有多少检测到了。)
因此,虽然您无法从每个检测中访问rssi值,并且无法控制平均间隔,但您确实可以从多个检测中获得好处,即rssi值是平均的,并且比只有一个读数时的噪声要小。因此, CoreLocation为您提供了与CoreBluetooth相同的准确性,只要您愿意接受它的硬编码平均间隔。
CLBeacon
对象还有用于
accuracy
和
proximity
的字段,这些字段基于在较长时间间隔内过滤的rssi的派生值(实验表明约为20秒)。API中没有对这个平均间隔的控制,对于一些您希望在距离估计中快速更新的应用程序来说,20秒是一个很长的延迟。
基于的CoreBluetooth扫描
这通常是通过设置允许重复结果的标志来完成的:
centralManager.scanForPeripherals(withServices: [], options: [CBCentralManagerScanOptionAllowDuplicatesKey: true] )
当启动上述扫描时,对检测到的每一个蓝牙广告都进行以下回调:
centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber)
此回调中的rssi编号是来自单个数据包检测的原始值。如果你的信标是在10赫兹的广告,你将得到8-10回调每秒在这个方法(同样,不是100%的数据包被接收),你可以平均或过滤你的rssi,无论你喜欢。这为您提供了对使用rssi的细粒度控制,并且可以在任意平均间隔上进行距离估计。
基于上述动机,我开发了开源
iOS信标工具
,它允许使用
CoreBluetooth
检测杆菌,并根据任意指定的平均间隔收集的rssi计算距离估计。
然而,使用
CoreBluetooth
有几个缺点
Copyright © 2013 - 2023 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号: 粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
扫码关注腾讯云开发者
领取腾讯云代金券