基于Android系统的低功耗蓝牙应用程序开发
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Biblioteka Baidu
2
2. 1
BLE 应用程序体系结构和关键技术
应用程序体系结构 软件体系结构表示软件系统基础的结构组织方
[5 ]
案, 最常见的是分层结构
。 在分层结构中各层功
能明确, 高层使用低层提供的各种服务, 而低层并不 。 关注高层的存在 采用分层技术通常可以使各类开 · 134·
李侠, 等: 基于 Android 系统的低功耗蓝牙应用程序开发 ForResult( ) 运行一个 Activity 让用户选择是否在一 定时间内开启蓝牙。 2. 3. 3 搜索 BLE 设备 为了搜索 BLE 设备, 必须使用 BluetoothAdapter ERED) ; } broadcas-
作者简介: 李侠( 1977 - ) , 女, 安徽蚌埠人, 硕士, 讲师, 研究方向为嵌入式系统开发 。
· 133·
李侠, 等: 基于 Android 系统的低功耗蓝牙应用程序开发 value 和 de识别码 ) 标识。 每个特征由 properties、 scriptor 字段组成。 Properties 表示是否可读 写; value 表示特征值; descriptor 用于对特征作更详细的描 述。在 Android 4. 3 编程中, 这些概念非常关键, 图 2 显示应用层中的心率规范 ( heart rate profile ) 及相 关概念。 心 率 规 范 由 HRS ( Heart Rate Service ) 和 DIS ( Device Information Service ) 2 个 服 务 组 成。 HRS 由 3 个特征组成, 图 2 只列出了 Measurement Notify 表 特征, 其中 80 表示心率传感器测量出的值, 示此值允许读取。 发者更专注于本层的工作而不需要知道其他层的情 [6 ] 况。传统蓝牙应用程序开发 较复杂, 为简化 BLE 程序开发, 在设计蓝牙 4. 0 的协议栈时就作了考虑。 BLE 应用程序设计为 3 层: 表示层、 业务层与通信 层。表示层处理用户与软件系统之间的交互 , 如选 择连接设备、 断开设备、 显示业务层处理的各种结果 等; 业务层处理问题域中的各种业务, 如对通信层获 取的特征 value 字段值进行统计、 分析, 然后把结果 上传到表示层; 通信层负责与一个或多个 BLE 设备 连接通信并保证向上层及时可靠地提供信息 。 2. 2 设备地位的变化 当一个 Android 手机与一个 BLE 设备交互时, 手机作为中心( Central) 设备存在, 负责扫描、 发现和
1
蓝牙 4. 0 及低功耗技术协议栈
蓝牙 4. 0 是目前最新的蓝牙标准, 它包含了传 统蓝牙、 高速蓝牙和低功耗蓝牙标准, 核心是蓝牙低
收稿日期: 2014 - 03 - 20 基金项目: 安徽省国际科技合作计划项目( 1303063006 )
传感器应用在小型无线电子产品中用于收集特定类 型的信息。 BSR 设备包括手机、 平板电脑、 个人电 脑、 机顶盒及电视机等, 可接受传统蓝牙设备和 BLE 设备发送的数据, 并传送给相应的应用软件, 将数据 转换为有用的信息, 本文将以 Android 4. 3 平台手机 作为 BSR 典型设备进行说明。 蓝牙低功耗技术协议栈如图 1 所示。整个栈由 控制器( Controller) 、 主机( Host ) 和应用程序 ( Apps ) 组成。控制器层表示蓝牙采用的频段、 信道、 调制方 式、 数据包结构和控制流程等; 主机层由逻辑链路控 制适配协议 ( L2CAP ) 、 安全管理协议 ( SMP ) 、 属性 协议( ATT) 、 通用属性规范( GATT) 和通用接入规范 ( GAP) 组成。 应用程序层中定义的各种规范 ( profile) 规定了实现此功能的 BLE 设备向外提供的编 程接口要求。一个 BLE 设备可实现多个应用规范。 GAP 定义了如何发现 BLE 设备并建立与 BSR 设备 的连 接。 应 用 层 的 各 种 规 范 都 是 基 于 GATT 的, GATT 规定了如何发送和接收设备的各种属性值 。 ATT 把属性表示为服务( service ) 的集合。 服务由多 个特征组成, 每个特征由 128 位的 UUID ( 通用唯一
{ broadcastUpdate ( ACTION _ DATA _ AVAILABLE ,characteristic) ; } 发现服务、 读取特 当发生 BLE 设备状态改变、 征和特征更改等事件时, 就会执行上面对应的回调 函数, 每个回调函数中都调用 broadcastUpdate ( ) 函 有 2 种形式: 一种 数, 该函数是自定义的重载函数, 只有 1 个参数表示 Intent, 对接收的值进行广播; 另 一种有 2 个参数, 第 1 个参数表示一个 Intent, 第2 个参数表示接收到的 BLE 的特征, 此函数根据心率 格式规范分析出特征中的 Value 值, 如图 2 所示, 然 后将此值附加到 Intent 中进行广播。 该函数广播出 的值由 应 用 程 序 业 务 层 通 过 mGattUpdateReceiver 中的回调函数接收并进行统计、 排序等处理。 这样 就实现了 BLE 设备数据传递到 Android 手机中的功 能。业务层中相关代码如下: private final BroadcastReceiver mGattUpdateReceiver = new BroadcastReceiver ( ) { public void onReceive ( Context context,Intent intent) { 接收 BLE 传递的值。根据这些值来更 }; 新程序表示层中的用户界面。
[4 ] 功 耗 技 术 ( Bluetooth Low Energy, 简 称 BLE ) 。 BLE 耗电大概是传统蓝牙的十分之一, 低功耗主要 体现在等机功耗的减少、 高速连接的实现和峰值功 率 的 降 低 等 3 个 方 面。 蓝 牙 4. 0 支 持 Bluetooth Smart Ready ( 简称 BSR) 设备和 Bluetooth Smart ( 简 称 BS) 设备。BLE 设备与 BSR 设备进行连接, 作为
蓝牙无线技术是目前使用最为广泛的短距离无 [1 ] 线传输标准之一 。 尽管蓝牙技术联盟 ( Bluetooth SIG) 于 2010 年 6 月就已发布蓝牙 4. 0 技术标准, 但 应用于 Android 智能手机则是从 2012 年 5 月 Galaxy S3 发布开始。随后支持蓝牙 4. 0 的 Android 机型纷 纷发布。但 Android 原生系统不支持蓝牙 4. 0 , 导致 开发者无法开发可以运行在不同品牌不同机型的 Android 应用程序。2013 年 7 月 Android 4. 3 系统发 布, 正式支持蓝牙 4. 0 。 相对于蓝牙 2. 1 或者 3. 0 等传统蓝牙技术的高耗电性, 对于那些采用纽扣电 池供电的小蓝牙外设必须经常更换电池或充电 , 因 此, 蓝牙外设没有得到广泛应用。 蓝牙 4. 0 极低的 运行和待机功耗使一粒纽扣电池可连续工作 1 a。 根据目前安卓设备全球 75% 的占有率和蓝牙 4. 0 外设与安卓设备之间低功耗的连接方式 , 可穿戴设 备及物联网将会得到快速发展。采用传统蓝牙进行 产品开发的文献较多, 但由于 Android 4. 3 发布近 10 个月, 有关开发文献较少, 另一方面蓝牙 4. 0 开 [3 ] 发与传统蓝牙开发技术差别较大 。因此本文首先 简要介绍蓝牙 4. 0 及低功耗技术协议栈, 然后重点 介绍 Android 4. 3 低功耗应用程序分层结构和关键 技术, 最后给出一个应用程序开发实例进行分析 。
图2 心率规范组成
检查并开启 BLE 功能
应用程序使用蓝牙功能时, 首先需要验证手机 操作系统 Android 是否支持 BLE 功能。 如果支持, 则需要检查手机是否具有蓝牙硬件功能 。软件通过 蓝牙 适 配 器 类 BluetoothAdapter 表 示 此 硬 件 功 能。 应用程序与适配器对象进行交互, 获取适配器之后, 需要查看是否开启, 可以调用 isEnabled ( ) 来查询当 前蓝牙设备的开关状态, 如果返回值为 false, 则表示 蓝牙设备没有打开, 这时以 ACTION_REQUEST_ENABLE 为参数新建一个 intent, 然后调用 startActivity-
图1 蓝牙低功耗技术协议栈
如果手机发送数据给测量计, 手机就是服务器, 测量 计是客户机。本文开发的手机应用程序是 GATT 客 户机 程 序, 从 测 量 计 获 取 数 据; 心 率 测 量 计 作 为 GATT 服务器向手机提供测量数据。 2. 3 开发 BLE 应用程序的关键技术 BLE 程序开发的主要内容有用户界面设计、 业
务层数据处理和通信层数据通信。通信层程序实现 的关键 技 术 包 括 BLE 授 权、 开 启 BLE 功 能、 搜索 BLE 外设、 建立连接及通信等。 2. 3. 1 BLE 授权 与普通蓝牙程序一样, 为了使 Android 手机能 够与蓝牙外设通信, 必须要在应用程序的 AndroidManifest. xml 文件中进行授权。 2. 3. 2
连接 BLE 设备; BLE 设备作为外设 ( Peripheral ) 存 在, 负责响应连接。当两者一旦建立联系后, 在进行 通信的 过 程 中, 它 们 的 地 位 就 发 生 了 改 变。 例 如 Android 4. 3 手机和心率测量计的关系; 心率测量计 是符合心率测量计规范 ( Heart Rate Profile ) 的 BLE 外设, 手机上安装支持 BLE 的心率测量应用程序。 当用户握住心率测量计就可以测量出心跳次数 。 如 果心率测量计把测量数据传送给手机, 这时心率测 量计是 GATT 服务器, 手机是 GATT 客户机。 反之,
第 16 卷 第 5 期
重庆科技学院学报( 自然科学版)
2014 年 10 月
基于 Android 系统的低功耗蓝牙应用程序开发
李侠
1
沈峰
2
李德胜
2
( 1. 安徽电子信息职业技术学院软件学院,安徽 蚌埠 233000 ; 2. 安徽科技学院计算机科学与技术系,安徽 凤阳 233100 )
摘 要: 针对 Android 4. 3 开发低功耗蓝牙程序涉及低功耗蓝牙协议栈 、 蓝牙外设及与传统蓝牙开发区别较大等问
题, 从蓝牙低功耗技术协议栈 、 程序分层结构和关键技术等方面进行阐述 。 对于蓝牙低功耗技术协议栈, 应用程序 主要考虑与 GATT 层通信和应用层规范; 程序体系结构设计为分层结构 。 通过实例讨论低功耗蓝牙程序的关键技 术, 程序运行结果表明该系统开发达到了设计要求 。 关键词: 低功耗蓝牙; Android 4. 3 ; 心率测量计; 分层结构; GATT 服务器 中图分类号: TP391. 9 文献标识码: A 文章编号: 1673 - 1980 ( 2014 ) 05 - 0133 - 04
public void onCharacteristicRead ( ) { tic) ; } public void onCharacteristicChanged ( )
tUpdate ( ACTION _ DATA _ AVAILABLE ,characteris-
类的 startLeScan ( ) 方 法, 此 方 法 使 用 接 口 BluetoothAdapter. LeScanCallback 作为参数, 必须要实现 这个回调接口, 通过接口中的回调函数得到 BLE 设 备。与传统蓝牙程序相似, 由于搜索外设非常消耗 电能, 因此一旦搜索到所需设备, 应该立即停止搜 索。另外, 搜索时长必须设定限制, 不能无限制进 行。如果只想搜索指定类型的 BLE 外设, 则调用 ] ,BluetoothAdapter. LeScanCalstartLeScan ( UUID [ lback) , ]数 组 中 指 定 GATT 服 务 器 的 在 UUID [ UUID。实现上述功能的主要代码如下: mBluetoothAdapter. startLeScan ( mLeScanCallback) ; private BluetoothAdapter. LeScanCallback mLeScanCallback = new BluetoothAdapter. LeScanCallback( ) { …} ; 2. 3. 4 与 GATT 服务器建立连接及通信 Android 手机为了与 BLE 搜索到 BLE 设备后,
2
2. 1
BLE 应用程序体系结构和关键技术
应用程序体系结构 软件体系结构表示软件系统基础的结构组织方
[5 ]
案, 最常见的是分层结构
。 在分层结构中各层功
能明确, 高层使用低层提供的各种服务, 而低层并不 。 关注高层的存在 采用分层技术通常可以使各类开 · 134·
李侠, 等: 基于 Android 系统的低功耗蓝牙应用程序开发 ForResult( ) 运行一个 Activity 让用户选择是否在一 定时间内开启蓝牙。 2. 3. 3 搜索 BLE 设备 为了搜索 BLE 设备, 必须使用 BluetoothAdapter ERED) ; } broadcas-
作者简介: 李侠( 1977 - ) , 女, 安徽蚌埠人, 硕士, 讲师, 研究方向为嵌入式系统开发 。
· 133·
李侠, 等: 基于 Android 系统的低功耗蓝牙应用程序开发 value 和 de识别码 ) 标识。 每个特征由 properties、 scriptor 字段组成。 Properties 表示是否可读 写; value 表示特征值; descriptor 用于对特征作更详细的描 述。在 Android 4. 3 编程中, 这些概念非常关键, 图 2 显示应用层中的心率规范 ( heart rate profile ) 及相 关概念。 心 率 规 范 由 HRS ( Heart Rate Service ) 和 DIS ( Device Information Service ) 2 个 服 务 组 成。 HRS 由 3 个特征组成, 图 2 只列出了 Measurement Notify 表 特征, 其中 80 表示心率传感器测量出的值, 示此值允许读取。 发者更专注于本层的工作而不需要知道其他层的情 [6 ] 况。传统蓝牙应用程序开发 较复杂, 为简化 BLE 程序开发, 在设计蓝牙 4. 0 的协议栈时就作了考虑。 BLE 应用程序设计为 3 层: 表示层、 业务层与通信 层。表示层处理用户与软件系统之间的交互 , 如选 择连接设备、 断开设备、 显示业务层处理的各种结果 等; 业务层处理问题域中的各种业务, 如对通信层获 取的特征 value 字段值进行统计、 分析, 然后把结果 上传到表示层; 通信层负责与一个或多个 BLE 设备 连接通信并保证向上层及时可靠地提供信息 。 2. 2 设备地位的变化 当一个 Android 手机与一个 BLE 设备交互时, 手机作为中心( Central) 设备存在, 负责扫描、 发现和
1
蓝牙 4. 0 及低功耗技术协议栈
蓝牙 4. 0 是目前最新的蓝牙标准, 它包含了传 统蓝牙、 高速蓝牙和低功耗蓝牙标准, 核心是蓝牙低
收稿日期: 2014 - 03 - 20 基金项目: 安徽省国际科技合作计划项目( 1303063006 )
传感器应用在小型无线电子产品中用于收集特定类 型的信息。 BSR 设备包括手机、 平板电脑、 个人电 脑、 机顶盒及电视机等, 可接受传统蓝牙设备和 BLE 设备发送的数据, 并传送给相应的应用软件, 将数据 转换为有用的信息, 本文将以 Android 4. 3 平台手机 作为 BSR 典型设备进行说明。 蓝牙低功耗技术协议栈如图 1 所示。整个栈由 控制器( Controller) 、 主机( Host ) 和应用程序 ( Apps ) 组成。控制器层表示蓝牙采用的频段、 信道、 调制方 式、 数据包结构和控制流程等; 主机层由逻辑链路控 制适配协议 ( L2CAP ) 、 安全管理协议 ( SMP ) 、 属性 协议( ATT) 、 通用属性规范( GATT) 和通用接入规范 ( GAP) 组成。 应用程序层中定义的各种规范 ( profile) 规定了实现此功能的 BLE 设备向外提供的编 程接口要求。一个 BLE 设备可实现多个应用规范。 GAP 定义了如何发现 BLE 设备并建立与 BSR 设备 的连 接。 应 用 层 的 各 种 规 范 都 是 基 于 GATT 的, GATT 规定了如何发送和接收设备的各种属性值 。 ATT 把属性表示为服务( service ) 的集合。 服务由多 个特征组成, 每个特征由 128 位的 UUID ( 通用唯一
{ broadcastUpdate ( ACTION _ DATA _ AVAILABLE ,characteristic) ; } 发现服务、 读取特 当发生 BLE 设备状态改变、 征和特征更改等事件时, 就会执行上面对应的回调 函数, 每个回调函数中都调用 broadcastUpdate ( ) 函 有 2 种形式: 一种 数, 该函数是自定义的重载函数, 只有 1 个参数表示 Intent, 对接收的值进行广播; 另 一种有 2 个参数, 第 1 个参数表示一个 Intent, 第2 个参数表示接收到的 BLE 的特征, 此函数根据心率 格式规范分析出特征中的 Value 值, 如图 2 所示, 然 后将此值附加到 Intent 中进行广播。 该函数广播出 的值由 应 用 程 序 业 务 层 通 过 mGattUpdateReceiver 中的回调函数接收并进行统计、 排序等处理。 这样 就实现了 BLE 设备数据传递到 Android 手机中的功 能。业务层中相关代码如下: private final BroadcastReceiver mGattUpdateReceiver = new BroadcastReceiver ( ) { public void onReceive ( Context context,Intent intent) { 接收 BLE 传递的值。根据这些值来更 }; 新程序表示层中的用户界面。
[4 ] 功 耗 技 术 ( Bluetooth Low Energy, 简 称 BLE ) 。 BLE 耗电大概是传统蓝牙的十分之一, 低功耗主要 体现在等机功耗的减少、 高速连接的实现和峰值功 率 的 降 低 等 3 个 方 面。 蓝 牙 4. 0 支 持 Bluetooth Smart Ready ( 简称 BSR) 设备和 Bluetooth Smart ( 简 称 BS) 设备。BLE 设备与 BSR 设备进行连接, 作为
蓝牙无线技术是目前使用最为广泛的短距离无 [1 ] 线传输标准之一 。 尽管蓝牙技术联盟 ( Bluetooth SIG) 于 2010 年 6 月就已发布蓝牙 4. 0 技术标准, 但 应用于 Android 智能手机则是从 2012 年 5 月 Galaxy S3 发布开始。随后支持蓝牙 4. 0 的 Android 机型纷 纷发布。但 Android 原生系统不支持蓝牙 4. 0 , 导致 开发者无法开发可以运行在不同品牌不同机型的 Android 应用程序。2013 年 7 月 Android 4. 3 系统发 布, 正式支持蓝牙 4. 0 。 相对于蓝牙 2. 1 或者 3. 0 等传统蓝牙技术的高耗电性, 对于那些采用纽扣电 池供电的小蓝牙外设必须经常更换电池或充电 , 因 此, 蓝牙外设没有得到广泛应用。 蓝牙 4. 0 极低的 运行和待机功耗使一粒纽扣电池可连续工作 1 a。 根据目前安卓设备全球 75% 的占有率和蓝牙 4. 0 外设与安卓设备之间低功耗的连接方式 , 可穿戴设 备及物联网将会得到快速发展。采用传统蓝牙进行 产品开发的文献较多, 但由于 Android 4. 3 发布近 10 个月, 有关开发文献较少, 另一方面蓝牙 4. 0 开 [3 ] 发与传统蓝牙开发技术差别较大 。因此本文首先 简要介绍蓝牙 4. 0 及低功耗技术协议栈, 然后重点 介绍 Android 4. 3 低功耗应用程序分层结构和关键 技术, 最后给出一个应用程序开发实例进行分析 。
图2 心率规范组成
检查并开启 BLE 功能
应用程序使用蓝牙功能时, 首先需要验证手机 操作系统 Android 是否支持 BLE 功能。 如果支持, 则需要检查手机是否具有蓝牙硬件功能 。软件通过 蓝牙 适 配 器 类 BluetoothAdapter 表 示 此 硬 件 功 能。 应用程序与适配器对象进行交互, 获取适配器之后, 需要查看是否开启, 可以调用 isEnabled ( ) 来查询当 前蓝牙设备的开关状态, 如果返回值为 false, 则表示 蓝牙设备没有打开, 这时以 ACTION_REQUEST_ENABLE 为参数新建一个 intent, 然后调用 startActivity-
图1 蓝牙低功耗技术协议栈
如果手机发送数据给测量计, 手机就是服务器, 测量 计是客户机。本文开发的手机应用程序是 GATT 客 户机 程 序, 从 测 量 计 获 取 数 据; 心 率 测 量 计 作 为 GATT 服务器向手机提供测量数据。 2. 3 开发 BLE 应用程序的关键技术 BLE 程序开发的主要内容有用户界面设计、 业
务层数据处理和通信层数据通信。通信层程序实现 的关键 技 术 包 括 BLE 授 权、 开 启 BLE 功 能、 搜索 BLE 外设、 建立连接及通信等。 2. 3. 1 BLE 授权 与普通蓝牙程序一样, 为了使 Android 手机能 够与蓝牙外设通信, 必须要在应用程序的 AndroidManifest. xml 文件中进行授权。 2. 3. 2
连接 BLE 设备; BLE 设备作为外设 ( Peripheral ) 存 在, 负责响应连接。当两者一旦建立联系后, 在进行 通信的 过 程 中, 它 们 的 地 位 就 发 生 了 改 变。 例 如 Android 4. 3 手机和心率测量计的关系; 心率测量计 是符合心率测量计规范 ( Heart Rate Profile ) 的 BLE 外设, 手机上安装支持 BLE 的心率测量应用程序。 当用户握住心率测量计就可以测量出心跳次数 。 如 果心率测量计把测量数据传送给手机, 这时心率测 量计是 GATT 服务器, 手机是 GATT 客户机。 反之,
第 16 卷 第 5 期
重庆科技学院学报( 自然科学版)
2014 年 10 月
基于 Android 系统的低功耗蓝牙应用程序开发
李侠
1
沈峰
2
李德胜
2
( 1. 安徽电子信息职业技术学院软件学院,安徽 蚌埠 233000 ; 2. 安徽科技学院计算机科学与技术系,安徽 凤阳 233100 )
摘 要: 针对 Android 4. 3 开发低功耗蓝牙程序涉及低功耗蓝牙协议栈 、 蓝牙外设及与传统蓝牙开发区别较大等问
题, 从蓝牙低功耗技术协议栈 、 程序分层结构和关键技术等方面进行阐述 。 对于蓝牙低功耗技术协议栈, 应用程序 主要考虑与 GATT 层通信和应用层规范; 程序体系结构设计为分层结构 。 通过实例讨论低功耗蓝牙程序的关键技 术, 程序运行结果表明该系统开发达到了设计要求 。 关键词: 低功耗蓝牙; Android 4. 3 ; 心率测量计; 分层结构; GATT 服务器 中图分类号: TP391. 9 文献标识码: A 文章编号: 1673 - 1980 ( 2014 ) 05 - 0133 - 04
public void onCharacteristicRead ( ) { tic) ; } public void onCharacteristicChanged ( )
tUpdate ( ACTION _ DATA _ AVAILABLE ,characteris-
类的 startLeScan ( ) 方 法, 此 方 法 使 用 接 口 BluetoothAdapter. LeScanCallback 作为参数, 必须要实现 这个回调接口, 通过接口中的回调函数得到 BLE 设 备。与传统蓝牙程序相似, 由于搜索外设非常消耗 电能, 因此一旦搜索到所需设备, 应该立即停止搜 索。另外, 搜索时长必须设定限制, 不能无限制进 行。如果只想搜索指定类型的 BLE 外设, 则调用 ] ,BluetoothAdapter. LeScanCalstartLeScan ( UUID [ lback) , ]数 组 中 指 定 GATT 服 务 器 的 在 UUID [ UUID。实现上述功能的主要代码如下: mBluetoothAdapter. startLeScan ( mLeScanCallback) ; private BluetoothAdapter. LeScanCallback mLeScanCallback = new BluetoothAdapter. LeScanCallback( ) { …} ; 2. 3. 4 与 GATT 服务器建立连接及通信 Android 手机为了与 BLE 搜索到 BLE 设备后,