概述
每个外部蓝牙设备有自己的UUID。
每个蓝牙设备可能有多个server,每个server可能有多个characteristic,每个server和characteristic都有自己的UUID。
建立centerManager
myCentralManager = [[CBCentralManager alloc] initWithDelegate:self queue:nil]
扫描外部设备
1.开始扫描:
[myCentralManager scanForPeripheralsWithServices:nil options:nil];
2.扫描到设备:
-(void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI
其中,peripheral中包括identifier、name、isConnected和state。可以保存此peripheral,也可以只保存它的identifier,然后在需要时使retrievePeripheralsWithIdentifiers获取peripheral。此时peripheral很可能还不包含它的services。
advertisementData包括一些其他信息,设备自定义的广播信息也可以在其中:
NSData *data = [advertisementData objectForKey:CBAdvertisementDataManufacturerDataKey];
3.结束扫描:
[myCentralManager stopScan];
连接设备
1.启动连接设备
[mTsInstance.centralManager connectPeripheral:mThisPeripheral options:nil];
2.连接成功回调。在这里启动搜寻设备的服务
-(void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheral { [peripheral discoverServices:nil]; }
3.发现设备的服务后回调。服务存放在peripheral.services中,可以遍历所有server,通过UUID找到自己需要的server。然后搜寻该server的characteristics
- (void)peripheral:(CBPeripheral *)peripheral didDiscoverServices:(NSError *)error { NSArray *services = peripheral.services; CBService *service = services[0]; [peripheral discoverCharacteristics:nil forService:services[0]]; }
4.发现服务的特征后回调。特征放在service.characteristics中,可以遍历所有的characteristics,通过UUID找到自己需要的特征。并保存该特征以便读写等操作。
-(void)peripheral:(CBPeripheral *)peripheral didDiscoverCharacteristicsForService:(CBService *)service error:(NSError *)error{ for (CBCharacteristic *ch in service.characteristics) { if ([ch.UUID isEqual:[CBUUID UUIDWithString:@"XXXXX"]]) { //save the characteristic } } }
与设备通信-读写
- (void)readValueForCharacteristic:(CBCharacteristic *)characteristic - (void)writeValue:(NSData *)data forCharacteristic:(CBCharacteristic *)characteristic type:(CBCharacteristicWriteType)type