Android BLE:ScanResult.getTxPower() 和 ScanRecord.getTxPowerLevel() 之间的区别?

问题描述 投票:0回答:2

我对蓝牙 LE 的“传输功率”有点困惑,尤其是在使用 android.bluetooth.le 包时。

有两种不同的方法来获取有关发射功率的数据:

  • ScanResult.getTxPower()
  • ScanRecord.getTxPowerLevel()

developer.android.com 上对它们的解释不是很清楚。

我还查找了其他 BLE 库,感觉“传输功率”和“传输功率级别”有时可以互换使用,例如有些使用称为

getTxPower
的方法来确实接收传输功率级别。

但是,我的理解是,在 Android BLE 中,

ScanRecord.getTxPowerLevel()
返回发送设备上设置的 BLE 传输功率级别。因此,该值本身不依赖于发送和接收设备的距离。 IE。当我扫描时,该值对于同一设备将是恒定的,并且通常设备使用一些“典型”值,例如大约 12 (dBm)

但是

ScanResult.getTxPower()
返回什么?在一些参考文献中,这被定义为 1 m 距离处的 RSSI(有时也称为“校准传输功率”)。这对于给定设备来说也是一个恒定值吗?是厂家设置的吗?或者这是在扫描过程中以某种方式测量的值?

或者这两种方法只是“同义词”并且期望返回相同的值?

我问这个问题是因为我正在使用 Android BLE,但我从未见过在扫描过程中

ScanRecord.getTxPower()
返回除 127 (
TX_POWER_NOT_PRESENT
) 之外的值的设备,而至少有一些设备宣传 TxPowerLevel。我想知道 Android 蓝牙 LE 包的哪个属性对应于其他系统的 BLE 库的哪个属性,例如Windows 或 Mac。

android bluetooth-lowenergy android-bluetooth
2个回答
1
投票

区别在于这些对象/数据包的使用方向。

如果您的应用程序执行蓝牙 LE 扫描,您将收到找到的设备的 ScanRecord,其中可能包含 TxPowerLevel 元素(如果发射器也发送了该元素)。

您使用 ScanResult 对象来指定您的设备通告哪些数据,例如TxPower 元素。


0
投票

这是我对这些值的理解(也是我们的生产应用程序到目前为止没有出现问题的情况):

ScanResult.getTxPower()

这提供了“相对”发送信号强度(以 dBm 为单位)。值 0 表示:默认强度,

4
:更多电量,
-18
:更少电量(但电池寿命更长)。该值通常由制造商设置为
0
,但对于大多数设备,用户可以更改该值以使 BLE 设备适应不同的用例。当测距作为 rssi(传入信号强度)的上下文时,也可以使用它,至少可以比较多个设备。

ScanRecord.getTxPowerLevel()

这是校准后的信号强度,即参考设备在 1 米距离处测得的信号强度(RSSI)(遵循 iBeacon 标准)。值通常在-60 左右。因此,理论上,如果您收到 

rssi

为 -60 的 BLE 广告帧,您可以假设它在 1 米外。实际上,存在相当大的变化:/ 该值由制造商设置,并且

应该
针对每个设备单独校准。实际上,对于同一型号的所有设备,它大多设置为相同的值。 另外:我们找不到

txPower

如何影响

txPowerLevel
的标准。有些设备似乎只是将用户设置的
txPower
添加到
txPowerLevel
,因此当您将
txPower
设置为 -4 时,
txPowerLevel
会变为 -64 - 而其他设备始终提供相同的
txPowerLevel
,无论发生什么变化
txPower
    

© www.soinside.com 2019 - 2024. All rights reserved.