上周智能骑行系列的第一篇文章中,小码哥介绍了自行车选手们可以如何借助Bluetooth Smart 设备提高比赛成绩,大家也领略了智能骑行的魅力。(有些妹纸表示图片撩人热血,有想流口水的冲动)本篇将继续从开发者的视角就蓝牙骑行技术展开讨论。
哪些配置文件必不可少?
与骑行相关的主要配置文件包括:心率配置文件(Heart Rate Profile)、骑行速度和踩踏速率配置文件(CyclingSpeed and Cadence Profile) 、骑行功率配置文件(Cycling PowerProfile)。
心率配置文件使用通知将心率测量结果传输至向与之相连的GATT客户端。通知中包括的不仅仅是心率数据,稍后小码哥会详细说明。骑行速度和踩踏速率配置文件也使用通知传输数据,每个通知都包含车轮转数或(和)曲柄转数数据。骑行功率配置文件也使用“通知”这一超级有用的属性协议(AttributeProtocol)信息来传输数据。
BluetoothDeveloper Studio助力开发
如果你想要深入了解并着手开发,请点击原文链接下载并安装Bluetooth Developer Studio正式版。它是蓝牙技术联盟新推出的开发工具,是助力开发的神器。其庞大的配置文件、服务、特性和描述符资源库并不局限于之前所提到的。Bluetooth Developer Studio是探索这些配置文件的绝佳工具,让开发者能够通过插件生成代码,迅速进入开发的实施。
图1 –Bluetooth Developer Studio
可供下载的智能手机APP
许多配置文件可用的移动应用程序,可以下载并使用。下面列举的三个是适用于安卓系统的移动应用程序:
Polar Beat
Wahoo 健身
北欧半导体BLE nRF 工具箱
开发专属你的炫酷APP
如果你是移动开发者,你一定会想要开发自己的Bluetooth Smart应用,尤其是当蓝牙技术联盟或其他设备制造商发布新的配置文件时。而且,随意结合采用的服务和你自己自定义服务打造自己的自定义配置文件也是完全合法的。
编写代码的种类取决于开发所面向的平台以及开发的是GATT客户端还是GATT服务器。如果你编写的是与自行车或选手身上的一种或多种类型的传感器协同工作的GATT客户端应用,就需要订阅包含所需传感器值的特性的通知,当通知通过BluetoothSmart从传感器传输至设备时,就可以依照代码对这些通知进行相应处理。
让我们再进一步观察一下这三个配置文件,然后我会陆续穿插一些代码片段。
心率配置文件 (HRM)
这一配置文件包括一项强制性服务,即心率服务;以及一项选择性服务,即设备信息服务。心率服务定义了以下几项特性:
心率测量特性值可分解为若干不同的字段,因此接收此特性通知的应用要做的第一件事就是对值数据进行划分。我们可以从Flags 字段的首字符和0-4比特位中了解心率传感器的更多功能,以及特性值其余部分的数据形式。例如,表示每分钟心跳数的心率值可能是8位或16位字段,Flags 字段会以一个特定的通知告诉我们是哪种情况。
一个8位字段能够保存0-225范围的值,对于人的心率来说足够了。一种计算心率理论最大值的方法是220-年龄,所以一个40岁的人心率理论最大值为180。但如果你要用心率测量仪给一只蜂鸟侧心率,那这一数值可能在50-1260跳/每分钟之间,就需要一个16位的值才够。
图2 –处理安卓系统中的心率通知
骑行速度和踩踏速率配置文件(CSC)
这一配置文件也有一个强制性的服务,即骑行速度和踩踏速率服务;以及一个选择性的服务,即设备信息服务。CSC服务定义了以下四个特性:
特性 | 需求 | 注释 |
CSC 测量 | 强制性 | 车轮转数数据或/和曲柄转数数据。可通过通知消息发送至客户端应用。 |
CSC 特性 | 强制性 | 只读特性,指示是否支持车轮转数数据或(和)曲柄转数数据,以及是否支持多重传感器位置。 |
传感器位置 | 条件性 | 指示传感器位置 (如前轮,左曲柄) ,如果支持多重传感器位置则为必需。 |
SC 控制点 | 条件性 | 允许多个过程的启动,如传感器校准。 |
CSC测量特性是应用开发者最感兴趣的,它的值也可以分解为若干个字段。首个字节包括一个Flags 字段, 前两个字节可指示该值是否包含车轮转数数据或(和)曲柄转数数据。车轮转数数据包括一个32位的累计车轮转数,以及一个代表以1/1024为单位最后一次测量车轮事件的时间的16位的值。曲柄数据包括一个16位的曲柄转数累计计数,以及一个类似的16位的最后一个事件的时间字段。有了这些数据,客户端就能够计算自最后一次事件的车轮转动或踩踏的平均速度,即便蓝牙连接在中间发生过中断。如果客户端知道车轮的圆周,那么还可以计算出自最后一次事件之后的行进距离和平均骑行速度。
图3 – 处理安卓系统中的CSC 通知
骑行功率配置文件(CPP)
这一配置文件定义了四个角色,允许通过两种完全不同的方式使用骑行功率传感器。通常“收集器”可以连接至“CP 传感器”, 发现GATT服务和特性并与之互动。但配置也可以把骑行功率传感器设置为“CP广播者“的角色,有一个或多个客户端作为“CP观察者”通过无定向不可连接的GAP广播接收骑行功率数据。在后者的情况下,必须使用Bluetooth Smart传输数据,反之也可以通过蓝牙BR/EDR调用CP 传感器和收集器的角色。
请注意,在不同位置(如自行车左右两侧曲柄)安装、并同时使用多个骑行速率传感器是十分常见的。骑行功率服务的传感器位置特性可以适应这一情况。
这一配置文件定义了一项强制性服务(即骑行功率服务)以及两项选择性服务(即数据信息服务和电池服务)。其中骑行功率服务定义了以下5项特性。
以上骑行功率测量时大多数应用都会利用的特性。通知可采用GATT用于从CP传感器向与之相连的采集器传输数据。如果这一特性的服务器特性配置描述符被设置为0x01,特性就能采用GAP广播数据包在服务数据字段中被广播。
测试客户端应用
使用蓝牙开发板生成模拟传感器读数,就可以很更简单地测试与传感器设备协调工作的蓝牙客户端应用。这显然比每次做出改动、安装应用后都要亲自骑车测试便利的多。虽然可能没有亲自骑车那么有趣,但的确非常便利。
我有一些来自不同制造商的开发板,如CSR(已被高通收购)、北欧半导体、蓝兆(已被Silicon Labs收购),它们都包括心率配置文件的实施,可以生成模拟心率数据。北欧半导体SDK还包括CSC配置文件。创建常见的配置文件的模拟时,用心率配置文件做模板即简单、又省事。
图4 – 适用于北欧半导体nRF1DK的心率配置文件项目
另外,一个叫做LightBlue的iOS和Mac应用能帮助开发者建立Mac、iPhone或iPad的“虚拟外围设备”, 并支持CSC、HRM、骑行功率等多项配置文件。
资源
BluetoothDeveloper Studio让开发者能够快速启动开发,使用、设计服务和特性,来打造自己的解决方案。这一工具是无价的资源库,让开发者能够创建自己的服务,并了解采用的服务器如何工作。
北欧半导体有一个非常不错的安卓应用,同时支持心率配置文件、骑行速度和踩踏速率配置文件,以及其他配置文件。源代码还公布于Github上:
我最初便携的两个 Bluetooth Smart APP都是针对BlackBerry 10的心率配置文件、骑行速度和踩踏速率配置文件。两个应用的代码现已开源(Blackberry 10 心率监测仪,Blackberry 10 CSC 监测仪),有需要请上网搜索或微信联系小编。
全部0条评论
快来发表一下你的评论吧 !