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

文章目录

    继续 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 聊聊,或者关注我的个人公众号“大象工具”, 查看更多联系方式