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