繁体   English   中英

如何自定义 Android BLE(蓝牙低功耗)gatt 传输速度?

[英]How can I customize Android BLE (Bluetooth Low Energy) gatt transfer speed?

我正在构建一个使用 BLE 技术传输图像的应用程序。 图像不需要立即传输,因此在阅读了一些文档后,我得出结论,1-3 Mbit/s 是一个合理的选择。

(From Wikipedia)

Distance/Range <100 m (<330 ft)
Over the air data rate  125 kbit/s – 1 Mbit/s – 2 Mbit/s
Application throughput  0.27-1.37 Mbit/s [38]

然而,使用 BLE 进行的实际测试显示传输速率非常慢。 (几乎 100 字节/秒)我正在测试,

  • 两款最新更新的 Android 手机:三星 Galaxy 8、三星 Galaxy Note 10。
  • 使用 IntelliJ 进行调试

为了提高传输速率,我使用以下代码将缓冲区大小从默认值更改为 500 字节。

 gatt.requestMtu(CommonConstants.FILE_BUFFER_SIZE);
 @Override
 public void onMtuChanged(BluetoothGatt gatt, int mtu, int status) {
    Log.e("ERROR", "stats=>" + String.valueOf(status));
    Log.e("INFO", "CONNECTED");
    Log.i("ERROR", "Connected to GATT server.");
    Log.i("ERROR", "Attempting to start service discovery:" + gatt.discoverServices());
 }

但是,更改最大传输单位并没有改变数据传输的速率。

  • 关于数据传输速度,我错过了 BLE 的哪些内容?
  • 增加 MTU 不应该提高数据传输速度吗?

当我将有效负载长度硬编码为20 个字节并且传输 1MB 的文件花费了太长时间时,我遇到了同样的问题。 所以,我读到了MTU

MTU(最大传输单元) :MTU 指定在单个写操作中可以发送的最大字节数。

仅仅请求MTU不会加快传输时间。 requestMtu()将简单地返回在设备上写入时可以发送到其他设备的最大字节数。

要加快进程,您需要更新要发送到连接设备上的有效负载。

假设您当前的字节以100 字节/秒的速度发送:

总字节数:5000 字节

有效载荷长度:100 字节

1次写操作:100字节/秒

总写入操作为:5000/100 = 50 秒

现在假设从设备请求MTU值后,它是250字节,所以再次:

总字节数:5000 字节

有效载荷长度:250 字节

1次写操作:250字节/秒

总写入操作将是:5000/250 = 20 秒// 看到时间现在减少了。

那么,如何实现这一目标:

1:连接设备

2:请求MTU值(最大512,它会返回设备支持的MTU值。大多数情况下是251,但只是为了信息3字节用于内部目的,所以最大大小为MTU-3 )

3:使用此MTU值创建有效负载

4:做写操作

具有短连接间隔的大 MTU 通常会提供最佳性能。 如果两个设备都支持 LE 数据长度扩展和 2 Mbit/s PHY,那么您将把性能提高到最大值。

请参阅https://www.novelbits.io/bluetooth-5-speed-maximum-throughput/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM