BlueTooth作为center使用总结

概述

每个外部蓝牙设备有自己的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
原文地址:https://www.cnblogs.com/zhongriqianqian/p/3978828.html