ios心率开发,ios手机测心率
ios开发 检测心率的功能怎么做
一般有2中方法
成都创新互联专注于内蒙古企业网站建设,成都响应式网站建设公司,商城建设。内蒙古网站建设公司,为内蒙古等地区提供建站服务。全流程按需策划,专业设计,全程项目跟踪,成都创新互联专业和态度为您提供的服务
第一种也是最常用的就是手指按住后置摄像头(一般都是后置摄像头,因为像素高),用摄像头捕获视频,逐帧分析视频明暗值变化,计算出变化曲线推测出心率
第二种不常见,使用摄像头捕捉面部明暗变化(因为较多使用前置摄像头,而且距离也占一方面 不如第一个准确),也是获取视频捕捉明暗曲线,根据公式推测出心率。
以下连接本人亲测,都比较有用!!
详细分析:
Demo:
ios开发 im 心跳什么意思
iOS开发的标准语言是objective-c.是c的一种超集. 它是对c的扩展,支持面向对象编程. 像后来的一些高级语言java, c#等都借鉴了该语言的面向对象特性. 当然在iOS开发过程中,也支持c/c++语言与原生的objective-c混编. 学习一门编程语言有点基础总是好的. 没有基础的话学习起来可能要困难一些. 如果你有点java基础应该理解起来不是太困难.但必竟两者不同,在编程特性和语言本身上还是有大差别的.
ios8里面的健康程序怎么测心率?
iPhone测试脉搏、心率的工作原理:心跳会使血液里的氧含量发生微妙变化,血液颜色会因氧含量的变化而产生周期性波动,通过记录手指透过的光的颜色变化来测试心率、脉搏。因为iPhone目前的手机都不带类似健康传感器,所以可以通过一些软件来实现,推荐楼主去购买
iWatch
就可以测心率等一系列数据了。
下面我给你说一下怎么用软件测心率,
iPhone手机1部
心率监测软件一个
打开手机App
Stroe
在App
Stroe搜索框中键入runtastic
heart
rate后搜索
下载安装后打开软件
打开后需要注册,选择使用邮箱注册
填入邮件账号和密码后选择下一步
将手指(食指为宜)指纹面放在手机摄像头和闪光灯处,以覆盖摄像头和闪光灯为最佳
这时软件会开始工作,等待几秒后自动完成测试
测试完成后会有个BPM(脉搏次数/每分钟)结果,因我测试的时候是坐在凳子上,所以为62BPM左右。当然,测试会因儿童、成年人、女性、男性、运动前、运动后又所不同。不错吧,所以推荐给大家!
不过还是推荐去购买
iWatch
毕竟健康数据等一系列软件的导入要通过iWatch来实现,纯手打,给个采纳吧。
iOS swift ble Bluetooth
1 前言
当前有越来越多的可穿戴设备使用了蓝牙4.0 BLE(Bluetooth Low Energy)。对于iOS开发而言,Apple之前专门推出CoreBluetooth的Framework来支持BLE的开发。对于硬件开发有了解的朋友应该知道,在之前使用低版本的蓝牙的设备,要连接到iOS设备上,需要注册MFI,拥有MFI协议才能进行相应的开发。如果大家关注我之前对LEGO EV3的研究,就可以发现,EV3是使用了蓝牙2.1,因此需要MFI协议来进行开发。
本文将一步一步讲解如何使用CoreBluetooth框架来与各种可穿戴设备进行通信,使用 小米手环 来进行基本的测试。
2 开发环境
1 Macbook Pro Mac OS X 10.10
2 Xcode 6.3.2
3 iPhone 5s v8.1
4 小米手环
3 基本流程
要开发蓝牙,需要对整个通讯过程有个基本了解。这里我摘录一些Apple官方的文档Core Bluetooth Programming Guide的图片来加以说明。这个文档其实对于开发的流程写的是非常的清楚,大家最好可以看一下。
3.1 可穿戴设备与iOS互联方式
从上面这幅图可以看到,我们的iOS设备是Central,用来接收数据和发送命令,而外设比如小米手环是Peripheral,向外传输数据和接收命令。我们要做的就是通过Central来连接Peripheral,然后实现数据的接收和控制指令的发送。在做到这一步之后,再根据具体的硬件,对接收到的数据进行parse解析。
3.2 可穿戴设备蓝牙的数据结构
这里用的是心率设备来做说明,每个外设Peripheral都有对应的服务Service,比如这里是心率Service。一个外设可以有不止一个s、Service。每个service里面可以有多个属性Characteristic,比如这里有两个Characteristic,一个是用来测量心率,一个是用来定位位置。
那么很关键的一点是每个Service,每个Characteristic都是用UUID来确定的。UUID就是每个Service或Characteristic的identifier。
大家可以在iPhone上下载LightBlue这个应用。可以在这里查看一些设备的UUID。
在实际使用中,我们都是要通过UUID来获取数据。这点非常重要。
在CoreBluetooth中,其具体的数据结构图如下:
4 Step-By-Step 上手BLE开发
4.1 Step 1 创建CBCentralManager
从名字上大家可以很清楚的知道,这个类是用来管理BLE的。我们也就是通过这个类来实现连接。
先创建一个:
@property (nonatomic,strong) CBCentralManager *centralManager;
dispatch_queue_t centralQueue = dispatch_queue_create("com.manmanlai", DISPATCH_QUEUE_SERIAL);
self.centralManager = [[CBCentralManager alloc] initWithDelegate:self queue:centralQueue];
然后关键在于CBCentralManagerDelegate的使用。这个之后再讲。
4.2 Step 2 寻找CBPeripheral外设
有了CBCentralManager,接下来就是寻找CBPeripheral外设,方法很简单:
[self.centralManager scanForPeripheralsWithServices:@[] options:nil];
这里的Service就是对应的UUID,如果为空,这scan所有service。
4.3 Step 3 连接CBPeripheral
在上一步中,如果找到了设备,则CBCentralManager的delegate会调用下面的方法:
- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI
{
NSLog(@"name:%@",peripheral);
if (!peripheral || !peripheral.name || ([peripheral.name isEqualToString:@""])) {
return;
}
if (!self.peripheral || (self.peripheral.state == CBPeripheralStateDisconnected)) {
self.peripheral = peripheral;
self.peripheral.delegate = self;
NSLog(@"connect peripheral");
[self.centralManager connectPeripheral:peripheral options:nil];
}
}
我们在这里创建了一个CBPeripheral的对象,然后直接连接
CBPeripheral的对象也需要设置delegate.
4.4 Step 4 寻找Service
如果Peripheral连接成功的话,就会调用delegate的方法:
- (void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheral
{
if (!peripheral) {
return;
}
[self.centralManager stopScan];
NSLog(@"peripheral did connect");
[self.peripheral discoverServices:nil];
}
我们这里先停止Scan,然后让Peripheral外设寻找其Service。
4.5 Step 5 寻找Characteristic
找到Service后会调用下面的方法:
- (void)peripheral:(CBPeripheral *)peripheral didDiscoverServices:(NSError *)error
{
NSArray *services = nil;
if (peripheral != self.peripheral) {
NSLog(@"Wrong Peripheral.\n");
return ;
}
if (error != nil) {
NSLog(@"Error %@\n", error);
return ;
}
services = [peripheral services];
if (!services || ![services count]) {
NSLog(@"No Services");
return ;
}
for (CBService *service in services) {
NSLog(@"service:%@",service.UUID);
[peripheral discoverCharacteristics:nil forService:service];
}
}
我们根据找到的service寻找其对应的Characteristic。
4.6 Step 6 找到Characteristic后读取数据
找到Characteristic后会调用下面的delegate方法:
- (void)peripheral:(CBPeripheral *)peripheral didDiscoverCharacteristicsForService:(CBService *)service error:(NSError *)error
{
NSLog(@"characteristics:%@",[service characteristics]);
NSArray *characteristics = [service characteristics];
if (peripheral != self.peripheral) {
NSLog(@"Wrong Peripheral.\n");
return ;
}
if (error != nil) {
NSLog(@"Error %@\n", error);
return ;
}
self.characteristic = [characteristics firstObject];
//[self.peripheral readValueForCharacteristic:self.characteristic];
[self.peripheral setNotifyValue:YES forCharacteristic:self.characteristic];
这里我们可以使用readValueForCharacteristic:来读取数据。如果数据是不断更新的,则可以使用setNotifyValue:forCharacteristic:来实现只要有新数据,就获取。
4.7 Step 7 处理数据
读到数据后会调用delegate方法:
- (void)peripheral:(CBPeripheral *)peripheral didUpdateValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error
{
NSData *data = characteristic.value;
// Parse data ...
}
4.8 Step 8 向设备写数据
这个很简单,只要使用:
[self.peripheral writeValue:data forCharacteristic:self.characteristic type:CBCharacteristicWriteWithResponse];
data是NSData类型。
iOS 即时通讯(二):心跳保活
很多人认为,TCP协议有KeepAlive机制,为何基于它的通讯链接仍然需要在应用层实现额外的心跳保活呢?本文将从移动端IM的角度告诉你,即使使用的是TCP协议,应用层的心跳保活仍旧必不可少。
在使用TCP长连接的IM服务设计中,往往都会涉及到心跳。心跳一般是指客户端每隔一定时间向服务端发送自定义指令,以判断双方是否存活,因其按照一定间隔发送,类似于心跳,故称为心跳指令。
TCP是一个基于连接的协议,其连接状态是由一个状态机进行维护,连接完毕(三次握手)后,双方都会处于established状态,这之后的状态并不会主动进行变化。也就是说,即使上层不进行任何调用,一直使TCP连接空闲,那么它仍然是保持连接的状态。这个时候就需要一种机制来检测TCP连接的状态,KeepAlive就是背负这个使命出现的。
那么问题来了,KeepAlive是用来检测TCP连接状态的,那为什么还需要心跳呢?这里就需要考虑一种情况了,假如某台服务器因为某些原因导致负载超高,CPU100%,无法响应任何业务需求,但是使用TCP探针仍旧能够确定连接状态,这就是典型的连接活着但业务提供方已死的状态,对客户端而言,这时最好的选择就是断线后重新连接其他服务器,而不是一直认为当前服务器是可用状态,一直向当前服务器发送些必然后失败的请求。
从上面我们可以知道,KeepAlive并不适合检测双方存活的场景,这种场景还得依赖于应用层的心跳。应用层的心跳有着更大的灵活性,可以控制检测时机、间隔和处理流程,甚至可以在心跳包上附带额外信息。从这个角度而言,应用层的心跳的确是最佳实践。
TCP KeepAlive用于检测连接的死活,而心跳机制则附带一个额外的功能:检测通讯双方的存活状态。
从上面我们可以得出结论,目前而言,应用层心跳的确是检测连接有效性,双方是否存活的最佳实践,那么剩下的问题就是怎么实现。
最简单粗暴的方法是定时心跳,如每隔30秒心跳一次,15秒内没有收到心跳包则认为当前连接已失效,断开连接并进行重连。这种做法最直接,实现也简单。唯一的问题就是耗电和耗流量。以一个协议包 5 个字节计算,一天收发 2880 个心跳包,一个月就是 5 x 2 x 2880 x 30 = 0.8 M 的流量,如果手机上多装几个 IM 软件,每个月光心跳就好几兆流量没了,更不用说频繁的心跳带来的电量损耗。
既然频繁心跳会带来耗电和耗流量的弊端,改进的方向自然就是减少心跳频率,但也不能过于影响连接检测的实时性。基于这个需求,一般可以将心跳间隔根据程序状态进行调整,当程序在后台时(这里主要指安卓),尽量拉长心跳间隔,5分钟、甚至10分钟都可以。
而当App在前台时则按照原来规则操作。连接可靠性的判断也可以放宽,避免一次心跳超时就认为连接无效的情况,使用错误积累,只在心跳超时n次后才判定当前连接不可用。
iOS BLE 开发小记[1] - CoreBluetooth 是什么
现在我们都知道,很多智能硬件设备都已经集成了低功耗蓝牙模块,这样我们就可以开发一个 iOS 或者 Mac APP 与它们进行交互。从 macOS 10.9 和 iOS 6 以后,Mac 和 iOS 设备就支持 低功耗蓝牙技术了,我们可以通过 CoreBluetooth 这个框架与底层的各种蓝牙协议栈进行交互,比如 GATT、ATT 和 L2CAP 等。
与底层交互的过程如下图所示:
开始下文之前,我们需要了解几个概念。对蓝牙不够了解的可以看一下维基百科关于 蓝牙 的简介。
Bluetooth 4.0 : 蓝牙 4.0 是 Bluetooth SIG 于2010年7月7日推出的新的规范,其最重要的特性是功耗低,省电!
BLE : Bluetooth low energy wireless technology,也就是低功耗无线蓝牙技术。
BLE 是关于蓝牙4.0 的详细说明,它定义了一套用于低功耗设备之间通信的协议。而CoreBluetooth 则是对 BLE 协议栈的抽象。也就是说,它隐藏了许多底层的详细实现细节,这样对我们开发者来说,开发一个 APP 与 BLE 设备进行交互将会很便捷。
CoreBluetooth 中最关键的两个角色就是 Central(中心) 和 Peripheral(周边), Peripheral 一般是提供数据的一方,而 Central 一般获取 Peripheral 提供的数据然后来完成特定的任务。举个例子,一个集成 BLE 的数字室温计可能提供房间中的实时温度,我们通过 APP 就可以读取、分析和显示房间中的温度。
Peripheral 通过向空中广播数据的方式来使我们能感知到它的存在。Central 通过扫描搜索来发现周围正在广播数据的 Peripheral, 找到指定的 Peripheral 后,发送连接请求进行连接,连接成功后则与 Peripheral 进行一些数据交互, Peripheral 则会通过合适的方式对 Central 进行响应。
CoreBluetooth 对通用的蓝牙任务进行了简化处理,你在 App 中通过 CoreBluetooth 来集成 BLE 功能将会变得简单,如果你开发的 APP 遵循了 Centrals 的开发规范,CoreBluetooth 将会帮你处理与 Peripheral 的扫描、连接以及数据交互的过程,除此之外,通过 CoreBluetooth 将你的设备设置为 本地 Peripheral 也会很便捷。
iOS APP 的状态也会影响蓝牙的行为,当你的 APP 在后台运行或者处于暂停状态中,蓝牙的行为将会受到影响。默认情况下,当你的 APP 在后台运行时或者处于暂停状态中,你的 APP 是不能与 BLE 进行数据通信的,也就是说,当 APP 后台运行时,你需要与 BLE 进行数据通信,你需要声明你的 APP 支持蓝牙后台运行模式,即使你声明了支持后台运行模式,蓝牙在后台运行模式下的数据处理方式也会变得不同,当开发你的 BLE APP 时,你需要注意这些不同点。
即使 APP 在后台运行时,当系统内存过低时也会杀掉 APP 的后台进程,对于 iOS 7,CoreBluetooth 支持 Central 和 Peripheral 的状态信息的保存和恢复。可以通过这个功能来实现与 BLE 设备的长期交互。
CoreBluetooth 框架为你的 APP 与许多常见的 BLE 设备进行交互提供了交互接口,通过合理的利用和实践将会提高用户的体验。
举个例子,当你实现 Central 或 Peripheral 的功能时,会利用设备携带的无线电广播设备(Radio)向空中广播信号,这样就会影响到电池的续航时间,因此当你设计 APP 时,需要尽可能的减少 Radio 的使用频率。
重要提醒: 在 iOS 10以后,通过 CoreBluetooth 与 BLE 设备进行数据通信时,必须在项目的 Info.plist 文件中包含关于 NSBluetoothPerpheralUsageDescription 的描述,否则会导致 APP 闪退,详情见 NSBluetoothPerpheralUsageDescription 。
在 BLE 通信中主要包含两种角色:Central(中心)和 Peripheral(周边),基于传统的客户-服务器架构,Peripheral 通常会提供其他设备需要的数据,Central 通常利用通过 Peripheral 获取的信息来完成特定的任务,如图所示,心率监视器 提供数据给 Mac 或 iOS APP,然后来显示用户的心率数据。
Peripheral 以广播数据包的形式广播服务中的数据,广播数据包指的是包含 Peripheral 有用信息的一个较小数据包,比如 Peripheral 的名字和主要功能数据。比如,一个数字室温计广播的数据中可能包括当前室温,对于 BLE,广播是显示它们存在的主要方式。
如图,对于一个 Central 来说,它能够搜索和获取到它想要的 Peripheral 的广播信息。
连接 Peripheral 的目的就是和 Peripheral 提供的数据进行交互,在你理解这一点后,可以更好的明白 Peripheral 的数据组成结构。
Peripheral 包含一个或多个 Service(服务)和连接信号强度的有用信息。Service 可以理解成是一个完成指定功能的数据集合。举个例子,一个心率监测服务的功能就是可能就是从心率传感器中读取心率数据。
Service 是由 Characteristic(特征) 组成的,Characteristic 为 Peripheral 的 Service 提供更详细的信息,举个例子,心率服务可能包含一个测量不同体位的心率数据的 Characteristic 和一个传输心率数据的 Characteristic,下图所示的是一个心率监测设备的数据组成结构。
当 Central 与 Peripheral 建立成功的连接后,Central 可以发现 Peripheral 提供的全系列的 Service 和 Characteristic,广播数据包中的数据仅仅是可用服务的一小部分而已。
Central 可以通过读取或写入 Service Characteristic 值的方式与 Service 进行交互。你的 APP 也许需要从数字室温计中获取当前室内的温度或者设置一个温度值到数字室温计中。
BLE 通信过程中涉及到的主要角色和数据处理已经简单的集成到 CoreBluetooth 框架中了。
当你通过本地 Central 与周边 Peripheral 进行交互时,你只需要调用 Central 方面的方法就可以了,除非你设置一个本地 Peripheral,并用它来响应其他的 Central 的交互请求,实际运用中,你的蓝牙处理大部分会在 Central 方面。
在 Central 方面,用 CBCentralManager 对象来表示一个Local Central 设备,这个对象被用来管理 Remote Peripheral 设备(用 CBPeripheral 对象来表示),包括搜索和连接正在广播数据的 Peripheral。如图所示的是 CoreBluetooth 框架中如何表示 Local Central 和 Remote Peripheral。
当你与 Remote Peripheral 进行数据交互时,你将处理它的 Service 和 Characteristic,在 CoreBluetooth 框架中,用 CBService 对象来表示 Peripheral 中的服务,同样地,用 CBCharacteristic 对象来表示 Service 中的特征。下图所示的是 Remote Peripheral 的服务特征结构树。
对于 macOS 10.9 和 iOS 6, Mac 和 iOS 设备可以实现 BLE Peripheral 的功能,如为其他设备(包括 Mac,iPhone,和 iPad)提供数据。当你遵循 Peripheral 的开发规范时,就可以调用 BLE 通信的 Peripheral 方面的方法。
在 Peripheral 方面,一个 Local Peripheral 可以用 CBPeripheralManager 对象来表示,这个对象被用来管理发布包含的服务,包括组织构建 Peripheral 的数据结构以及向中心设备广播数据,Peripheral Manager 也对 Remote Central的读写交互请求做出响应。如图所示的是一个 Local Peripheral 和 Remote Central。
当你设置并与 Local Peripheral 进行数据交互时,你处理的是它的可变的 Service 和 Characteristic,在 CoreBluetooth 框架中,用 CBMutableService 对象来表示 Local Peripheral 中的服务,同样地,用 CBMutableCharacteristic 对象来表示Local Peripheral 服务中的特征。下图表示的是一个 Local Peripheral 中的服务特征结构树。
后续章节会进一步补充关于 BLE 开发的知识。
1、 TP40013257-CH1-SW1
2、 CoreBluetoothOverview
欢迎在本文下面留言一起交流心得...
本文题目:ios心率开发,ios手机测心率
分享地址:http://scyanting.com/article/dsepjje.html