Я пытаюсь увеличить скорость передачи между микроконтроллером с модулем Bluetooth LE BC118 ( сервер ) и моим устройством Android.Есть ли способ заставить Android Bluetooth LE метод onCharacteristicChanged () вызываться чаще?Если нет, то как мне увеличить скорость передачи?
Модуль BC LE для Bluetooth LE на стороне сервера установлен в прозрачный режим, а скорость передачи составляет 9600. На стороне Android я должен отправлятьбайтовый массив запроса (например, «PIA \ r») к серверу, и сервер должен отправить обратно требуемую информацию.Я настраиваю метод onCharacteristicChanged () для чтения и распечатки всех полученных данных в журнале.Здесь я обнаружил, что скорость Bluetooth-гатта, уведомляющего меня, медленная.Я могу получить около 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, и скорость извлечения примерно вдвое превышает текущую скорость.Я ожидаю то же самое для Bluetooth LE.
Я предполагаю, что причина низкой скорости передачи:
1. Я пропустил какую-то настройку при подключении к услуге BLE или настройке уведомлений, ИЛИ
2. Скорость передачи данных модуля Bluetooth BC118 недостаточно высока, ее следует установить равной 115200.