• 赚钱入口【需求资源】限时招募流量主、渠道主,站长合作;【合作模式】CPS长期分成,一次推广永久有收益。主动打款,不扣量;

iOS如何检测AirPods的信号强度?

iOS cps12345 9个月前 (11-19) 234次浏览 0个评论

解决

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)))
   }
}

影响RSSI的因素

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

它也可能由于多种因素而变化,包括感测/发射无线电的功率和灵敏度以及环境因素(您在室内,室外?附近有很多人吗?是否有嘈杂的无线环境,以及依此类推)。

但是,问题在于信标信号实际上是无线电波,并且可以被金属,墙壁,水等吸收。由于它们在常用的2.4GHz频带中发送无线电信号,因此从信标接收到的信号强度变化很大,原因是干扰。

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

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

TxPower通常称为发射功率

如何从BLE广播数据获取TxPower

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

根据Apple文档,CBAdvertisementDataTx中的CBAdvertisementDataTxPowerLevelKey的值

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

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

您必须 登录 才能发表评论!