查看: 2182|回复: 0

[技术交流] 蓝牙欢乐爬坑行之四---关于安卓系统ble提高速度和稳定性

[复制链接]

108

主题

163

帖子

618

积分

利尔达员工

Rank: 9Rank: 9Rank: 9

积分
618
发表于 2018-12-21 16:40:14 | 显示全部楼层 |阅读模式
方法一:采用定时发送(不太推荐)
对于一些初学者来说,当手机跟BLE设备连接找完服务之后,会采用定时调用writeCharacteristic接口发送数据,如果想提高发送速度,就会缩短定时时间。笔者也做过相关实验,结果如下:



从上图可以看出,这种定时发送方式在速度快且设备连接间隔比较短的情况下很容易产生丢包,真正原因是受限于手机底层硬件,速度快的时候有些包未发送出去。这个是我们不期望看到的情况。下面推荐方法二。

方法二:采用回调方式发送(推荐)
当调用发送数据writeCharacteristic接口后,正常情况下会收到onCharacteristicWrite的接口回调,表示数据已经发出去了,接下来我们可以发送下一包数据。这样可以保证发送数据的稳定性。那如何提高速度呢?当android api大于等于21时候,我们可以调用一个修改MTU的接口,即尝试修改每包的数据长度,该值范围可以是23~252字节,3字节头+用户数据为20~249字节,如下图所示:



该接口有一个回调,如下所示:



返回的MTU就是手机和设备协商后可以支持发送的一包的最大数据。笔者在自己的小米8手机上面测试,瞬时发送速率可以达到100KB/s,平均速度可以达到40KB/s。附部分手机型号与我们公司E66蓝牙透传模块的速度表供参考:



最后,笔者再传授一个技能包,蓝牙一个连接间隔可以发送3~4包数据,所以理论上大家可以用这个技巧再提升发送数据的速度,期待大家来挑战!




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表