core Bluetooth(蓝牙4.0)
蓝牙4.0以低功耗著称,一般也叫BLE(Bluetooth Low Energy)。
目前主要应用的场景有:智能家居、运动手环和室内导航等。
利用core Bluetooth框架可以实现苹果设备与第三方蓝牙设备进行数据的交互。在CoreBluetooth框架中,有两个主要的角色:周边和中央 ,整个框架都是围绕这两个主要角色设计的,他俩之间有一系列的回调交换数据。core Bluetooth的核心框架图如下:

其中左边是中心,其中CBService 类代表服务,CBCharacteristic 类代表特征。右边是周边,其中CBMutableService 类代表服务,CBMutableCharacteristic 类代表特征。
注意一点就是:设备中包含服务,服务中包含特征。我们可以根据服务的唯一标示(UUID)找出设备中的服务,然后根据特征的唯一标示(UIID)从相应的服务中找出对应的特征,然后执行相应的操作。(就像中国包含省份,省份中有包含城市,我们可以根据省份的名称(类似于服务的UUID)来找到对应的省份,根据城市名称(类似于特征的UUID)从对应省份中找出正确的城市)。
core Bluetooth的主要开发步骤:
//1创建中心管理者
CBCentralManager *mgr = [[CBCentralManager alloc] init];
//成为自己的代理
mgr.delegate = self;
//2利用中心设备扫描(数组指定)外部设备(若数组为空,表示扫描所有的)
[mgr scanForPeripheralsWithServices:(NSArray *) options:nil];
//3根据外设的标示,连接外设
[self.mgr connectPeripheral:(CBPeripheral *) options:nil];
/** 连接外设成功调用 */
- (void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheral{
// 扫描外设中得服务
[peripheral discoverServices:nil];
} /** 连接外设失败调用 */
- (void)centralManager:(CBCentralManager *)central didDisconnectPeripheral:(CBPeripheral *)peripheral error:(NSError *)error{}
/** 只要扫描到服务就会调用 */
- (void)peripheral:(CBPeripheral *)peripheral didDiscoverServices:(NSError *)error{
// 获取外设中所有扫描到得服务
NSArray *services = peripheral.services;
遍历服务:
if (正确的服务){
// 从需要的服务中查找需要的特征
[peripheral discoverCharacteristics:nil forService:service];
}
}
/** 只要扫描到特征就会调用 */
- (void)peripheral:(CBPeripheral *)peripheral didDiscoverCharacteristicsForService:(CBService *)service error:(NSError *)error
{
// 拿到服务中所有的特诊
NSArray *characteristics = service.characteristics; 遍历特征:
if (正确的特征) {
与外设交互代码;
}
}
/*存储所有的外设*/
@property (nonatomic, strong) NSMutableArray *peripherals;
/*中心服务管理者*/
@property (nonatomic, strong) CBCentralManager *mgr; /*懒加载数组*/
- (NSMutableArray *)peripherals{
if (_peripherals == nil) {
_peripherals = [NSMutableArray array];
}
return _peripherals;
} - (void)viewDidLoad {
[super viewDidLoad]; //1创建中心管理者
self.mgr = [[CBCentralManager alloc] init]; //成为自己的代理
mgr.delegate = self; //2利用中心设备扫描(数组指定的)外部设备
/* 如果指定数组为空表示扫描所有的设备 */
[mgr scanForPeripheralsWithServices:nil options:nil];
} #pragma mark - CBCentralManagerDelegate代理方法
/*发现外设的时候调用*/
- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary<NSString *,id> *)advertisementData RSSI:(NSNumber *)RSSI{ // 判断如果数组中不包含当前扫描到得外部设置才保存
if (![self.peripherals containsObject:peripheral]) { //让外设成为自己的代理
peripheral.delegate = self; // 保存扫描到得外部设备
[self.peripherals addObject:peripheral];
}
} /** 模拟连接所有的外设 */
- (void)connect{
//从保存的外设中取出所有的外设连接(也可以连接指定的外设)
for (CBPeripheral *peripheral in self.peripherals) {
/** 连接外设 */
[self.mgr connectPeripheral:peripheral options:nil];
}
} /**
* 连接外设成功调用
*/
- (void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheral{
// 扫描外设中得服务
[peripheral discoverServices:nil];
} /**
* 连接外设失败调用
*/
- (void)centralManager:(CBCentralManager *)central didDisconnectPeripheral:(CBPeripheral *)peripheral error:(NSError *)error{
} #pragma mark - CBPeripheralDelegate代理方法
/**
* 只要扫描到外设的服务就会调用
*
* @param peripheral 服务所在的外设
*/
- (void)peripheral:(CBPeripheral *)peripheral didDiscoverServices:(NSError *)error{
// 获取外设中所有扫描到得服务
NSArray *services = peripheral.services;
for (CBService *service in services) {
// 拿到需要的服务
if ([service.UUID.UUIDString isEqualToString:@"123456789abc"]) {
// 从需要的服务中查找需要的特征
// 从peripheral中得service中扫描特征
[peripheral discoverCharacteristics:nil forService:service];
}
}
}
/**
* 只要扫描到特征就会调用
*
* @param peripheral 特征所属的外设
* @param service 特征所属的服务
*/
- (void)peripheral:(CBPeripheral *)peripheral didDiscoverCharacteristicsForService:(CBService *)service error:(NSError *)error
{
// 拿到服务中所有的特诊
NSArray *characteristics = service.characteristics;
// 遍历特征, 拿到需要的特征处理
for (CBCharacteristic *characteristic in characteristics) {
if ([characteristic.UUID.UUIDString isEqualToString:@"edg"]) {
与外设的做数据交互的部分代码
}
}
}
core Bluetooth(蓝牙4.0)的更多相关文章
- iOS 上的蓝牙框架 - Core Bluetooth for iOS
原文: Core Bluetooth for iOS 6 Core Bluetooth 是在iOS5首次引入的,它允许iOS设备可以使用健康,运动,安全,自动化,娱乐,附近等外设数据.在iOS 6 中 ...
- IOS 蓝牙(GameKit、Core Bluetooth)
GameKit的蓝牙开发注意 ● 只能用于iOS设备之间的连接 ● 只能用于同一个应用程序之间的连接 ● 最好别利用蓝牙发送比较大的数据 /* 关于蓝牙的数据传输 1. 一次性传送,没有中间方法,所 ...
- 基于蓝牙4.0(Bluetooth Low Energy)胎压监测方案设计
基于一种新的蓝牙技术——蓝牙4.0(Bluetooth Low Energy)新型的胎压监测系统(TPMS)的设计方案.鉴于蓝牙4.0(Bluetooth Low Energy)的低成本.低功耗.高稳 ...
- 【转】Core Bluetooth框架之一:Central与Peripheral
原文网址:http://southpeak.github.io/blog/2014/07/29/core-bluetoothkuang-jia-zhi-%5B%3F%5D-:centralyu-per ...
- Core Bluetooth【官方文档翻译】【02】
1.中心设备和外围设备以及它们在蓝牙通讯中的角色. 在所有的BLE( Bluetooth low energy,下文简称蓝牙4.0 )通讯中都涉及2个主要的角色:中心设备和外围设备.它是基于传统的客户 ...
- Core Bluetooth 概述 【官方文档翻译】
Core Bluetooth 框架在Mac和iOS平台,为配备了低功耗蓝牙无线技术的设备提供了进行通信所需要的类.例如,您的应用程序可以发现,探索,和低功耗的外围设备进行交互,如心率监视器.数字温控器 ...
- iOS - Bluetooth 蓝牙
1.蓝牙介绍 具体讲解见 蓝牙 技术信息 蓝牙协议栈 2.iBeacon 具体讲解见 Beacon iBeacon 是苹果公司 2013 年 9 月发布的移动设备用 OS(iOS7)上配备的新功能.其 ...
- Android 蓝牙4.0 BLE
Android ble (Bluetooth Low Energy) 蓝牙4.0,也就是说API level >= 18,且支持蓝牙4.0的手机才可以使用. BLE是蓝牙4.0的核心Profil ...
- android 蓝牙4.0多通道
很久没记录东西了,前段时间研究了一哈android4.0控制多个外设的情况,注意,需要使用android版本4.3以上,蓝牙4.0及以上. 我这里使用的控制蓝牙灯泡,使用android4.3的手机,手 ...
随机推荐
- 用于阻止div上的事件和div上的按钮的事件同时触发
event.stopPropagation() 阻止事件冒泡 用于ie11以上
- ThinkPHP 3.2.3(四)架构之多层MVC
一.模型(Model)层 1.ThinkPHP支持多层Model,不同的模型层都继承自系统的Model类. 2.模型的多层通过目录结构和命名规范区分. 例如:在某个项目设计中需要区分数据层.逻辑层 ...
- web前端页面项目经验总结
项目时间:2016年4月5日--4月9日项目名称:阿七果子园web前端页面项目内容: 1.HTML5+CSS+JavaScript(banner+timer)+JQuery(small_bann ...
- ajax的探究与使用
前端必须掌握ajax,这是几乎所有前端招聘都会要求的一项. 但其实ajax也就是一种异步请求的技术,没有什么很深的东西,不过接触ajax很长一段时间了,早该整理下ajax的学习和使用: PART1: ...
- sql基础语句(技巧)
1.压缩数据库 dbcc shrinkdatabase(dbname) 2.转移数据库给新用户已存在用户权限 exec sp_change_users_login'update_one','newga ...
- SqlServer索引使用及维护
在应用系统中,尤其在联机事物处理系统中,对数据查询及处理速度已成为衡量应用系统的标准. 而采用索引来加快数据处理速度也成为广大数据库用户所接受的优化方法. 在良好的数据库设计基础上,能够有效地索引是S ...
- μC/OS-Ⅲ系统中的任务就续表
μC/OS-Ⅲ支持任意数目的不同优先级.一般情况下64级优先级就足够了. 在μC/OS-Ⅲ中所有已经就绪等待运 行的任务都被放入一个我为的“就续表”(ready list)中.就续表包括两部分:一个就 ...
- Java学习之多态
多态的概念 多态==晚绑定. 不要把函数重载理解为多态. 因为多态是一种运行期的行为,不是编译期的行为. 多态:父类型的引用可以指向子类型的对象. 比如 Parent p = new Child(); ...
- UIImagePickerController和UIAlertController结合使用
在处理个人资料 - 头像的时候,通常有两个选项,一个是调用系统相机,一个是调用系统相册.这里要使用的就是UIImagePickerController方法. 在头像位置的imageView添加一个手势 ...
- MongoDB入门
安装 安装MongoDB 从官网下载 安装 测试连接 启用 安装MongoDB Windows服务 > d:\mongodb\bin>mongod --dbpath "d:\mo ...