#import "ViewController.h"
#import <CoreBluetooth/CoreBluetooth.h>
@interface ViewController ()<CBCentralManagerDelegate,CBPeripheralDelegate>
/// CBCentralManager *manager
@property (nonatomic, strong) CBCentralManager *manager;
///
@property (nonatomic, strong) NSMutableArray *peripherals;
///开关的特征
@property (nonatomic, strong) CBCharacteristic *characteristic;
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
//创建中心设备
CBCentralManager *manager = [[CBCentralManager alloc]initWithDelegate:self queue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)];
self.manager = manager;
//扫描外设(Peripherals)
//服务特征的唯一标示 设备厂商 提供 说明书
//服务:XXXXXXX 特征: LLLLL YYYYYY 服务 : CCCCCCC 特征 : HHHHHHH EEEEEE
CBUUID *uuid = [CBUUID UUIDWithString:@"XXXXXXXXXX"];
[manager scanForPeripheralsWithServices:@[uuid] options:nil];
//连接外设
//扫描服务
//扫描特征
//往外设中写入数据
//建议 参考官方demo ;
}
//用户选择蓝牙的时候会执行 ----只是用于演示有这么一个接口的作用
- (void)btnClick
{
//数组中取出 连接的那个外设
CBPeripheral *p = self.peripherals[1];
//用户选择连接哪个外设
[self.manager connectPeripheral:p options:nil];
//设置代理
p.delegate = self;
}
#pragma CBCentralManagerDelegate
//扫描到外设就会调用
- (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 discoverServices:@[@"HHHHHHHHH"]];
}
#pragma mark - CBPeripheralDelegate
//扫描到服务就会调用
- (void)peripheral:(CBPeripheral *)peripheral didDiscoverServices:(NSError *)error
{
for (CBService *service in peripheral.services) {
//Characteristic 特征
[peripheral discoverCharacteristics:@[@"说明书中的特征"] forService:service];
}
}
//扫描到特征就会调用
- (void)peripheral:(CBPeripheral *)peripheral didDiscoverCharacteristicsForService:(CBService *)service error:(NSError *)error
{
for (CBCharacteristic *characteristic in service.characteristics) {
if ( [characteristic.UUID.UUIDString isEqualToString:@"kaiguan"]) {
//数据交互
self.characteristic = characteristic;
[peripheral writeValue:[@"YES" dataUsingEncoding:NSUTF8StringEncoding] forCharacteristic:characteristic type:CBCharacteristicWriteWithoutResponse];
}
}
}
@end