1、開(kāi)啟藍(lán)牙:
_manager=?[[CBCentralManager alloc] initWithDelegate:self queue:nil];
2峦筒、藍(lán)牙掃描:
if (_manager.state == CBManagerStatePoweredOn) {
? ? ? ? [selfcancelScanf];
? ? ? ? [_manager scanForPeripheralsWithServices:nil options:nil];
? ? }
3、通過(guò)回調(diào)獲取藍(lán)牙設(shè)備影所,并過(guò)濾所需設(shè)備:
- (void) centralManager:(CBCentralManager*)central didDiscoverPeripheral:(CBPeripheral*)peripheral advertisementData:(NSDictionaryid> *)advertisementData RSSI:(NSNumber*)RSSI {
? ? //忽略沒(méi)有名字的外設(shè)
? ? if(peripheral.name.length==0|| ![peripheral.namehasPrefix:@"SDN"]) {
? ? ? ? return;
? ? }
}
4赠制、連接藍(lán)牙設(shè)備:
[_manager connectPeripheral:peripheral options:nil];
5、等待設(shè)備連接成功回調(diào)后经柴,獲取設(shè)備服務(wù):
- (void) centralManager:(CBCentralManager*)central didConnectPeripheral:(CBPeripheral*)peripheral {
? ? _currentPeripheral = peripheral;
? ? _currentPeripheral.delegate = self;
? ?[_currentPeripheral discoverServices:nil];
}
6狸窘、等待獲取設(shè)備服務(wù)成功回調(diào)后,獲取設(shè)備服務(wù)特征:
- (void)peripheral:(CBPeripheral*)peripheral didDiscoverServices:(nullableNSError*)error {
? ? //LLLog(@"發(fā)現(xiàn)服務(wù):%@",peripheral.services);
? ? //NSLog(@" 當(dāng)前線程? %@",[NSThread currentThread]);
? ? for(CBService*serviceinperipheral.services) {
? ? ? ? //讀取每個(gè)服務(wù)的所有特征
? ? ? ? [peripheraldiscoverCharacteristics:nil forService:service];
? ? }
}
7坯认、等待獲取設(shè)備服務(wù)特征成功回調(diào)后翻擒,可以進(jìn)行通訊:
- (void)peripheral:(CBPeripheral*)peripheral didDiscoverCharacteristicsForService:(CBService*)service error:(nullableNSError*)error {
? ? //LLLog(@"發(fā)現(xiàn)服務(wù)%@的特征%@",service,service.characteristics);
? ? //NSLog(@" 當(dāng)前線程? %@",[NSThread currentThread]);
? ? if([service.UUID.UUIDStringisEqualToString:@"FFE0"]) {
? ? ? ? for (CBCharacteristic *c in service.characteristics) {
? ? ? ? ? ? if([c.UUID.UUIDStringisEqualToString:@"FFE1"]) {
? ? ? ? ? ? ? ? _currentCharacteristic = c;
? ? ? ? ? ? ? ? [_currentPeripheral setNotifyValue:YES forCharacteristic:c];
? ? ? ? ? ? ? ? LLLog(@"%@ 連接成功", peripheral.name);
? ? ? ? ? ? ? ? if([self.delegaterespondsToSelector:@selector(connectCallBack:)])
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? [self.delegate connectCallBack:peripheralConnectStateSuccess];
? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? }
? ? }
}