iOS如何检测类似于Airpods的蓝牙信号强度?

时间:2017-07-18 17:28:10

标签: ios swift bluetooth

似乎AirPods和iPhone可以在非常敏感的层面上进行通信。物理靠近设备(1英尺远)的AirPods将触发iPhone做出反应。

iPhone能否真正检测到蓝牙信号?我现在正在使用蓝牙,但我似乎无法达到这种信号灵敏度。

1 个答案:

答案 0 :(得分:24)

他们曾经有一些额外的措施来找出距离。正如hotpaw2在评论

中所注意到的那样

快速解答 - Swift 4.2

func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
if let power = advertisementData[CBAdvertisementDataTxPowerLevelKey] as? Double{
   print("Distance is ", pow(10, ((power - Double(truncating: RSSI))/20)))
   }
}

<强> TL:DR

影响RSSI的因素

RSSI读数不是很稳定,并且高度依赖于环境

它也可能因许多因素而变化,包括传感/发射无线电的功率和灵敏度,以及环境因素(你在里面,外面吗?附近有很多人吗?嘈杂的无线环境或不,等等)。

然而,问题是信标信号实际上是无线电波,并且可以被金属,墙壁,水等吸收。由于它们在常用的2.4GHz频带中传输无线电信号,因此从信标接收的信号强度会有所不同。广泛因为干扰。

查找距离的最常用公式之一是

  

d = 10 ^((TxPower - RSSI)/ 20)

TxPower通常称为发射功率

如何从BLE广告数据获取TxPower

txPower值将在BLE广告数据中提供(仅当广播公司(外围设备)提供其Tx功率电平时才可用。)

根据Apple文档,CBAdvertisementDataTx中的CBAdvertisementDataTxPowerLevelKey

委托访问原始广告数据的方法

optional func centralManager(_ central: CBCentralManager, 
                 didDiscover peripheral: CBPeripheral, 
           advertisementData: [String : Any], 
                        rssi RSSI: NSNumber)

也可以使用BlueCap API

进行访问

了解AirPlay的优势比传统蓝牙更多

https://www.cambridgeaudio.com/blog/airplay

RSSI和距离

根据Link

中的下图

enter image description here

如果你覆盖信标,RSSI将会瘫痪(例如,一个人进入你和信标之间)。也就是说,你仍然处于相同的距离,但是RSSI会下降 - 所以你要在RSSI上建立距离估计,距离就会增加,而不会移动一英寸。

上述许多解释都来自其他网站。

我希望它总结你的需要!