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

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

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

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

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

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

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

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

参考:
在iOS和Android上最大化BLE吞吐量
最大化BLE吞吐量第2部分:使用更大的ATT MTU

蓝牙透传模块是基于蓝牙芯片的基础及目前物联网数据传输的市场需求研发推出的,在产品性能和使用便捷性上更具优势,且目前市场上的蓝牙透传模块基本都支持二次开发,像SKYLAB的SKB369/SKB501都支持定制开发,既能满足产品智能化的功能性需求,也可以有效缩短产品研发周期,因此多数企业在进行产品智能化升级的时候会优先选择蓝牙透传模块。

数据透传蓝牙模块

无线模块是连接物联网感知层和网络层的关键环节,属于底层硬件环节,具备其不可替代性,是物联网智能终端得以联网和定位的载体。


无线模块按照可联网和能定位的两种功能分为通信模组和定位模组,定位模组则主要是基于卫星定位的GNSS模块,通信模组按照不同通信技术分为蜂窝类和非蜂窝类;蜂窝类通信模组按照不同技术又细分为2/3/4/5G和LPWAN中的NB-IOT、e-MTC,非蜂窝类通信模组又细分为WiFi、蓝牙、Zigbee以及LPWAN中的LoRa和sigfox。专业无线模块研发厂家SKYLAB研发生产的无线模块就包括了定位模组GNSS模块中的单频GPS模块、北斗模块,双频北斗模块;通信模组中的WiFi模块、蓝牙模块、WiFi+蓝牙二合一组合模块等。

GNSS模块:关注过SKYLAB的物联网工程师们可能也看过SKYLAB的产品发展史。SKYLAB最早就是做高精度测量仪器的,2004年开始研发定位模块,十余年专注定位研究,其研发推出的GNSS模块产品线极为丰富,包括了工程师熟知的单GPS模块、北斗模块(单北斗模块,单GLONASS模块,GPS+北斗模块,GPS+GLONASS模块)、北斗三号定位模块、授时模块、、高精度定位模块、惯性导航模块双频多模定位模块、GNSS+天线一体化模块、G-Mouse等,应用领域涵盖了智能穿戴、车载导航、智慧城市、智能交通、无人机、精准授时等。

WiFi模块:WiFi是一种基于IEEE 80211标准无线协议的允许电子设备连接到一个无线局域网(WLAN)的技术,通常使用24G 、5G射频频段。WiFi适合大数据量、短距离、稳定性相对较差,主要应用于家用和商业应用!SKYLAB在2009年开始研发WiFi模块,WiFi软件、硬件研发团队10年努力,最终为物联网市场输出多款高性能的WiFi模块,用于视频传输的USB接口WiFi模块、用于数据透传的IoT WiFi模块、用于路由器方案的AP/Router WiFi模块、用于无人机远距离图传的大功率WiFi模块等,应用领域涵盖了物联网智能家居、智慧工厂、智能交通、无人机、智慧医疗等。

蓝牙模块:蓝牙模块按功能分为蓝牙数据模块和蓝牙语音模块,其中SKYLAB研发推出的BLE蓝牙模块属于蓝牙数据模块,仅支持数据传输,不支持音频传输。SKYLAB在2014年组建了蓝牙模块的研发团队,至今的研发成果也极为喜人,从单纯的BLE蓝牙模块产品、蓝牙方案延伸到时下备受关注的蓝牙室内定位方案。应用领域也是从智能穿戴、智能家居、智慧医疗延伸到物联网各个行业领域的室内定位应用中。


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

原文地址: http://outofmemory.cn/dianzi/10438838.html

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

发表评论

登录后才能评论

评论列表(0条)

保存