我试图提高带有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。