首页 > 解决方案 > BLE Android API - onCharacteristicChanged() 上的数据包丢失和数据频率下降并带有通知

问题描述

我正在使用 ble nordic thingy52 devices,我想EF680406-9B35-4933-9B10-52FFA9740042从我的 Android 设备中读取数据(目前只有 rawdata )。

Nordic 设备在原始数据特性上允许最大采样率为 200Hz。尝试通过覆盆子连接时,我验证了实际上启用 rawdata 通知我以 200Hz 接收数据。我需要在我的安卓设备(Oneplus6)上做同样的事情。

我尝试了不同的库(RxJavaBLE、Nordic-Android-BLE、KABLE)并且我尝试直接使用 Android BLE API,但问题是即使我设置了我能找到的所有参数'没有达到200Hz的频率,但最多160Hz-180Hz,并且几秒钟后数据接收的频率急剧下降到30-40Hz。

我与设备的连接:

device.connectGatt(context, false, callback, BluetoothDevice.TRANSPORT_LE)

(我尝试过使用和不使用BluetoothDevice.TRANSPORT_LE

之后,一旦连接,我调用经典的 discoveryService() 并在内部完成后onServicesDiscovered()尝试设置:

requestMtu(device, 23)
requestConnectionPriority(BluetoothGatt.CONNECTION_PRIORITY_HIGH)

我尝试了 MAX_MTU 和 MIN_MTU (23),我也尝试使用连接优先级和不使用,但采样频率仍然没有差异。

onCharacteristicChanged()启用 rawdata 通知后,我会在方法中读取它们。

我还尝试设置连接参数的最小值并在测试期间改变它们,例如:

advertising interval 20ms
advertising timeout 0ms
min connection interval 7,5ms
max connection interval 20ms
slave latency 0
supervision timeout 1000ms

但是,我仍然无法获得 200Hz 作为 onCharacteristicRead 内部接收到的数据的频率,尤其是在几秒钟后,频率急剧下降。问题的原因可能是什么?如何以更恒定的方式尽可能接近 200Hz?

与使用 Nordic-Raspberry 连接执行的测试相比,是我的 Android 设备丢包吗?android蓝牙缓冲区有问题吗?

我在手机和其他手机(三星和 realme)上运行的测试都受到同样问题的影响。我尝试在互联网上搜索类似的问题,但找不到我的问题的答案。

我感谢任何答案和帮助,谢谢

标签: javaandroidkotlinbluetoothbluetooth-lowenergy

解决方案


推荐阅读