在CoreBluetooth框架中,有两个主要的类 *和外设(Central and Peripheral),整个框架都是围绕这两个类设计的,它俩之间有一系列的回调交换数据。
外设(Peripheral)是生成或保存了数据的设备,*(Central)是使用这些数据的设备。所有可用的iOS设备可以作为外设(Peripheral)也可以作为*(Central)
,但不可同时即是外设Peripheral 又是*Central。

外设和*分别使用CBPeripheral 和 CBCentralManager 这两个类来代表的。

在*CBCentralManager 这边,一个外设 CBPeripheral对象代表着相应的和*Central 连接着的外设
在外设CBPeripheral这边,一个CBCentralManager 对象代表着相应的和外设Peripheral连接着的*

可以认为外设是一个广播数据的设备,他广播到外部说明他这里有数据并且能提供服务。对应的*开始扫描附近有没有服务,如果*发现了想要的服务,然后*就回请求连接周边,一旦连接建立成功,两个设备就可以开始交换传输数据了。

除了*Central和外设Peripheral ,我们还应该考虑他们交换的数据结构。这些数据在服务中被结构化,每个服务由不同的特征(Characteristics)组成,特征是包含一个单一逻辑值的属性类型。

在*这边,CBService类代表服务,CBCharacteristic类代表特征。
在外设这边,CBMutableService类代表服务,CBMutableCharacteristic类代表特征。
(二)iOS Core Bluetooth 蓝牙 “外设模式”

CBUUID和CBATTRequest是苹果公司提供的帮助类,以便于更简单的操作数据。

外设模式
创建一个外设

步骤:
1.创建并且开始 Peripheral Manager
2.设置并且发布这个外设所提供的服务
3.广播这个服务
4.和*相互作用

在ViewController.h 文件中添加以下代码:
#import CoreBluetooth/CoreBluetooth.h>
使ViewController继承CBPeripheralManagerDelegate协议,然后添加属性:
@property (nonatomic, strong) CBPeripheralManager *manger;
在ViewController.m 文件中,添加以下代码到viewdidload方法中:
self.manager = [CBPeripheralManager alloc] initWithDelegate:self queue:nil]

运行这行代码创建了一个peripheralManager。第二个参数为nil,因为PeripheralManager将run在主线程中。如果需要用多线程,则需要创建一个队列。

一旦Peripheral Manager被创建,我们应该及时地检查他的状态,看正在运行APP的这个设备是不是支持BLE标准。实现下面这个代理方法:
- (void) peripheralManagerDidUpdateState:(CBPeripheralManager*)peripheral{
}
peripheral.state == CBPeripheralManagerStatePoweredOn
则这个设备支持BLE并且可用

服务和特征(Service and Characteristic)
setupService方法是一个帮助方法

每一个服务和特征都需要一个UUID(unique identifier)去标识。UUID是一个16bit或者128bit的值。如果你要创建你的*-周边App,你需要创建你自己的128bit的UUID。你必须要确定你自己的UUID不能和其他已经存在的服务冲突。如果你正要创建一个自己的设备,需要实现标准委员会需求的UUID;如果你只是创建一个*-周边App(就像我们现在做的这样),我建议你打开Mac OS X的Terminal.app,用uuidgen命令生成一个128bit的UUID。你应该用该命令两次,生成两个UUID,一个是给服务用的,一个是给特征用的。然后,你需要添加他们到*和外设中。

下面是setupService方法的实现:
-(void)setupService{
self.customCharacteristc = [CBMutableCharacteristic alloc]initWithType:characteristicUUID properties:CBCharacteristicPropertyNotify value:nil permissions:Readable];
self.customService = ;
self.customService setCharacteristics:@[self.customCharacteristc];

self.perpheralManager addService:self.customService];
}

每个外设可以包含多个服务,每个服务又可以包含多个特征
(二)iOS Core Bluetooth 蓝牙 “外设模式”

代码最后一行把服务添加到外设管理者Peripheral Manager 是用于发布服务。一旦完成这个,周边管理者会通知他的代理方法:
-(void)peripheralManager:(CBPeripheralManager*)peripheral didAddService:(CBService*)service error:(NSError*)error{
if (!error){
//start advertising the service
[self.peripheralManager startAdvertising:@{}]
}
}

当外设管理者开始广播服务,他的代理接收
-PeripheralManagerDidStartAdvertising:error:消息,并且当*预定了这个服务,他的代理接收 -PeripheralManager:Central:didSubscribeToCharacteristic:消息,这儿是给*生成动态数据的地方。

分类:

技术点:

相关文章: