iOS如何检测类似于Airpods的蓝牙信号强度?
Posted
技术标签:
【中文标题】iOS如何检测类似于Airpods的蓝牙信号强度?【英文标题】:How can iOS detect bluetooth signal strength similar to Airpods? 【发布时间】:2017-07-18 17:28:10 【问题描述】:AirPods 和 iPhone 似乎可以在非常敏感的层面上进行通信。将 AirPods 移动到靠近设备(1 英尺远)会触发 iPhone 做出反应。
iPhone 真的可以如此准确地检测蓝牙信号吗?我现在正在使用蓝牙,但我似乎无法达到这种信号灵敏度水平。
【问题讨论】:
确定使用RSSI。请参阅:***.com/questions/13705647/… 另外,请记住,AirPods 包含一个独特的 Apple 蓝牙芯片,允许配对“正常工作”。 我对 airpods 不熟悉,但 Apple 可能也在蓝牙中使用 nfc(或类似的东西)。 它可能已经完成了,不是在核心蓝牙框架级别,而是更接近与 W1 芯片通信的物理层。因此使用应用程序无法访问的射频信号信息。不仅仅是框架处理的 RSSI。 【参考方案1】:他们曾经有一些额外的措施来找出距离。正如 cmets 中的 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 功率级别时才可用)。
根据苹果文档,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
如果您覆盖信标(例如,有人挡在您和信标之间),RSSI 会下降。也就是说,您仍然在相同的距离内,但 RSSI 下降了——因此,如果您根据 RSSI 估算距离,那么距离会上升,而您不会移动一英寸。
以上许多解释取自其他网站。
我希望它可以满足您的需求!
【讨论】:
所以...我们可以简单地在我们自己的应用程序中使用该公式吗?而我们将能够确定类似于 AirPods 的距离?我们如何在 ios 上获得 TXPower? @Saranjith 我正在使用上面的公式,但我没有得到有效的响应。 Lock 离我的设备很近,但它仍然给我 7000 左右的值。我们需要转换这个值吗?以上是关于iOS如何检测类似于Airpods的蓝牙信号强度?的主要内容,如果未能解决你的问题,请参考以下文章