//

//  ViewController.m

//  13-蓝牙

//

//  Created by hongqiangli on 2017/7/21.

//  Copyright © 李洪强. All rights reserved.

//

//蓝牙4.0

iOS中提供了4个框架用于实现蓝牙连接

GameKit.framework(用法简单)

只能用于iOS设备之间的连接,多用于游戏(比如五子棋对战),从iOS7开始过期

MultipeerConnectivity.framework

只能用于iOS设备之间的连接,从iOS7开始引入,主要用于文件共享(仅限于沙盒的文件)

ExternalAccessory.framework

可用于第三方蓝牙设备交互,但是蓝牙设备必须经过苹果MFi认证(国内较少)

CoreBluetooth.framework(时下热门)

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

硬件至少是4s,系统至少是iOS6

蓝牙4.0以低功耗著称,一般也叫BLE(Bluetooth Low Energy)

目前应用比较多的案例:运动手坏、嵌入式设备、智能家居

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 Bluetooth的使用场景

运动手环、智能家居、嵌入式设备等等(金融刷卡器、心电测量器)

每个蓝牙4.0设备都是通过服务(Service)和特征(Characteristic)来展示自己的

一个设备必然包含一个或多个服务,每个服务下面又包含若干个特征

特征是与外界交互的最小单位

比如说,一台蓝牙4.0设备,用特征A来描述自己的出厂信息,用特征B来收发数据

服务和特征都是用UUID来唯一标识的,通过UUID就能区别不同的服务和特征

设备里面各个服务(service)和特征(characteristic)的功能,均由蓝牙设备硬件厂商提供,比如哪些是用来交互(读写),哪些可获取模块信息(只读)等

#import "ViewController.h"

#import <CoreBluetooth/CoreBluetooth.h>

@interface ViewController ()<CBCentralManagerDelegate,CBPeripheralDelegate>

@property (nonatomic ,strong)CBCentralManager *manager;

@property (nonatomic ,strong)NSMutableArray *peripherals;

@end

@implementation ViewController

-(CBCentralManager *)manager{

//1.创建中心设备

if(!_manager){

_manager = [[CBCentralManager alloc]init];

}

return _manager;

}

- (NSMutableArray *)peripherals{

if(!_peripherals){

_peripherals = [NSMutableArray array];

}

return _peripherals;

}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{

for(CBPeripheral *peripheral in self.peripherals){

//连接外部设备

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

peripheral.delegate = self;

}

}

建立中心设备

扫描外设(Discover Peripheral)

连接外设(Connect Peripheral)

扫描外设中的服务和特征(Discover Services And Characteristics)

利用特征与外设做数据交互(Explore And Interact)

断开连接(Disconnect)

- (void)viewDidLoad {

[super viewDidLoad];

//2 扫描外设

//找到特定的服务或者特征来做事情 没有返回值

//服务的UID  789

//    门类下的特征: 1000   2000

[self.manager scanForPeripheralsWithServices:@[@"789",@"777"] options:nil];

self.manager.delegate = self;

}

//扫描到外设之后执行的方法

- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary<NSString *,id> *)advertisementData RSSI:

(NSNumber *)RSSI{

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

//数组里面放的 是所有外设列表

[self.peripherals addObject:peripheral];

}

}

//连接成功之后就会调用

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

peripheral{

//peripheral

//找名字叫789的服务

[peripheral discoverServices:@[@"789",@"777"]];

}

#pragma mark

//扫描到服务的时候就会调用

//peripheral  外设

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

for(CBService *service in peripheral.services){

//发现之后扫描特征

[peripheral discoverCharacteristics:@[@"1000,2000"] forService:service];

}

}

//发现之后就会调用

//扫描到服务中的特征的时候,就会调用

//peripheral    外设

//service   服务

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

for(CBCharacteristic *characteristic in service.characteristics){

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

NSLog(@"进行交互返回心率");

}

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

NSLog(@"返回出场信息");

}

}

}

//更新状态改变的时候

- (void)centralManagerDidUpdateState:(CBCentralManager *)central{

NSLog(@"更新状态");

}

- (void)didReceiveMemoryWarning {

[super didReceiveMemoryWarning];

// Dispose of any resources that can be recreated.

}

绝大多数智能手机支持蓝牙 4.0(BLE)

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

iBeacon + 蓝牙,前景一片光明

应用之一:室内导航

Estimote公司为iBeacon提供基站

3个iBeacon基站的预购价格为99美元(约合人民币610元)

Estimote公司推出的iBeacon基站的最远传输距离为50m,但是他们推荐在10m范围内的使用效果最好

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

@end

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

  1. iOS开发之蓝牙通讯

    iOS开发之蓝牙通讯 一.引言 蓝牙是设备近距离通信的一种方便手段,在iPhone引入蓝牙4.0后,设备之间的通讯变得更加简单.相关的蓝牙操作由专门的CoreBluetooth.framework进行 ...

  2. iOS开发之--蓝牙开发实战

    转载自:http://www.cnblogs.com/zyjzyj/p/6029968.html ,感谢英杰 前言 最近一直在开发关于蓝牙的功能,本来是不想写这一篇文章,因为网上关于ios蓝牙开发的文 ...

  3. iOS开发之蓝牙业务封装

    因为公司做智能家居开发,有很多蓝牙的智能硬件.因此项目中经常需要和蓝牙打交道.为此为了提高开发效率,就把蓝牙的公共业务进行了封装. 本文将对封装的思路做一个简单的阐述. 首先我们需要一个头文件.在这个 ...

  4. iOS开发之蓝牙通信

    一.引言 蓝牙是设备近距离通信的一种方便手段,在iPhone引入蓝牙4.0后,设备之间的通讯变得更加简单.相关的蓝牙操作由专门的 CoreBluetooth.framework进行统一管理.通过蓝牙进 ...

  5. iOS开发之蓝牙使用-建立连接的

    1.大佬笔记 CSDN 2.代码 github

  6. iOS开发系列--通讯录、蓝牙、内购、GameCenter、iCloud、Passbook系统服务开发汇总

    --系统应用与系统服务 iOS开发过程中有时候难免会使用iOS内置的一些应用软件和服务,例如QQ通讯录.微信电话本会使用iOS的通讯录,一些第三方软件会在应用内发送短信等.今天将和大家一起学习如何使用 ...

  7. iOS开发——高级技术&蓝牙服务

    蓝牙服务 蓝牙 随着蓝牙低功耗技术BLE(Bluetooth Low Energy)的发展,蓝牙技术正在一步步成熟,如今的大部分移动设备都配备有蓝牙4.0,相比之前的蓝牙技术耗电量大大降低.从iOS的 ...

  8. iOS开发系列通讯录、蓝牙、内购、GameCenter、iCloud、Passbook系统服务开

    --系统应用与系统服务 iOS开发过程中有时候难免会使用iOS内置的一些应用软件和服务,例如QQ通讯录.微信电话本会使用iOS的通讯录,一些第三方软件会在应用内发送短信等.今天将和大家一起学习如何使用 ...

  9. iOS开发--通过MultipeerConnectivity完成蓝牙通讯

    iOS开发–通过MultipeerConnectivity完成蓝牙通讯 iOS蓝牙通讯的三种方式: GameKit.framework:iOS7之前的蓝牙通讯框架,从iOS7开始过期,但是目前已经被淘 ...

随机推荐

  1. 网站PV、UV以及查看方法

    网站PV.UV以及查看方法 一.名词解释 PV:PV 是Page Views的缩写,即页面浏览量,用户每一次对网站中的每个网页访问均被记录一次.注意,访客每刷新一次页面,pv就增加一次. UV:UV是 ...

  2. ios中tableview侧栏的折叠

    #import "ViewController.h" #define Ksmall 40.0f #define Klarge 80.0f #define KNoOpen @&quo ...

  3. NoSQL生态系统(nosql ecosystem)

    Unlike most of the other projects in this book, NoSQL is not a tool, but an ecosystem composed of se ...

  4. numpy中的argpartition

    numpy.argpartition(a, kth, axis=-1, kind='introselect', order=None) 在快排算法中,有一个典型的操作:partition.这个操作指: ...

  5. 使用Cygwin登录Raspberry PI

    偿试了很多ssh终端程序,像ScureCRT,Putty,SSHSecureShellClient,SSH Client Tunnelier,每个工具都有自己的特点,putty对中文的支持还算好的,其 ...

  6. java hibernate Criteria 删除数据 delete data 2种方法

    public String deleteByUserAccount(String account) { 方式一: Session session = this.getCurrentSession(); ...

  7. java hibernate session create

    public class RegisterStory { private SysUserCDao sysUserCDao; @Test public void test() { SessionFact ...

  8. Zabbix 常见问题处理整理

    zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案. 下载: http://www.zabbix.com/download.php 帮助:https://www ...

  9. idea上activiti插件的安装及使用

    最近做的东西需要用到activiti,做个笔记 首先下载activti插件- actiBPM File - settings-plugins-Browse-Repositories 搜索 actiBP ...

  10. XmlSerializer 对象序列化成XML 自定义编码格式(gb2312)

    随着面向服务(SOA)的开发方式的兴起,客户端和服务端之间的消息传送,很多采用了XML的格式.但是大家在日常的开发中,应该会有这么种体验,就是组织xml格式的代码太繁琐,这篇随笔也是为了和大家分享下简 ...