1

我的 BLE 服务器永久测量传感器值,并在每次测量后发送包含 20 字节用户数据的通知。目标是产生尽可能多的吞吐量。

在客户端,接收并处理服务器发送的值。

rxBleConnection.setupNotification(setDescriptorEnableNotification(characteristic))
                .flatMap(notificationObservable -> notificationObservable)
                .observeOn(Schedulers.newThread())
                .buffer(1)
                .subscribe(bytes -> {
                            onNotificationReceived(bytes, buffer);
                        } , throwable -> {
                            // Handle an error here.
                            onNotificationSetupFailure(throwable);
                        }

                ); 

如果我将连接间隔设置为 11.25 毫秒,我会收到所有值。但是,如果我将连接间隔设置为 30ms,我会收到一些值然后关闭连接。

在 Android 日志中,我看到以下消息:

BleGattException 状态=8 (0x8),bleGattOperationType=BleGattOperation{description='CONNECTION_STATE'

为什么连接中断,触发器是什么?

在 BLE 嗅探器的帮助下,这是无法识别的。接受设置的连接参数并开始传输。突然传输结束并出现错误消息。

更新: 已添加 BLE 嗅探器屏幕截图: 在此处输入图像描述

4

5 回答 5

2

30ms,这是你在服务器或安卓中设置的连接间隔?

顺便说一句,在android上你可以设置速度模式

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
    mBluetoothGatt.requestConnectionPriority(BluetoothGatt.CONNECTION_PRIORITY_HIGH);
}
于 2017-05-11T16:42:42.823 回答
0

我想,您的 BLE 套件上的最小连接间隔为 7.5,但现在它在 Android 上已弃用。尝试在您的 BLE 套件上将最小连接间隔设置为 11.25 并设置连接优先级

gatt.requestConnectionPriority(CONNECTION_PRIORITY_HIGH);

其中 CONNECTION_PRIORITY_HIGH = 1

在 onConnectionStateChange 中。当我将北欧的最小连接间隔从 7.5 更改为 11.25 时,它对我有用。

于 2017-05-23T05:55:53.997 回答
0

这是来自 BLE Sniffer 的图像。

BLE嗅探器

于 2017-05-11T20:31:28.200 回答
0

错误 8 表示连接超时。Android方面没有任何问题。问题在于两个蓝牙控制器之间的通信。如果您有嗅探器,那么您应该能够看到谁是发送数据包失败的人。

于 2017-05-11T17:42:45.987 回答
0

我有类似的问题。在 Android 7.0 上,有两种保持连接的方法:

1)如果设备已绑定并且存在具有恒定数据包线程的特征读取回调。如果一段时间内没有数据包,则连接失败。

2)如果设备没有绑定,但我每隔几秒做一次 TXCharacheristic.read。如果一段时间不这样做,则连接失败。

但现在在 Android 7.1.2 中这种方式不起作用。可能是第一种适合您的方法。在您的 Android 设备上,您应该进行绑定,在您的套件上,您应该处理此绑定。在 Nexus 6P 和三星 S7 上它不再工作了,但我没有在其他设备上尝试过。

于 2017-05-16T14:11:00.880 回答