首页 > 学院 > 开发设计 > 正文

蓝牙低功耗(BLE)

2019-11-09 15:34:48
字体:
来源:转载
供稿:网友

一、简介

蓝牙低功耗(BLE)是在Android在4.3(API 18)中引入的。与经典蓝牙相比具有低延迟、低功耗、低吞吐量等优点。蓝牙通信之间遵循主从关系


二、概念:

这里写图片描述

GATT(Generic Attribute PRofile):GATT配置文件作为通用规范,用于在ble链路上发送和接收数据块。配置文件是设备如何在特定的应用程序中工作的规格说明。一个设备可以实现多个配置文件

ATT(Attribute Protocol):每个属性通过一个唯一的统一标识符(UUID)来实现,每个String类型的UUID使用128 bitb标准格式。

Service:是Characteristic的集合,每个Service代表从机的一种能力。

Characteristic:一个Characteristic包括一个单一的变量和N个用来描述Characteristic变量的Descriptor。

Descriptor:用来描述Characteristic变量的属性。

注: Profile可以理解成一种规范,存在于从机中,一个低功耗蓝牙可以包括多个Profile。 通过UUID可以直接找到对应的Service; 通过UUID可以直接找到对应的Characteristic; 通过UUID可以直接找到对应的Descripter;


三、踩过的坑

1. 发送长度问题

问题: 蓝牙低功耗单次发送的数据量大于 20 字节, Android 只能接收前20个字节的数据,后面的数据将会丢失 。

解决方案:分包发送 分包发送时不要在当前线程做阻塞处理。并且一定要在上次发送数据成功写入(onCharacteristicWrite()回调执行)之后再去进行第二次写操作,否则第二次写操作将会失败。

2. 设备连接不上

问题:有时设备无法连接蓝牙? 解决方案: 1) 主端一次性可同时连接6-7个蓝牙设备进行通信,因此可能是中心设备连接的设备数过多。 2) GATT连接是独占的,一次只能被一个中心设备连接,一旦被连接,该外设会停止广播,因此周围设备是否已经被其他中心设备所连接。

3. 蓝牙回调

问题: Android4.4的蓝牙回调不在主线程。 解决方案:更新界面时,需切换到主线程。

4. 权限问题

Android M中必须拥有定位权限才能扫描BLE设备。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表