摘 要:Windows Phone 8.1是最新一代Windows Phone操作系统,为了满足可穿戴设备的软件需求,我们根据此平台蓝牙通信技术,开发了基于Windows Phone 8.1平台的应用软件。在这里,我们介绍了可穿戴设备的通信网络系统,蓝牙通信关键技术以及开发过程中遇到的问题。
【关键词】Windows Phone 8.1可穿戴设备 蓝牙通信
蓝牙4.0技术的发展,使可穿戴设备从小众、新颖转变为了有用、主流的市场需求,因此促进了基于各种操作系统的可穿戴设备应用软件市场的发展。Windows Phone平台是全球第三大智能手机操作系统,它是微软面对iPhone和Android的强势,综合地考虑了许多iPhone和Android的优点以及缺点的基础上诞生的。Windows Phone 8.1是最新一代Windows Phone操作系统,可以说Windows Phone 8.1平台仍属于蓝海阶段,大部分可穿戴设备没有Windows Store应用,但是考虑Windows生态系统的巨大潜力,它与可穿戴设备的结合将会赋予更多个人开发者以及开发团队绝佳的发展机遇。因此我们为一些可穿戴设备开发了基于Windows Phone 8.1平台的手机应用软件。
1 通信系统设计
可穿戴设备使人脱离了电脑和智能手机的限制,催生了新的移动网络入口,引领了个人局域网的全面升级。所以在我们开发的系统里,智能手机充当联网服务器,而可穿戴设备将成为移动网络输入和输出终端,让人们随时随地接入互联网。例如,通过智能手表自动输入人体健康状态和运动状态,智能眼镜负责输出反馈结果。
下面我们以智能手表为例,简单介绍通信网络系统,如图1所示。智能手表实时监测人体心率信息,通过蓝牙通信把数据发送给智能手机,智能手机作为联网服务器把数据发送给云服务器,接着云服务器把这些数据存入数据库,并根据所需算法对心率数据进行分析计算,最终把结果反馈回智能手表。
2 关键技术
2.1 蓝牙4.0技术
蓝牙4.0版本将传统蓝牙技术、高速技术和低耗能技术合为一体,强化了蓝牙在数据传输上的低功耗性能。此外,低成本和跨厂商互操作性,3毫秒低延迟、AES-128加密等诸多特色,可以用于计步器、心率监视器、智能仪表、传感器物联网等众多领域,大大扩展蓝牙技术的应用范围。
可穿戴设备在蓝牙4.0通信中是从机角色,从机的主要工作是对外广播,接受主机的连接,并且与主机之间进行通信,其数据传输是通过特征值的读写来实现的。
2.2 Windows Phone 8.1蓝牙通信
Windows Phone 8.1的配置符合蓝牙技术联盟的标准,它的蓝牙技术支持两个蓝牙方案:一个是应用程序到应用程序的通信,另一个是应用程序到设备的通信。下面给出了Windows Phone 8.1在应用程序到设备的通信中,蓝牙通信读写操作的具体代码。
2.2.1 读操作
//根据设备ID寻找蓝牙设备
BluetoothLEDevice bleDevice = await BluetoothLEDevice.FromIdAsync(ID);
//使用给定的服务 ID 返回 GATT 服务
var service = bleDevice.GetGattService(new Guid("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"));
//返回多个特征的矢量,这些特征由指定的 UUID 标识并属于此 GattDeviceService 实例
var characteristics= recKEYService.GetCharacteristics(new Guid("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"))[0];
//创建监听,监听特征值变化
characteristics.ValueChanged += characteristics_ValueChanged;
await Characteristics.WriteClientCharacteristicConfigurationDescriptorAsync(GattClientCharacteristic-
ConfigurationDescriptorValue.Notify);
//特征值变化时的读取函数
public void characteristics_ValueChanged(GattCharacteristic sender, GattValueChangedEventArgs args)
{
var values = (await sender.ReadValueAsync()).Value.ToArray();
}
2.2.2 写操作
//寻找蓝牙设备
BluetoothLEDevice bleDevice = await BluetoothLEDevice.FromIdAsync(ID);
//使用给定的服务 ID 返回 GATT 服务
var Service = bleDevice.GetGattService(new Guid("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"));
//写数据
byte[] data = { 0xxx, 0xxx };
var characteristic = recKEYService.GetCharacteristics(new Guid("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"))[0];
await characteristic.WriteValueAsync(data.AsBuffer());
3 开发过程遇到的问题及解决方案
可穿戴设备为了满足用户需求,通常体型小巧,外观精致,为此很多设备采用了一键多功能的设计。但这种设计可能会带来蓝牙数据传输的问题。我们具体分析,假设我们的协议是:蓝牙通信共用同一服务通道,设备按键按下,特征值写为0,按键弹起,特征值写为1。按键的按下与弹起代表了两种动作,特征值变化两次,触发了两次特征值监听函数,如果按下与弹起两个动作时间间隔过小,按照本文3.2.1小节的方式(方式一,如图2)去读取特征值,我们会发现第一次触发的读取操作去执行时,此通道特征值有可能因为弹起动作已经从0变成了1,两次读操作得到的数据为11,并不是预期的01,出现了错误。
经过分析,为了使特征值读操作能够适应特征值迅速变化的情况,我们的解决方案是(方式二,如图3):特征值变化时先将新特征值放入缓存中,然后队列里的两个读操作函数,就可以一一对应的读到相应的值,最终到01。
解决方案 具体代码:
public void characteristics_ValueChanged(GattCharacteristic sender, GattValueChangedEventArgs args)
{
uint dataLength = args.CharacteristicValue.Length;
byte[] values = new byte[dataLength];
DataReader reader = DataReader.FromBuffer(args.CharacteristicValue);
reader.ReadBytes(values);
}
4 结语
本文给出了可穿戴设备的通信网络系统,重点阐述了基于Windows Phone 8.1的蓝牙通信读写技术。我们开发的应用已经可以在Windows Store下载,下载量可观,表明可穿戴设备软件市场中Windows Phone应用开发依旧有广阔的前景。
参考文献
[1]微软发布Windows Phone 8.1 Update及中国版Cortana[J].个人电脑,2014,08:91.
[2]林正.深入浅出:Windows Phone 8.1应用开发[M].北京:清华大学出版社,2014.
[3]封顺天.可穿戴设备发展现状及趋势[J].信息通信技术,2014,03:52-57.
[4]王磊.基于蓝牙4.0技术的防丢器的研究与设计[D].太原理工大学,2013.
作者简介
徐圣凯(1990-),男,江苏省徐州市人。现为南京理工大学自动化学院硕士在读。主研领域为计算机软件、智能穿戴。
作者单位
南京理工大学自动化学院 江苏省南京市 210000