十八

蓝牙:
背景
蓝牙的实现方案:
CoreBluetooth.framework
创建中心角色
扫描外设
连接外设

蓝牙开发:
背景:
iOS的蓝牙不能用来传输文件。
iOS与iOS设备之间进行数据通信,使用gameKit.framework
iOS与其他非iOS设备进行数据通信,使用coreBluetooth.framework

iOS中蓝牙的实现方案
iOS中提供了4个框架用于实现蓝牙连接
GameKit.framework(用法简单)
只能用于iOS设备之间的连接,以前多用于游戏(棋牌)
MultipeerConnectivity.framework
只能用于iOS设备之间的选择,从iOS7开始引入,主要用于文件共享(仅限于沙盒的文件)
ExternalAccessory.framework
可用于第三方蓝牙设备交互,但是蓝牙设备必须经过苹果MFi认证(国内少)

CoreBluetooth.framework
可用于第三方蓝牙设备交互,目前应用比较多的案例:运动手环、嵌入式设备、智能家居
//蓝牙系统库

#import

//必须要由UUID来唯一标示对应的service和characteristic,通过UUID区分不同的服务和特征
一个设备必然包含一个或者多个服务,每个服务下面又包含若干个特征
特征是与外界交互的最小单位
比如,一台蓝牙设备,用特征A来描述自己的出场信息,用特征B来收发数据
设备里面各个服务和特征的功能,都是由蓝牙设备硬件厂商提供,比如哪些是用来交互(读写),哪些可获取模块信息(只读)

蓝牙连接的参数者:
蓝牙中心:(CBCentralManager):一般指iPhone手机
设备(外设):(CBPeripheral):装有蓝牙芯片的智能硬件
外设的服务:peripheral.services数组,CBService对象:硬件可以提供很多服务,实际上就是把硬件的功能分模块,比如手环的震动和亮起来的颜色是两个不同服务
服务下的特征(CBCharacteristic): 负责为服务器提供读写数据,一个服务下可以有很多个特征,比如灯亮的颜色,有时间长度等都是一个单独的服务

蓝牙中心开始扫描外设:
一个蓝牙中心可以扫描到周围蓝牙距离有效范围(20m左右跟障碍物有关)的所有外设
一个外设也可以被多个蓝牙中心扫摘

扫描到外设,开始识别
我们会扫描到周围所有的外设,但是一般我们只会连接我们自己公司的智能硬件,所以这里需要识别

CBPeripheral有一个identifier属性,是设备的唯一标识符
·有些APP通过扫一扫硬件的二维码建立连接,其实内部已经扫描到了外设,只是U不显示,二维码中放的就是外设的identifer

开始连接外设

连接外设成功,开始发现服务
一旦外设被蓝牙中心连接之后,既不能被其他中心扫描更不能被其他中心连接

#define kServiceUUID @“5C476471-1109-4EBE-A826-45B4F9D74FB9”

#define kCharacteristicHeartRateUUID @“82C7AC0F-6113-4EC9-92D1-5EEF44571398”

#define kCharacteristicBodyLocationUUID @“537B5FD6-1889-4041-9C35-F6949D1CA034”

@interface ViewController ()

@property (nonatomic,strong)CBCentralManager * centralManager;

@property (nonatomic,strong)CBPeripheral * peripheral;

@end

创建中心角色
#import

  • (void)viewDidLoad

{

[super viewDidLoad];

//初始化蓝牙 central manager

_centralManager = [[CBCentralManager alloc]initWithDelegate:self queue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0) options:nil];

}

扫描外设
[manager scanForPeripheralsWithServices:nil options:@{CBCentralManagerRestoredStateScanOptionsKey:@(YES)}];

连接外设

  • (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI

{

if([peripheral.name isEqualToString:BLE_SERVICE_NAME]){

[self connect:peripheral];

}

s);

}

-(BOOL)connect:(CBPeripheral *)peripheral{

self.manager.delegate = self;

[self.manager connectPeripheral:peripheral

options:[NSDictionary dictionaryWithObject:[NSNumber numberWithBool:YES] forKey:CBConnectPeripheralOptionNotifyOnDisconnectionKey]];

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值