0 引言
智能手机的发展增速很快,但是可穿戴式设备的发展还是相对空白,不仅市面上可以看到的产品有限,而且目前的产品涉及面也相对较窄,技术还不算成熟,所以可穿戴式设备还算是一个相对新颖的领域。但作为继智能手机之后的下一个智能终端热点,它的潜力不可估量。所以有研究能力的科技公司早早地就已经进行对该领域的开发,如三星的SamsungGear,Google 的Google glass。目前可穿戴式设备的研究领域主要涉及到传感器技术以及无线通讯技术。
本项目主要通过整合单片机系统、BLE 技术及相关传感器技术,设计出可穿戴设备,再通过开发iOS 应用作为客户端,最终设计出相对完整的可穿戴式设备及其客户端的开发。其中客户端通过接入互联网可以与云端服务器进行交互,从而获取云端服务器的支持。
1 系统结构
本项目整体是按照数据采集—数据分析-数据处理-控制输出-回馈的框架来实现,利用DHT11 温湿度传感器收集环境数据,再通过Atmel 单片机芯片[3]进行数据分析,随后通过蓝牙芯片将数据发送给手机客户端。手机客户端以处理数据为主,并可以通过蓝牙向智能手表发送信息,从而达到控制智能手表的目的。
智能手表及其手机客户端的系统框架图如图1 所示:

图1 系统框图
2 系统硬件设计
2.1 Bluno 开发板介绍

图2 Bluno 主控板实物图
Bluno 主控板是基于ATmega528 芯片,有14 个数字I/O 口,其中6 个I/O 口可以以PWM 口来用,6个模拟输入口,16 MHz 的晶振频率,一个USB。一个TI CC2540 芯片,支持低功耗蓝牙通信。同时主控板支持I2C 和SPI 总线,提供UART TLL 串口通信。
2.2 Arduino 拓展板介绍

图3 Bluno 拓展板实物图
Bluno 拓展主要为主控板提供额外的拓展功能,它内部含有一个128*64 的OLED 显示屏,一个有源蜂鸣器,一个DHT11 温湿度传感器,一个1.5 A 继电器模块,一个螺旋电位器,一个RGB LED 灯,一个Mini 摇杆按键。
2.3 手机硬件
本项目开发的手机客户端是iOS 应用,所以,最终完成的应用可以兼容iOS 6 及以上iOS 系统,iPhone 4s及以上iPhone 设备。
3 系统软件设计
系统软件设计主要包括两大部分,智能手表部分和手机客户端部分。其中智能手表部分的软件主要有BLE 通讯部分,传感器数据采集部分,时间功能,以及单片机系统组成。而手机客户端部分主要由BLE通讯部分,Socket 通讯部分,设备控制部分组成。系统流程图如图4 所示:

图4 系统主程序流程图
3.1 BLE 通讯协议
BLE 通讯采用UTF8 编码,帧格式如下所示:
< Command > content1;
< Command > content1, content2,…;
< Command + ExtraString>stringLength;
3.2 蓝牙通讯协议
智能手表蓝牙通讯主要由两个部分组成,分别是BLE 双向透传模块和串口封装模块。
BLE 双向透传模块是基于BLE 协议栈以及OSAL(TI CC2540 内部的实时系统)的开发。而串口双向透传的目的在于忽略协议栈以及OSAL 的成分,将其视为一个简单的输入输出系统。所以在进行串口透传之前,要设定固定的BLE service 以及固定BLE characteristic。整个系统的流程最开始需要进入初始化流程,分别是硬件初始化、OSAL 初始化、BLE 协议栈初始化、串口初始化、应用层初始化。当整个系统初始化完成以后进入事件轮询流程。
串口接收数据部分:BLE 协议栈检测到characteristic的变化后,会调用用户填入的回调函数,而在整个回调函数中可以处理characteristic 的数据,随后将有效数据填入串口回调函数最终将数据输出至串口。
串口发送数据部分:串口收到数据后将调用串口回调函数,在回调函数中调用BLE 协议栈提供的写入characteristic 函数,随后将数据处理并写入characteristic中(对于监听该characteristic 的设备而言,将能够发现该值的变化,从而读取数据)。
由于双向透传模块并没有隐藏串口,所以如果想要进行数据I/O,还需要经过串口的操作,势必会带来不必要的麻烦。所以设计串口封装模块,忽略串口的存在,并遵循通信协议下的数据收发格式。
3.3 智能手表传感器数据采集
本项目主要使用的传感器是DHT11 温湿度传感器。DHT11 是一个相对较友好的硬件模块。它对数据的封装以及数据的IO 已经做了很好的处理。对于软件上的设计,所做的工作不多。首先需要进行DHT11的初始化,主要目的是通知DHT11 做好准备。
而在读取数据时,由于读取数据的方式是同步的,所以在智能手表系统需要等待DHT11 设备处理并准备好数据后,才能读取。其中准备过程以及读取过程都需要进行硬延时。这在一定程度上会对系统的定时功能造成影响(尤其本设计是一块手表,所以对时间有着严格的要求),所以系统获取DHT11 数据是有一个较长的软延时间隔。
3.4 智能手表时间功能
时间功能主要由时间类以及日期类组成,其中时间类负责时分秒的计算,而日期类主要负责日期的计算。
3.5 智能手表单片机系统
整个单片机系统由显示模块、系统初始化模块、系统定时器模块、系统时间轮询模块串口轮询以及BLE 通讯轮询组成。其中显示模块负责封装硬件信息,并设计适合进行软件操作的接口。
系统初始化主要包含以下几个任务:OLED 初始化、串口初始化、系统时钟设置、继电器及蜂鸣器初始化、BLE 通讯模块初始化、系统状态位初始化。
系统定时器进程的设置是因为在单片机中能够设置的定时器是十分有限的。所以只能利用有限的定时器去“生成”更多的定时器。在本设计中,如果需要新增定时器,首先需要添加自定义定时器。随后系统定时器进程将会根据自定义定时器进行生成定时。
系统事件的轮询主要的实现是基于系统定时器的实现。每隔50 ms 对系统事件进行检测,所涉及到的系统事件主要为按键事件。
串口收发轮询用于收发来自串口的数据,其目的主要用于调试。BLE 通讯轮询进程主要用于收发来自BLE 通讯模块的数据。其流程如图5 所示:

图5 BLE 通讯流程
3.6 手机客户端蓝牙通讯
BLE 通讯的设计主要使用了Cocoa touch 自带的Core Bluetooth 框架,并再此之上进行二次开发,并对BLE 的特性进行一定程度的隐藏。在本设计中,iOS 客户端的BLE 角色是Central 的,需要进行广播的搜索,以及链接的建立,找到感兴趣的peripheral后,订阅其中的characteristic,最终实现数据的交互。
3.7 手机客户端Socket 通讯
Socket 类的设计使用了Cocoa touch 中的CF-Socket,并将Socket 的特性进行了一定程度的隐藏,以方便与云端服务器进行通讯。
3.8 手机客户端硬件控制
设备控制模块主要负责配置智能手表的信息,当配置完成以后,将数据发送给智能手表。
4 结束语
本系统设计出的智能手表及其客户端具有以下特点:
(1)Bluno 主控板及其拓展板是基于Arduino 平台,方便进行硬件设计以及软件开发。
(2)本项目使用的BLE 通讯不仅功耗低,而且能够保证相对可靠地通讯,它可以在开阔的空间内达到120 m 的通讯距离。
(3)使用的iOS 平台具有较好的兼容性,可以兼容iPhone 4s 及以上的设备。
(4)手机客户端可以与云端服务器进行通讯,可以将智能手表手机的数据实时上传到云端服务器,同时云端服务器也可以通过手机客户端控制智能手表。