CoreBlueTooth

简介:

可用于第三方的蓝牙交互设备 设备必须支持蓝牙4.0

iPhone的设备必须是4S或者更新

iPad设备必须是iPad mini或者更新

iOS的系统必须是iOS 6或者更新

蓝牙4.0以低功耗著称,所以一般被称为BLE(bluetooth low energy)

核心概念

CBCenterManager:中心设备(用来连接到外部设备的管家)

CBPeripheralManager:外部设备(第三方的蓝牙4.0设备 用来扫描服务和服务特征)

开发步骤

1.建立中心管家

#import <CoreBluetooth/CoreBluetooth.h>

@interface ViewController ()<CBCentralManagerDelegate,CBPeripheralDelegate>
//中心管家
@property (nonatomic,strong) CBCentralManager *manager;
//存储扫描到的外部设备
@property (nonatomic,strong) CBPeripheral *peripheral; @end
/*
1.建立中心管家
2.扫描外部设备
3.连接外部设备
4.扫描服务和特征
5.数据交互
6.断开连接
*/
@implementation ViewController - (void)viewDidLoad {
[super viewDidLoad];
//建立中心管家 queue 填空 默认为主线程
CBCentralManager *manager = [[CBCentralManager alloc] initWithDelegate:self queue:nil];
self.manager = manager;
}

2.扫描外设

//在代理方法中扫描外部设备
- (void)centralManagerDidUpdateState:(CBCentralManager *)central {
//在开机状态下才能扫描外部设备
if (central.state == CBManagerStatePoweredOn) {
//扫描外部设备的哪些服务
//scanForPeripheralsWithServices 传空的话 可以扫描外部所有可以发现的设备 否则只扫描传入的相应ID的设备
[self.manager scanForPeripheralsWithServices:nil options:nil];
}
}

3.连接外设

//已经找到了外部设备 连接外部设备 我们也可以保存这些外部设备到一个数组 这里不做操作 也可以在这里对外部设备进行筛选
- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary<NSString *,id> *)advertisementData RSSI:(NSNumber *)RSSI { NSLog(@"peripheral = %@",peripheral);
//保存外部设备
self.peripheral = peripheral;
self.peripheral.delegate = self;
//连接外部设备
[self.manager connectPeripheral:peripheral options:nil];
}

外设连接成功

//已经连接到了外部设备  开始扫描该设备服务
- (void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheral { //扫描设备的服务 调用CBPeripheralDelegate
[self.peripheral discoverServices:nil];
}

4.扫描外设服务和特征

每个蓝牙4.0的设备都是通过服务和特征来展示自己的,一个设备必然包含一个或多个服务 一个服务包含一个或多个特征。

#pragma mark - CBPeripheralDelegate
- (void)peripheral:(CBPeripheral *)peripheral didDiscoverServices:(NSError *)error {
//扫描到的服务
NSLog(@"扫描到的服务:%@",peripheral.services); for (CBService *service in peripheral.services) {
//由于有很多服务 我们可以去特定的服务 做特定的功能
// if ([service.UUID.UUIDString isEqualToString:@"Battery"]) {
// [self.peripheral discoverCharacteristics:nil forService:service];
// }
//扫描服务特征
[self.peripheral discoverCharacteristics:nil forService:service];
}
}

发现服务对应的特征

/**
* 发现服务对应的特征
*/
- (void)peripheral:(CBPeripheral *)peripheral didDiscoverCharacteristicsForService:(CBService *)service error:(NSError *)error
{
// 服务对应的特征
NSArray *ctcs = service.characteristics;
// 遍历所有的特征
for (CBCharacteristic *character in ctcs) {
// 根据特征的唯一标示过滤
if ([character.UUID.UUIDString isEqualToString:@"XMG"]) {
NSLog(@"可以吃饭了");
}
}
}

特征描述

- (void)peripheral:(CBPeripheral *)peripheral didDiscoverDescriptorsForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error {
NSLog(@"descriptor = %@",characteristic.descriptors);
for (CBDescriptor *descriptor in characteristic.descriptors) {
//读取特征描述
[self.peripheral readValueForDescriptor:descriptor];
}
}

5.与外设做数据的交互 读或写

- (void)peripheral:(CBPeripheral *)peripheral didUpdateValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error {
if (error) {
NSLog(@"更新特征值%@时发生错误:%@", characteristic.UUID, [error localizedDescription]);
return;
}
// 收到数据
[delegate didGetDataForString:[self hexadecimalString:characteristic.value]];
// NSLog(@"%@",[self hexadecimalString:characteristic.value]);
}

数据的转换

我们接收到的数据,正是characteristic.value,这是一个NSData类数据,我们可以通过UTF8StringEncoding来转化为NSString,为了代码结构清晰,我专门把NSData和NSString互转写成了两个方法:

//将传入的NSData类型转换成NSString并返回
- (NSString*)hexadecimalString:(NSData *)data{
NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
return result;
}
//将传入的NSString类型转换成NSData并返回
- (NSData*)dataWithHexstring:(NSString *)hexstring{
NSData *aData;
return aData = [hexstring dataUsingEncoding: NSASCIIStringEncoding];
}

写的比较基础,另附大神写的比较全面的蓝牙博客地址

http://liuyanwei.jumppo.com/2015/07/17/ios-BLE-0.html

iOS 蓝牙开发之(CoreBlueTooth)的更多相关文章

  1. iOS蓝牙开发(二)蓝牙相关基础知识

    原文链接: http://liuyanwei.jumppo.com/2015/07/17/ios-BLE-1.html iOS蓝牙开发(一)蓝牙相关基础知识: 蓝牙常见名称和缩写 MFI ====== ...

  2. iOS 蓝牙开发资料记录

    一.蓝牙基础认识:   1.iOS蓝牙开发:  iOS蓝牙开发:蓝牙连接和数据读写   iOS蓝牙后台运行  iOS关于app连接已配对设备的问题(ancs协议的锅)          iOS蓝牙空中 ...

  3. iOS蓝牙开发(一)蓝牙相关基础知识(转)

    转载自:http://www.cocoachina.com/ios/20150915/13454.html 原文作者:刘彦玮 蓝牙常见名称和缩写 MFI ======= make for ipad , ...

  4. iOS蓝牙开发

    蓝牙常见名称和缩写 MFI ======= make for ipad ,iphone, itouch 专们为苹果设备制作的设备 BLE ==== buletouch low energy,蓝牙4.0 ...

  5. iOS蓝牙开发(4.0)详解

    最近由于项目需要, 一直在研究蓝牙4.0,在这儿分享给大家, 望共同进步. 一.关于蓝牙开发的一些重要的理论概念: 1.当前ios中开发蓝牙所运用的系统库是<CoreBluetooth/Core ...

  6. iOS 蓝牙开发详解

    目前iOS智能硬件的开发交互方式主要分为两种,一种是基于低功耗的蓝牙4.0技术(由于耗电低,也称作为BLE(Bluetooth Low Energy))对应iOS的框架为CoreBluetooth,另 ...

  7. ios蓝牙开发(一)蓝牙相关基础知识

    蓝牙常见名称和缩写 MFI ======= make for ipad ,iphone, itouch 专们为苹果设备制作的设备 BLE ==== buletouch low energy,蓝牙4.0 ...

  8. iOS蓝牙开发总结-4

    蓝牙开发总结 只要熟悉蓝牙的流程,和蓝牙中每一个角色的作用,其实蓝牙通讯并没有想象中的难 1.蓝牙中心CBCentralManager:一般指得是iPhone手机 2.设备(外设)CBPeripher ...

  9. iOS蓝牙开发CoreBluetooth快速入门

    在iOS开发中,实现蓝牙通信有两种方式,一种是使用传统的GameKit.framework,另一种就是使用在iOS 5中加入的CoreBluetooth.framework. 利用CoreBlueto ...

  10. ios蓝牙开发(三)ios连接外设的代码实现:手机app去读写蓝牙设备。

    手机app去读写蓝牙设备....... 代码下载: 原文博客主提供Github代码连接,地址是:https://github.com/coolnameismy/demo ios连接外设的代码实现流程: ...

随机推荐

  1. [转载]Linux 卸载JDK并安装新版本JDK (rpm,tar)

    FROM:http://josh-persistence.iteye.com/blog/1908549 一.查看Jdk的安装路径: whereis javawhich java (java执行路径)e ...

  2. zabbix自定义监控项一

    1.在agent端配置 1.1 添加自定义监控项 zabbix中监控项叫做item,监控项的取值方法叫做key item: Items是从agnet主机里面获取的所有数据.通常情况下我叫itme为监控 ...

  3. PS如何使用制作图片投影效果

    如果仅仅是同样大小的背景(灰色或者黑色),则只要新建一个和比原图大三个像素的文件(比如这里原图片为100×100,我就建立一个103×103的文件)把图片放在左上角,剩下的部分填充灰色或者黑色.然而这 ...

  4. Windows 用VS编译libevent源码

    原理:从github上克隆libevent源码,然后使用cmake生成VS工程 github 上 libevent项目地址:https://github.com/libevent/libevent 第 ...

  5. Android学习(九) SharedPreferences

    一.SharedPreferences:一种清醒的存储方式,基于XML存储key-value键值对方式的数据. SharedPreferences对象本身只能获取数据,而不能存储和修改数据,存储修改只 ...

  6. Oracle 数据库监听配置

    一.监听器(LISTENER) 监听器是Oracle基于服务器端的一种网络服务,主要用于监听客户端向数据库服务器端提出的连接请求.既然是基于服务器端的服务,那么它也只存在于数据库服务器端,进行监听器的 ...

  7. Oracle基础 PL-SQL编程基础(2) 分支结构

    一.分支结构 1.if语句 语法: IF <布尔表达式> THEN PL/SQL和SQL语句 END IF; 示例: DECLARE v_count NUMBER := &n; B ...

  8. BufferedReader 使用 readLine() 读取 UTF-8 格式的文本第一行第一个字符是空字符的解决办法

    BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(ksmgVo.getFiledata( ...

  9. Mysql 常用函数汇总

    转自:http://blog.csdn.net/qq_27416209/article/details/52020720 一.数学函数ABS(x)   返回x的绝对值BIN(x)   返回x的二进制( ...

  10. 网上流传的长盛不衰的Steve Jobs(乔布斯) 14分钟“Stay Hungry, Stay Foolish”演讲视频

    http://timyang.net/misc/speech/附:网上流传的长盛不衰的Steve Jobs 14分钟“Stay Hungry, Stay Foolish”演讲视频 (原视频地址:htt ...