如何在Android中提高蓝牙LE传输速度

时间:2019-07-03 22:15:43

标签: java android bluetooth bluetooth-lowenergy

我试图提高带有BC118蓝牙LE模块(服务器)的微控制器与我的Android设备之间的传输速度。有没有一种方法可以使Android Bluetooth LE onCharacteristicChanged()方法被更频繁地调用?如果没有,应该如何提高传输速度?

服务器端的BC118蓝牙LE模块设置为透明模式,波特率设置为9600。在Android端,我应该将请求的字节数组(例如“ PIA \ r”)发送到服务器和服务器应该发送回所需的信息。我正在设置onCharacteristicChanged()方法来读取和打印日志中所有接收到的数据。在这里,我发现Bluetooth gatt通知我的速度很慢。我平均可以得到350字节/秒的速度。而且看起来通知以恒定的频率发出。

这是我构建的BluetoothGattCallback:

public void connectBluetoothLeDevice(final BleDevice device, final ConnectionCallback cb){
    mBluetoothGatt = device.getDevice().connectGatt(ctx, NO_AUTO_CONNECT, new BluetoothGattCallback() {
        @Override
        public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
            if(newState == BluetoothProfile.STATE_CONNECTED){
                gatt.discoverServices();
            } else {
                cb.onFinishConnect(false);
            }

        }

        @Override
        public void onServicesDiscovered(BluetoothGatt gatt, int status) {
            if(status == BluetoothGatt.GATT_SUCCESS){
                setupUuid(device.getUuid());
                setNotification();
                cb.onFinishConnect(true);
            } else {
                cb.onFinishConnect(false);
            }
        }

        @Override
        public void onCharacteristicChanged(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic) {
            byte[] array = characteristic.getValue();
            //Log.e("msg", byteArrToStr(array));
            addToBuffer(array);
        }
    });
}

private void setNotification(){
    BluetoothGattService service = mBluetoothGatt.getService(service_uuid);
    if(service != null){
        BluetoothGattCharacteristic bluetoothGattCharacteristic = service.getCharacteristic(characteristic_uuid);
        if(bluetoothGattCharacteristic != null){
            mBluetoothGatt.setCharacteristicNotification(bluetoothGattCharacteristic, true);
            BluetoothGattDescriptor descriptor = bluetoothGattCharacteristic.getDescriptor(CCCD);
            descriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);
            mBluetoothGatt.writeDescriptor(descriptor);
        }
    }
}

我尝试将BluetoothGatt设置为高优先级:

mBluetoothGatt.requestConnectionPriority(BluetoothGatt.CONNECTION_PRIORITY_HIGH);

但似乎并没有增加接收速度。

我以前使用的是Bluetooth 2.0,检索速度约为当前速度的两倍。我希望蓝牙LE也有同样的事情。

我认为传输速度低的原因是:
1.连接BLE服务或设置通知时,我错过了某种设置,或者
2. BC118蓝牙模块的波特率不够高,应将其设置为115200。

0 个答案:

没有答案