gpt4 book ai didi

java - 无法从 BLE nordic thingy :52 检索 RSSI 值

转载 作者:行者123 更新时间:2023-12-01 14:32:46 26 4
gpt4 key购买 nike

我通过 Android 的 Nordic 库 thingylib ( github ) 连接到 thingy52 并在回调监听器 ThingyListener 中接收有关设备的信息 (例如 onGravityVectorChangedEventonAccelerometerValueChangedEventonGyroscopeValueChangedEvent 等等...)。

我不能做的(而且我找不到如何做)是如何获取有关与设备连接的信息,确切地说是 RSSI 值。

使用 BluetoothLeScannerCompat ,在 onBatchScanResults 扫描回调中,我检测到 thingy52 蓝牙设备及其 RSSI 值,但是如果我设置高扫描频率,例如 .setReportDelay(10),它几乎总是检测不到设备。

我是如何进行扫描的:

private void startBLEScan() {
// set scan
ScanSettings scanSettings = new ScanSettings.Builder()
.setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY)
.setReportDelay(10) // set frequency
.setUseHardwareBatchingIfSupported(false)
.build();

// filter scan by uuid
List<no.nordicsemi.android.support.v18.scanner.ScanFilter> filters = new ArrayList<>();
filters.add(new ScanFilter.Builder().setServiceUuid(new ParcelUuid(ThingyUtils.THINGY_BASE_UUID)).build());

// start scan, this will trigger the scanCallback
BluetoothLeScannerCompat scanner = BluetoothLeScannerCompat.getScanner();
scanner.startScan(filters, scanSettings, scanCallback);
}

private final ScanCallback scanCallback = new ScanCallback() {
@Override
public void onBatchScanResults(@NonNull List<ScanResult> results) {
super.onBatchScanResults(results);

for(ScanResult result : results) {
result.getRssi(); // read RSSI values
}
}
};

我需要以 10Hz100Hz 的频率获取 nordic thingy52 的 RSSI 值,我无法从 ThingyListener 获取 事件。

我该怎么做?提前谢谢你。

我的 ThingyListener 示例:

  private ThingyListener mThingyListener = new ThingyListener() {


@Override
public void onGravityVectorChangedEvent(BluetoothDevice bluetoothDevice, float x, float y, float z) {
// Here I got the data from device... but no RSSI value

};

最佳答案

最后我是这样解决的:

我不使用 ScannerCompact,而是使用 BluetoothGATT:

当我将 nordic 链接到 ThingyLibSdkManager 时,我还将它链接到 GATT:

ThingyListenerHelper.registerThingyListener(getApplicationContext(), mThingyListener, device);
mBluetoothGatt = device.connectGatt(getApplicationContext(), true, gattCallback);

这样,在 mThingylistener 中,我现在可以请求 rssi:

     @Override
public void onGyroscopeValueChangedEvent(BluetoothDevice bluetoothDevice, float x, float y, float z) {

collectedData.put("onGyroscopeValueChangedEvent_x", x + "");
collectedData.put("onGyroscopeValueChangedEvent_y", y + "");
collectedData.put("onGyroscopeValueChangedEvent_z", z + "");

// request rssi from gatt
mBluetoothGatt.readRemoteRssi();
}

现在,以异步方式,您将收到 mBluetoothGatt 中的回调:

   @Override
public void onReadRemoteRssi(BluetoothGatt gatt, int rssi, int status) {
// do some stuff
}

关于java - 无法从 BLE nordic thingy :52 检索 RSSI 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60295545/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com