Part1 外設(shè)部分開(kāi)發(fā) CBPeripheralManager
1外設(shè)管理器
藍(lán)牙外設(shè)管理中心搞旭,與手機(jī)的藍(lán)牙硬件模板關(guān)聯(lián)顷蟀,可以獲取到手機(jī)中藍(lán)牙模塊的一些狀態(tài)等赃阀,但是管理的就是藍(lán)牙外設(shè)丑瞧。
1.1對(duì)外設(shè)管理器強(qiáng)引用
@property(nonatomic,strong)CBPeripheralManager *peripheralManager;
1.2初始化外設(shè)管理器
self.peripheralManager = [[CBPeripheralManager alloc] initWithDelegate:self queue:dispatch_get_main_queue()];
//遵守協(xié)議
@interface ViewController ()<CBPeripheralManagerDelegate>
1.3創(chuàng)建服務(wù)與特征
- 服務(wù):每個(gè)4.0藍(lán)牙設(shè)備包含若干服務(wù),包括 <code>todo</code>
- 特征:每個(gè)服務(wù)包含若干特征
- 特征與服務(wù)都有一個(gè)唯一標(biāo)識(shí)的UUID,由設(shè)備廠商提供
-(void)setupServiceAndCharacteristic{
//創(chuàng)建服務(wù)
CBUUID *serviceUUID = [CBUUID UUIDWithString:SERVICE_UUID];
CBMutableService *service = [[CBMutableService alloc] initWithType:serviceUUID primary:YES];
//創(chuàng)建特征
CBUUID *characteristicUUID = [CBUUID UUIDWithString:CHARATIC_UUID];
CBMutableCharacteristic *characteristic = [[CBMutableCharacteristic alloc] initWithType:characteristicUUID properties:CBCharacteristicPropertyRead|CBCharacteristicPropertyWrite value:nil permissions:CBAttributePermissionsReadable|CBAttributePermissionsWriteable ];
//將特征添加到服務(wù)中
service.characteristics = @[characteristic];
//添加服務(wù)到外設(shè)中
[self.peripheralManager addService:service]; }
2外設(shè)管理器代理
2.1當(dāng)設(shè)備被更新時(shí)的回調(diào)
// 當(dāng)設(shè)備狀態(tài)被更新回調(diào)
-(void)peripheralManagerDidUpdateState:(CBPeripheralManager *)peripheral
// 判斷設(shè)備狀態(tài)
if(peripheral.state == CBManagerStatePoweredOn) {
// 創(chuàng)建服務(wù)(Service)和特征(Characteristics)
[self setupServiceAndCharacteristic];
// 開(kāi)始廣播
[self.peripheralMgr startAdvertising:@{CBAdvertisementDataServiceUUIDsKey:@[[CBUUID UUIDWithString:SERVICE_UUID]]}];
}
}
2.2 中心設(shè)備向外設(shè)請(qǐng)求讀取數(shù)據(jù)
- (void)peripheralManager:(CBPeripheralManager *)peripheral didReceiveReadRequest:(CBATTRequest *)request {
// 把數(shù)據(jù)給請(qǐng)求對(duì)象->響應(yīng)給中心設(shè)備
request.value = [self.dataTextField.text dataUsingEncoding:NSUTF8StringEncoding];
// 響應(yīng)讀取的操作
[peripheral respondToRequest:request withResult:CBATTErrorSuccess];
}
2.3 中心設(shè)備向外設(shè)寫入數(shù)據(jù)
- (void)peripheralManager:(CBPeripheralManager *)peripheral didReceiveWriteRequests:(NSArray<CBATTRequest *> *)requests {
CBATTRequest *req = [requests lastObject];
self.dataTextField.text = [[NSString alloc] initWithData:req.value encoding:NSUTF8StringEncoding];
}
d0de2dc17c2be041612a0e8da10a8716.jpg