iOS开发笔记--Core Bluetooth开发

推荐阅读文章:http://blog.csdn.net/pony_maggie/article/details/26740237

一、前言

CoreBluetooth框架的核心其实是两个东西,peripheral和central, 可以理解成外设和中心。对应他们分别有一组相关的API和类,如下图所示:

二、Core Bluetooth 的基本常识:
1、 每个蓝牙设备都是通过服务和特征来展示自己
一个设备必然包含一个或多给服务,每个服务下面又包含多个特征
2、特征是与外界交互的最小单位
比如说,一台蓝牙设备,用特征A来描述自己的出场信息,用特征B来描述自己的收发数据
3、服务和特征都是用UUID来唯一标识的,通过UUID就能区别不同的服务和特征
4、设备里面的服务和特征的功能,都是由蓝牙设备硬件厂商提供,比如哪些用来交互(读写),哪些用来可获取模块信息(只读)等。

三、Core Bluetooth的开发步骤:

1、建立中心设备
2、扫描外设(Discover Peripheral)
3、连接外设(connect Peripheral)
4、扫描外设中的服务于特征(Discover Services and Characteristics)
5、利用特征与外设做数据交互(Explore and interact)
6、断开连接(Disconnect)

建立中心设备:

//1、创建中心设备

CBCentralManager *mgr = [[CBCentralManager alloc] init];

//设置代理

mgr.delegate = self;

//2、利用中心设备扫描外部设备

/*

如果指定数据NSArray 只能扫描指定的设备

*/

[mgr scanForPeripheralsWithServices:nil options:nil];

self.mgr = mgr;

#pragma mark  - CBCentralManagerDelegate

//实现代理,扫描到外设,保存外设

- (void)centralManager:(CBCentralManager *)central didDisconnectPeripheral:(CBPeripheral *)peripheral error:(NSError *)error

{

//保留扫描到的外设

if (![self.peripherals containsObject:peripheral])

{

[self.peripherals addObject:peripheral];

}

}

/**

*  模拟点击连接所有的外设 连接所有外设

*/

- (void)start

{

for (CBPeripheral *peripheral in self.peripherals) {

peripheral.delegate = self;

[self.mgr connectPeripheral:peripheral options:nil];

}

}

/**

*  连接外设成功

*

*  @param central

*  @param peripheral

*/

- (void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheral

{

//1、扫描外设中的服务(扫描所有服务)

[peripheral discoverServices:nil];

}

/**

*  连接外设失败

*

*  @param central

*  @param peripheral

*  @param error

*/

- (void)centralManager:(CBCentralManager *)central didFailToConnectPeripheral:(CBPeripheral *)peripheral error:(NSError *)error

{

}

#pragma mark - CBPeripheralDelegate

/**

*  只要扫描到服务就会调用

*

*  @param peripheral peripheral

*  @param error      error

*/

- (void)peripheral:(CBPeripheral *)peripheral didDiscoverServices:(NSError *)error

{

//获取外设中所有扫描的得到的服务

NSArray *services = peripheral.services;

for (CBService *service in services)

{

//可以过滤不需要的服务

if ([service.UUID.UUIDString isEqualToString:@"989589595995"]) return;

//从需要的服务中查找需要的特征

//从peripheral中的service中扫描特征

[peripheral discoverCharacteristics:nil forService:service];

}

}

/**

*  只要扫描到特征就会调用

*

*  @param peripheral 外设

*  @param service    服务

*  @param error      错误信息

*/

- (void)peripheral:(CBPeripheral *)peripheral didDiscoverCharacteristicsForService:(CBService *)service error:(NSError *)error

{

NSArray *characteristics = service.characteristics;

//遍历特征,拿到需要的特征处理

for (CBCharacteristic *characteristic in characteristics)

{

if ([characteristic.UUID.UUIDString isEqualToString:@"9996996969"])

{

}

}

}

四、蓝牙的现状

1、绝大多数只能手机支持蓝牙4.0(BLE)

2、蓝牙芯片发展迅速,在性能和效率方面都是有很大的提高,且不断变得更小更便宜

3、iBeacon + 蓝牙(BLE),前途一片光明

应用之一:室内导航

Estimote公司为iBeacon提供基站

3个Estimote公司为iBeacon预购价格为99美元

Estimote公司推出的iBeacon基站的最远出书距离为50m,最佳距离是10m以内

一块纽扣电池就能为一个iBeacon基站提供长达2年的使用寿命,而且是在设备不断对外发射信号的情况下;

时间: 2024-10-13 01:16:22

iOS开发笔记--Core Bluetooth开发的相关文章

iOS学习笔记8-地图开发

两个主要框架 map kit 用于地图展示 core foundation 用于地理定位 LBS Location based service (基于定位的服务) SoLoMo social local mobile 1.CLLocationManager CLLocationManager的常用操作和属性 开始用户定位- (void)startUpdatingLocation; 停止用户定位- (void) stopUpdatingLocation; 说明:当调用了startUpdatingL

Kinect开发笔记之三Kinect开发环境配置具体解释

0.前言: 首先说一下我的开发环境,Visual Studio是2013的,系统是win8的64位版本号,SDK是Kinect for windows SDK 1.8版本号.尽管前一篇博文费了半天劲,翻译了2.0SDK的新特性.但我还是决定要回退一个版本号. 事实上我之前一直在用2.0的SDK在调试Kinect,但无奈实验室提供的Kinect是for Windows 1.0版本号的,并且Kinect从1.8之后就好像是一个分水岭,就比方win8和win7有非常大的区别,2.0版的Kinect和S

微信公众号开发笔记1(nodejs开发的)

本篇记录了微信公众号开发的一些笔记 一.微信服务器与我们服务器的交流 微信开发者拥有自己的服务器,在我们服务器上可以与微信服务器进行交流.既然可以交流,那就必定需要前提条件(微信认证),也就是说,只有自己的服务器与微信服务器进行认证通过后,才能与他交流.如何进行认证? 1. 接口认证 接口的认证是token验证,微信服务器会发送一个get请求给我们在公众号配置的接口,如http://xxxx/weixin/api ,这个请求带了如下参数 然后,微信规定我们 1)将token.timestamp.

LeapMotion控制器 java语言开发笔记--(Java开发环境的准备)

(1)官方文档说的是必须是JDK6,JDK7,我试了一下JDK8也是可以的 (2)我是在Windows系统下用的是Eclipse Java的开发环境这里不再多说.将下载的JDK里面的java.dll和LeapJava.dll文件拷贝到jre安装目录下的bin目录下(java虚拟机和Leapmotion控制器交换数据就是靠着两个库文件),如下图所示: 需要注意的是要区分是32位系统还是64位系统的,并使用相应的文件 (3)下载最新的sdk和LeapMotion软件的驱动服务软件在Eclipse的工

【XFeng安卓开发笔记】Android开发中如何调用打电话功能

首先,应该在程序清单文件AndroidManifest.xml中加入拨打电话的权限 <uses-permission android:name="android.permission.CALL_PHONE"></uses-permission> ....

iOS开发 - Core Bluetooth蓝牙开发

Core Bluetooth Core Bluetooth测试比较麻烦,正常情况下,得至少有2台真实的蓝牙4.0设备 如何让iOS模拟器也能测试蓝牙4.0程序? 买一个CSR蓝牙4.0 USB适配器,插在Mac上 在终端输入sudo nvram bluetoothHostControllerSwitchBehavior="never" 重启Mac 用Xcode 4.6调试代码,将程序跑在iOS 6.1的模拟器上 (苹果把iOS 7.0模拟器对BLE的支持移除掉了) Core Bluet

移动web开发笔记

移动web开发笔记 移动web开发笔记 基础概念 像素单位 CSS pixels与device pixels CSS pixels PPIDPI devicePiexelRatio 文字大小控制 viewport 响应式布局 原则 实现方式 布局方案 百分比布局流体布局 弹性flexible布局 flex-box布局 图片处理 普通设置 响应式图片 媒体查询 HTML5 新表单类型 HTML5的新输入类型 CSS3 设备控制 设备交互 性能优化 参考: 移动web开发入门 移动端web开发技巧

Core BlueTooth官方文档翻译

本?文是苹果<Core Bluetooth Programming Guide>的翻译. 关于Core Bluetooth Core Bluetooth 框架提供了蓝?牙低功耗?无线设备与 iOS 应?用或 Mac 应?用通讯的必要的类.应?用可以发现,探索低功耗外设,并与它交互,?比如?心率监控器和数字 温度调节器. 从 OS X V10.9 和 iOS 6 之后,Mac 和 iOS 设备也能充当蓝?牙低功耗外设给包括 Mac 和 iOS 在内的其他设备提供数据服务了. 概览 蓝?牙低功耗?

iOS学习笔记09-核心动画CoreAnimation

一.CALayer CALayer包含在QuartzCore框架中,具有跨平台性,在iOS中使用Core Animation开发动画的本质是 将CALayer内容转化为位图从而供硬件操作 . 常用属性: 属性 描述 anchorPoint 和中心position重合的点,称为锚点,范围在(0~1,0~1) position 图层中心点位置,相当于UIView的center bounds 图层大小 opacity 透明度,相当于UIView的alpha 创建自定义CALayer: //自定义图层