BLE通讯中write与writeWithoutResponse的使用

在APP和BLE(蓝牙低功耗)通讯中,write和writeWithoutResponse是两种发送数据的不同方法。

writeWithoutResponse方法:APP使用writeWithoutResponse方法发送数据时,是将数据直接发送给蓝牙模块,APP端不需要等待接蓝牙模块的响应,可以继续向蓝牙模块发送下一组数据包。这种方式适用于实时性要求较高的场景,例如传输实时控制指令或传输网络流媒体数据。具体使用方法可以参考安卓APP的代码:

BluetoothGattCharacteristic characteristic = // 获取到Characteristic对象

characteristic.setValue(data); // 设置要发送的数据

characteristic.setWriteType(BluetoothGattCharacteristic.WRITE_TYPE_NO_RESPONSE);

boolean success = bluetoothGatt.writeCharacteristic(characteristic); // 发送数据

write方法:APP使用write方法发送数据时,是将请求包发送给蓝牙模块后,需要等待蓝牙模块的响应;蓝牙模块在接收到数据后,需要给APP发送一个响应包以确认自己收到APP发送的请示包。安卓APP具体使用方法如下:

BluetoothGattCharacteristic characteristic = // 获取到Characteristic对象

characteristic.setValue(data); // 设置要发送的数据

characteristic.setWriteType(BluetoothGattCharacteristic.WRITE_TYPE_DEFAULT);

boolean success = bluetoothGatt.writeCharacteristic(characteristic); // 发送数据

// 等待接收方的响应

while (waitingForResponse) {

// 监听andoid.bluetooth.device.action.GATT_CHARACTERISTIC_WRITE_STATUS广播,判断是否有响应

// 处理响应逻辑

}

这两种方法的选择需要根据实际需求来决定,如果APP和蓝牙模块之间对数据的传输时延要求较高,可以选择使用writeWithoutResponse方法;如果需要确保数据的可靠性和一致性,可以选择使用write方法,并在蓝牙模块收到请求数据后进行相应的响应确认,APP收到蓝牙模块发出的响应确认后可以继续发送下一组数据包,这样就保证了数据的可行性和完整性。

如果要发送的数据比较大的话,使用write方式进行发送,发送时间会变长,体验也会变得差一些;而使用writeWithoutResponse方式进行发送无需等待蓝牙模块的响应,可以持续发送,这无疑可以提高传输的速率,但可靠性需要依赖蓝牙通讯协议层,当写入速度超过蓝牙模块协议处理速度的时候,会导致丢包的现象发生;所以这两种方式的选择除了依据使用经验外还需要根据具体的场景需求来决定。

飞易通自己研发的蓝牙模块通讯协议栈支持两种写入方式,同时对不带响应的快速写入方式进行了改进,能保证在快速写入数据的同时不会有丢包的现象发生。

滚动至顶部