【问题标题】:onLeScan callback returns oddly positive RSSI valuesonLeScan 回调返回奇怪的正 RSSI 值
【发布时间】:2014-10-16 22:32:46
【问题描述】:

在 Android 上使用蓝牙低功耗 (BLE) 扫描时,我注意到有时 RSSI 值不正确。 我的代码只是调用了开始扫描函数:

mBluetoothAdapter.startLeScan(mLeScanCallback);

然后我在回调中读取结果并将结果保存在文件中:

 private static BluetoothAdapter.LeScanCallback mLeScanCallback =
        new BluetoothAdapter.LeScanCallback() {
            @Override
            public void onLeScan(final BluetoothDevice device, final int rssi, final byte[] scanRecord) {
                String objScanRec = bytesToHex(scanRecord);
                outStr =  rssi + ";" + objScanRec + ";" + device.getName() + ";" + beaconLocation + ";\n";
                    try {
                        Raw_log.write(outStr);
                        Raw_log.flush();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
//                }

            }
        };

问题是我读取了正 RSSI 值,如果信标在固定距离处也是如此。 例如。我有距离手机(或智能手表)30 厘米的信标,我读取了大约 -45 的值,这是现实的,但也有大约 +80 或 +100 (不现实)的值,这些值大约是测量值的 20%。 有什么我想念的吗? 谢谢

【问题讨论】:

  • 我可能错了,但这就是电磁学的工作原理?您无法获得准确的读数,因为它们受到很多事物的干扰。
  • 嗨,不,你一点都没错,RSSI 值本质上是一个近似值,并不稳定。但我期望的是标称值附近的振荡,比如说从 -45dBm 到 -35dBm,而不是正值,我也得到了 100dBm(正值),这在智能手机中是不可能的(信号的功率将是数百千瓦) [链接]rapidtables.com/convert/power/dBm_to_Watt.htm但感谢您的评论
  • 感谢您的链接!我刚刚查看了有关 rssi 的维基百科详细信息:它显示了从天线吸收的功率。也许读数来自干扰蓝牙的 wifi/移动天线?我知道这些是不同的频率,但是在反弹或发生其他任何事情之后,它们可能会影响蓝牙天线的工作方式吗?
  • @dominik4142 - 不,这是不可能的。这显然是软件/寄存器解释错误,而不是来自无线电硬件的有效信号强度报告。

标签: android bluetooth bluetooth-lowenergy ibeacon-android android-ibeacon


【解决方案1】:

感谢您的帮助,我发现这是仅与 Samsung Gear Live 相关的问题。我想出了这个解决方案:

if(rssi > 0){
  rssi = rssi - 128;
}

我已经测试了这个解决方案,它运行良好。 (例如校正后得到的正值现在类似于负值,例如我读到 -44 -45 -43 84 82 在更正之后变成: -44 -45 -43 -44 -46)

【讨论】:

    【解决方案2】:

    这绝对不正常。我从未见过该回调中的 rssi 值是正数。典型值为 -30 到 -120。

    我怀疑数据写入日志或回读的方式有问题。如果你只是做一个普通的Log.d(TAG, "rssi="+rssi);会发生什么你见过积极的价值观吗?如果是这样,您能否分享一段摘录,以及您用于检测的设备型号和您正在检测的设备?

    【讨论】:

    • 嗨,实际上我也这么认为,但我在调试器和 LogCat 中也看到了正值:10-16 18:49:07.615: D/RSSI SERVICE(1680): Rssi = -45 10-16 18:49:07.725:D/RSSI 服务(1680):Rssi = -45 10-16 18:49:07.825:D/RSSI 服务(1680):Rssi = 77 10-16 18:49:07.925: D/RSSI 服务(1680):Rssi = 77 10-16 18:49:08.035:D/RSSI 服务(1680):Rssi = 79 10-16 18:49:08.135:D/RSSI 服务(1680):Rssi = -53 10-16 18:49:08.245: D/RSSI SERVICE(1680): Rssi = -43 10-16 18:49:08.345: D/BluetoothAdapter(1680): stopLeScan() 设备是三星 Galaxy Gear,但是我在 Nexus 5 上也有这个
    • 以上所有这些读数是否来自同一个检测到的设备?什么操作系统版本在做检测?您能否使用其他 Android 设备进行扫描来重现这些结果?
    • 嗨,这只是一台设备的日志。操作系统为 Android Wear 4.4W.1,内部版本:KGW42N。我在带有 Android L(预览版)的 Nexus 5 和带有 Android 4.4 的 Galaxy S4 上尝试了相同的代码。但我只能在智能手表上重现这个问题。两部手机只返回负值的 RSSI
    • 好吧,很遗憾,这听起来像是智能手表的硬件或驱动程序问题。
    猜你喜欢
    • 2020-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-12
    • 2013-04-26
    • 2013-02-07
    • 2012-06-21
    相关资源
    最近更新 更多