java - 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)上运行的测试都受到同样问题的影响。我尝试在互联网上搜索类似的问题,但找不到我的问题的答案。
我感谢任何答案和帮助,谢谢
解决方案
推荐阅读
- django - 如何在地图上显示空间字段?
- excel - vba 键暂停/恢复 - 切换
- javascript - 有没有“最好”的方式来承诺和调用方法函数?
- datepicker - react-semantic-ui-datepickers 在 redux-form 中没有表单值
- azure - What is the difference between Continuous deployment trigger and Pull request trigger?
- html - 位置未触发溢出:绝对
- python - 将字符串转换为十六进制并在 Python 中通过串行发送
- java - 递归问题的测试用例中的错误
- assembly - 优化第 7 代英特尔酷睿视频 RAM 中的递增 ASCII 十进制计数器
- python - 如何使用 inspectdb 命令从 oracle 表同义词创建 Django 模型