Android BLE 蓝牙控制硬件设备(二)调大 MTU,一次读取所有配置数据

更新日期: 2023-07-07 阅读次数: 1157 字数: 381 分类: Android

继续 Android 平板 App 控制设备运行的项目。

MTU 是什么

英文全称是,Maximum Transmission Unit。即一次最大可以传输多少字节。

默认情况下是 20 个字节。即,Android App 一次只能从蓝牙控制板那里最多读取 20 个字节的数据。微信小程序中也是同样的状况。

什么情况下需要调大 MTU

例如,一个设备的运行参数多达 50 个,每个运行参数用两个字节表示。 那么即便不使用 CRC 校验码,不使用协议头,要完整读取所有参数都需要 100 个字节。

即需要 5 个 20 字节的数据包才能读完。这样效率太低。

另外一个典型的场景就是 BLE 蓝牙语音对讲。

如何调整 MTU

例如,我想将 MTU 增大到 120 个字节。这里使用 Android Kotlin,只需要发送请求:

gatt.requestMtu(120)

然后,在 BluetoothGattCallback 中监听 MTU 的变化:

override fun onMtuChanged(gatt: BluetoothGatt, mtu: Int, status: Int) {
    println("ATT MTU changed to $mtu, success: ${status == BluetoothGatt.GATT_SUCCESS}")

返回结果

ATT MTU changed to 120, success: true

这代表修改成功。

需要注意的是,由于固件原因,这个值不一定能修改成功,所以一定要判断回调中的值。

明天早上要 4:30 起床,送闺女去幼儿园,然后集体去八角会展中心参加幼儿园毕业典礼。今晚就到这里了,睡觉。

参考

  • https://punchthrough.com/android-ble-guide/

关于作者 🌱

我是来自山东烟台的一名开发者,有敢兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式