基于Android系统的低功耗蓝牙技术
2018-02-26胡成
胡成
摘要
近年来随着智能可穿戴设备不断发展,短距离的无线通讯技术显得越来越重要,尤其是具有低待机功耗和运行功耗的低功耗(BLE)蓝牙技术。本文基于Android系统,对低功耗蓝牙技术协议栈、以及开发流程进行了研究分析,从而在Android系统上实现低功耗蓝牙主从设备的通讯。
【关键词】低功耗蓝牙 Android系统 技术协议栈
随着社会经济的发展和人们生活质量的提高,智能可穿戴设备将应用的越来越广泛。目前,各种智能可穿戴设备已经慢慢进入我们的日常生活中,最常见有智能手表、智能手环、智能眼镜等,这些智能可穿戴设备大部分与智能手机绑定,通过蓝牙进行数据共享。低功耗蓝牙低待机功率和运行功率的特点非常符合当前智能可穿戴设备的发展需求。
1 BLE蓝牙协议栈结构分析
BLE蓝牙协议栈分为两个部分,分别是控制器和主机。控制器由物理层(PHY)、链路层(LL)、主机控制接口(HCD组成。主机由逻辑链路控制及自适应协议层(L2CAP)、安全管理层(SM)、属性协议层(ATT)、通用访问配置文件层(GAP)、通用属性配置文件层(GATT)组成。具体的协议说明如下。
1.1 物理层
对于低功耗蓝牙,其物理层运行在2.4GHz全球通用的免许可证频段,总共可使用40个频道,频道间隔为2MHz。
1.2 链路层
用于控制射频设备的工作状态,包括5种工作状态:准备、广播、扫描、启动和连接。
1.3 主机控制接口
为主机和控制器之间的通信提供了一种标准化的接口。
1.4 逻辑链路控制及自适应协议层
用于为更高层提供数据封装服务。
1.5 安全管理层
定义了配对和密匙分发的方式,实现安全连接和数据交换。
1.6 属性协议层
用于所有低功耗蓝牙的数据传输,具有快速、简单的特点。
1.7 通用访问配置文件层
是所有其他配置文件的基础,定义了在BLE蓝牙设备间建立系带链路的通用方法,负责处理设备的接入方式和过程,包括设备发现、链路建立、启动安全功能以及设备配置。
1.8 通用属性配置文件层
定义了使用ATT的服务框架和配置文件(profiles)的结构,相当于ATT层提供给用户开发的接口。
2 Android低功耗蓝牙开发
低功耗蓝牙是在Android4.3版本之后才增加的功能。开发低功耗蓝牙的应用都要遵守GATT协议,具体的开发流程如下所示。
2.1 授权及初始化
要进行BLE应用的开发,必须在AndroidManifest.xml文件中加入相应的开发权限。开发时,首先验证所使用的Android操作系统版本是否支持BLE功能。若支持则还需要检查手机是否具有蓝牙硬件。然后应用程序通过BluetoothManagement类可以获取本地蓝牙适配器,获取适配器之后,需要查看是否开启,可以调用isEnabled()。当返回值为true时,则表示蓝牙设备已经打开,此时可以以ACTION_REQUEST_ENABLE为参数新建一个intent,再使用startActivityForResult调用intent对象开启蓝牙。
2.2 搜索设备
使用BluetoothAdapter类的startLeScan()搜索BLE设备,该方法使用了BluetoothAdapter.LeScanCallback接口作为参数,通过接口中的回调函数得到BIE设备。整个搜索过程会占用一定的系统资源和电能的消耗,在定时搜索后需要调用stopLeScan()停止扫描。
2.3 连接设备
Android手机与B1E设备连接,就是需要与GATT服务器建立连接。可以通过如下示例代码实现。
final BluetoothDevice device=mBluetoothAdapter.getRemoteDevice(“mac字符串”);
mBluetoothGatt=device.connectGatt(mContext,false,mGattCallback);
通过以上代码可以让客户端应用程序与GATT服务器建立连接。其中参数mGattCallback是一个基于GATT服务的回调,需要实现多个回调函数,通过这些回调函数可以将设备的连接状态、服务和特性传递到客户端应用程序的业务层。
2.4 设备通信
设备连接成功之后,可以使用BluetoothGatt类的读写方法对蓝牙的Characteristic进行操作从而实现数据读写。主动读取数据时,mGattCallback中的onCharacteristicReado会被执行,通过mBluetoothGatt.readCharacteristic(characteristic)读取数据。使用通知方式实现数据读取时,则当从设备数据有变化,onCharacteristicChanged()会被执行,提供更新的数据。寫数据时通过mBluetoothGatt.writeCharacteristic(characteristic)写入,此时需要先将数据字节数字用setValue()写入到Characteristic中。
3 结束语
目前许多智能可穿戴设备备受人们的欢迎,搭载于智能手机的Android操作系统,可以通过低功耗蓝牙控制智能可穿戴设备。报告显示,Android操作系统已经占领了全球智能移动手机最大份额,未来基于Android操作系统的智能可穿戴设备具有巨大的市场前景,低功耗蓝牙技术也将会有广阔的发展前景。
参考文献
[1]孙光宇,张玲玲.Android物联网开发从入门到实战[M].北京:清华大学出版社,2015:112-115.
[2]钱志鸿,刘丹.蓝牙技术数据传输综述[J].通信学报,2012,33(04):143-151.
[3]周进波,张磊,张敏,袁钦鹏.基于Android系统蓝牙开发的研究与实现[J].光学仪器,2013,32(01):35-36.