2

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

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%。有什么我想念的吗?谢谢

4

2 回答 2

1

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

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

我已经测试了该解决方案,它工作正常。(例如校正后得到的正值现在类似于负值,例如我读到 -44 -45 -43 84 82 校正后变为 -44 -45 -43 -44 -46:)

于 2014-10-23T18:57:12.633 回答
0

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

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

于 2014-10-17T01:29:01.680 回答