CoreBluetooth广告检测时间

Nic*_*k T 7 iphone bluetooth ios core-bluetooth bluetooth-lowenergy

此问题已在十月进行了讨论回到这里.这是一个新问题,因为CoreBluetooth相当新,从那以后可能会发生一些变化.

我每2秒就有一个BLE设备广告.使用以下命令启动扫描:

[self.CM scanForPeripheralsWithServices:nil options:0]
Run Code Online (Sandbox Code Playgroud)

最常返回(通过centralManager didDiscoverPeripheral回调)大约2s到4s之后.(CM是我的CentralManger)

但是,大约30%的时间,扫描需要10到18秒.已禁用附近设备中的WiFi和BT以尽可能清除频谱.扫描时间似乎与RSSI无关.在iPAd3旁边是-40dB,在另一个房间大约5米远时是-70dB.

[self.CM stopScan]; 
Run Code Online (Sandbox Code Playgroud)

在scanWithPeripherals之前调用,因为它减少了真正长时间等待的发生.

没有连接.没有要求提供任何特征或服务数据.广告数据就足够了.

有一个有用的TI 演示应用程序.这给出了类似的结果(实际上稍微差一点,因为它没有进行任何stopScan调用)

如果有任何事情似乎延长了发现时间,则可以在此Stackoverflow中看到CBCentralManagerScanOptionAllowDuplicatesKey选项.

显然,下一步是使用一些更高级的BT嗅探器/广告生成工具来进一步表征这个CoreBluetooth响应.

这是另一个有用的SO问题,但没有详细说明响应时间.

小智 11

CoreBluetooth没有连续收听.它与蓝牙经典和Wifi共享硬件资源.

基本上你必须"幸运"才能收到广告包."幸运",因为2个非同步系统的2个滑动窗口必须相互碰撞.如果CoreBluetooth在10%的时间打开它的BLE窗口并且您已经设置了广告间隔而不知道确切的时间,那么它将/可能需要10倍的广告间隔.

一个建议是在前30秒(例如20ms,你应该在第一个活动的CoreBluetooth窗口中发现它)快速<快速<,然后减慢到Apple指定的间隔.2,00秒不是一个好数字.

请参阅此处的指南:https: //developer.apple.com/hardwaredrivers/BluetoothDesignGuidelines.pdf

第18页

广告时间 间隔应仔细考虑蓝牙配件的广告时间间隔,因为它会影响发现和连接性能的时间.对于电池供电的配件,还应考虑其电池资源.要被Apple产品发现,蓝牙配件应首先使用推荐的20 ms广告时间间隔至少30秒.如果在最初的30秒内未发现,则配件可以选择节省电池电量并增加其广告间隔.Apple建议使用以下较长间隔之一来增加Apple产品的发现机会:

645 ms 768 ms 961 ms 1065 ms 1294 ms

因此,如果必须节省电池,请尝试1294 ms.