Android 低功耗蓝牙(Ble) 开发总结

Android 低功耗蓝牙(Ble) 开发总结,第1张

Android 从 4.3(API Level 18) 开始支持低功耗蓝牙,但是只支持作为中心设备(Central)模式,这就意味着 Android 设备只能主动扫描和链接其他外围设备(Peripheral)。从 Android 5.0(API Level 21) 开始两种模式都支持。

低功耗蓝牙开发算是较偏技术,实际开发中坑是比较多的,网上有很多文章介绍使用和经验总结,但是有些问题答案不好找,甚至有些误导人,比如 :获取已经连接的蓝牙,有的是通过反射,一大堆判断,然而并不是对所有手机有用,关于Ble传输速率问题的解决,都是默认Android每次只能发送20个字节,然而也并不是,,,下面进入正文。

这里用的是 Android5.0 新增的扫描API,

这里说一和辩下,如果做蓝牙设备管理页面,可唤春缺能区分是否是已连接的设备,网上又通过反射或其他挺麻烦的 *** 作,也不见得获取到,官方Api 就有提供

与外围设备交互经常每次发的数据大于 mtu的,需要做分包处理,接收数据也要判断数据的完整性最后才返回原数据做处理,所以一般交互最少包含包长度,和包校验码和原数据。当然也可以加包头,指令还有其他完整性校验。下面分享几个公用方法:

我自己封装的一个BleUtil ,因为涉及跟公司业务关联性太强(主要是传输包的协议不同)就先不开源出来了,如果这边文章对大家有帮助反馈不错,我会考虑上传个demo到github供大家使用,

在这先给大家推荐一个不错 Demo ,里面除了没有分包,协议,和传输速率。基本的功能都有,而且调试数据到打印到界面上了。最主要是它可以用两个个手机一个当中心设备一个当外围设备调试。

首先传输速率优化有两个方向,1 外围设备传输到Android 。2 Android传输到外围设备。

我在开发中首先先使用上面那位仁兄的demo调试,两个Android 设备调试不延时,上一个成功马上下一个,最多一秒发11个20字节的包。

后来和我们的蓝牙设备调试时发现发送特别快,但是数据不完整,他蓝牙模块接收成功了,但是透传数据到芯片处理时发现不完整,我们的硬件小伙伴说因为 波特率 限制(差不多每10字节透传要耗时1ms)和蓝牙模块的buff (打印时是最多100byte,100打印的)限制,就算蓝牙模块每包都告诉你接收成功,也是没透传完就又接收了。后来通过调试每次发20K数据,最后是 Android 发是 20字节/130ms 稳定。给Android 发是 20字节/ 8ms 。 (天杀的20字节,网上都是说20字节最多了)

后来看了国外一家物联网公司总结的 Ble 吞吐量的文章(上面有连接),知道Android 每个延时是可以连续接收6个包的。就改为 120字节/ 16ms (为啥是16ms,不是每次间隔要6个包吗,怎么像间隔两次,这时因为波特率影响,多了5个包100字节,差不多 我们的单片机森前透传到蓝牙模块要多耗时不到10ms )

而Android 发数据可以申请 我们设备的mtu 来得到最多每次能发多少字节。延时还是130ms,即:241字节/ 130ms 提高12倍,这个速度还可以。

根据蓝牙BLE协议, 物理层physical layer的传输速率是1Mbps,相当于每秒125K字节。事实上,其只是基准传输速率,协议规定BLE不能连续不断地传输数据包,否则就不能称为低功耗蓝牙了。连续传输自然会带来高功耗。所以,蓝牙的最高传输速率并不由物理层的工作频率决定的。

在实际的 *** 作过程中,如果主机连线不断地发送数据包,要么丢包严重要么连接出现异常而断开。

在BLE里面,传输速度受其连接参数所影响。连接参数定义如下:

1)连接间隔。蓝牙基带是跳频工作的,主机和从机会商定多长时间进行跳频连接,连接上才能进行数据传输。这个连接和广播状态和连接状态的连接不是一样的意思。主机在从机广播时进行连接是应用层的主动软件行为。而跳频过程中的连接是蓝牙基带协议的规定,完全由硬件控制,对应用层透明。明显,如果这个连接间隔时间越短,那么传输的速度就增大。连接上传完数据后,蓝牙基带即进入休眠状态,保证低功耗。其是1.25毫秒一个单位。

2)连接延迟。其是为了低功耗考虑,允许从机在跳频过程中不理会主机的跳频指令,继续睡眠一段时间。而主机不能因为从机睡眠而认为其断开连接了。其是1.25毫秒一个单位。明显,这个数值越小,传输速度也高。

蓝牙BLE协议规定连接参数最小是5,即7.25毫秒;而Android手机规定连接参数最小是8,即10毫秒。iOS规定是16,即20毫秒。

连接参数完全由主机决定,但从机可以发出更新参数申请,主机可以接受也可以拒绝。android手机一部接受,而ios比较严格,拒绝的概率比较高。

参考:

在iOS和Android上最大化BLE吞吐量

最大化BLE吞吐量第2部分:使用更大的ATT MTU

蓝牙耳机5.3,它是慧指薯第5代第5代的第第三前者第3个产品,嗯,相对而言这个就是性能还是比较强的,因为它已经发展第5代了,它那个接收信号能力它是更强的,当然当然了,它那个相对音质来说,还是不如那个ucl机的,他相对逗亩而言嗯,还是差点儿,但是只要知道你买的贵一点,他是够好的

蓝牙低功耗(BLE)功能,是利用蓝牙低功耗宏神盯特性新发展的技术。

手机上要利用蓝牙低功耗技术,一般是通过 BLE 配件产商发布的 BLE 配件和其配套 APP,配合使用。

比如:BLE 运动手环、运动手表、体重计、计步器、智能腕带等蔽和。

BLE低功耗蓝牙具有以下要求的应用:

1.通信距离长达100米左右。很多低功耗蓝牙需要使用纽扣电池运行。很多的物联网设备需要使用标准纽扣电池运行很多年。BLE低功耗蓝牙可实现超低的峰值、均衡和空闲模式的功耗。另外,低占空比设备还能节省更多电能。

2.多智能厂商互 *** 作性。作为一个标准协议,BLE低功耗蓝牙与此前的蓝牙版本一样,也得到了主设备制造商的广泛采用。也有很多的物联网从设备也支持BLE低功耗蓝牙。安卓、iOS、Windows 10、Linux等主流 *** 作系统均原生支持BLE低功耗蓝牙。预测,到2020年,95%的智能手机都将支持BLE低功耗蓝牙。而这个生态系统将有助于实现多厂商互 *** 作性。

3.BLE低功耗蓝牙是搭建集体、家庭、个人网络的最佳选择,可通过无线方式将供电型智能设备连接至手机或计算机。因此,越来越多的智能穿戴设备、计算机/手机外设和医疗监测设备将BLE低功耗蓝牙视为了首选通信协议。在蓝牙技术联盟的网站上也列出了很多不同支持智能蓝牙协瞎猛议的产品和蓝牙智能设备产品。这直接表明了BLE低功耗蓝牙通信协议在物联网应用领域的重要性。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12496346.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存