IOS BLE从入门到精通

**系统要求:IOS7.0开始支持BLE,但是这里使用swift语言,swift是需要IOS8.0以上,所以,这里系统都是IOS8.0以上
硬件要求:iphone 4s以上(包含4s),才有BLE硬件。**
1.先获取到一个蓝牙的manager:

// BLE需要蓝牙库支持,所以,需要导入蓝牙框架 import CoreBluetooth manager = CBCentralManager(delegate: self, queue: nil);

这里delegate需要实现以下方法:
// 蓝牙启用状态,这个回调会在创建manger时回调 func centralManagerDidUpdateState(central: CBCentralManager){ if(central.state == CBCentralManagerState.PoweredOn){ // 可以使用 } }

2.扫描蓝牙:
manager?.scanForPeripheralsWithServices(nil, options: nil); // 这里是没有设置过滤方法,如果需要过滤特定设备,可以在这里添加特定的uuid // 扫描回调 func centralManager(central: CBCentralManager, didDiscoverPeripheral peripheral: CBPeripheral, advertisementData: [String : AnyObject], RSSI: NSNumber){ // peripheral是扫描到的设备对象 // advertisementData广播数据 // RSSI信号强度,是个整数(负数越大,信号越弱),通常这样取值:RSSI.integerValue }

3.停止扫描:
manager?.stopScan();

4.连接BLE(在安卓上面,连接前需要停止扫描,IOS虽然不需要,但是也建议停止扫描)
manager.connectPeripheral(peripheral, options: nil); // 连接成功回调 func centralManager(central: CBCentralManager, didConnectPeripheral peripheral: CBPeripheral) { } // 连接失败回调 func centralManager(central: CBCentralManager, didFailToConnectPeripheral peripheral: CBPeripheral, error: NSError?) { }

5.断开连接
manager.cancelPeripheralConnection(peripheral); // 断开连接回调 func centralManager(central: CBCentralManager, didDisconnectPeripheral peripheral: CBPeripheral, error: NSError?) { }

6.判断手机蓝牙是否开启
// 查看是否使能 func isEnable() -> Bool{ return (manager!.state == CBCentralManagerState.PoweredOn); }

连接成功后->需要发现服务->再发现服务里面的特征值(服务相当于一个文件夹,特征值相当于里面的文件,每个特征值就是一个通信通道,BLE的通信就是通过这些特征值通信的)
7.设置设备的代理方法
peripheral.delegate = self;

8.发现服务,特征值
peripheral.discoverCharacteristics(nil, forService: (task as! DiscoverServicesAction).getService()!); // 发现服务回调 func peripheral(peripheral: CBPeripheral, didDiscoverServices error: NSError?){ //如果error是nil就说明是正常,如果不是nil就说明发现服务失败了,需要断开重新连接 // 遍历所有服务,并且发现服务里面的特征值(实际使用无需全部发现,只需要发现需要用到的特征值就行了) for service in peripheral.services! as [CBService]{ peripheral.discoverCharacteristics(nil, forService: service); } } // 发现特征值回调,并且记录下后面需要用到的特征值 func peripheral(peripheral: CBPeripheral, didDiscoverCharacteristicsForService service: CBService, error: NSError?){ for charact in (service?.characteristics)! { // 遍历此服务里面的所有特征值 } }

9.写数据(往某个特征值写入数据,通常是在20字节以内)
peripheral.writeValue(senddata!, forCharacteristic: characteristic, type: CBCharacteristicWriteType.WithoutResponse); // 写特征值回调 func peripheral(peripheral: CBPeripheral, didWriteValueForCharacteristic characteristic: CBCharacteristic, error: NSError?){ }

10.开启通道的接收数据功能(notify),BLE里面接收数据,一般使用notify,也有使用其他方式,这里使用notify作为代表
peripheral.setNotifyValue(task2.isEnable(), forCharacteristic: characteristic); // 更新notify回调 func peripheral(peripheral: CBPeripheral, didUpdateNotificationStateForCharacteristic characteristic: CBCharacteristic, error: NSError?){ }

11.接收数据(notify)
// 更新特征值,设备主动发数据,和手机主动去读某个特征值,结果都是走这个回调 func peripheral(peripheral: CBPeripheral, didUpdateValueForCharacteristic characteristic: CBCharacteristic, error: NSError?){ }

12.手机主动读取某个特征值数据
peripheral.readValueForCharacteristic(characteristic); // 结果走上面那个回调

13.手机主动读取此时的设备信号强度
peripheral.readRSSI(); // 读取rssi回调 func peripheral(peripheral: CBPeripheral, didReadRSSI RSSI: NSNumber, error: NSError?){ }

14.判断设备是否连接
peripheral.state == CBPeripheralState.Connected;

【IOS BLE从入门到精通】IOS对BLE的支持还是比较到位,基本没什么坑,没什么需要特别注意的点

    推荐阅读