iOS BLE 连接

介绍

Bluetooth Low Energy(BLE)是一种低功耗的无线通信技术,用于在设备之间建立短距离的通信连接。在iOS开发中,我们可以使用CoreBluetooth框架来实现BLE连接。本文将介绍如何在iOS应用中使用CoreBluetooth框架来建立和管理BLE连接。

流程图

flowchart TD
    subgraph iOS Device
        A(Scan for Peripherals) --> B(Connect to Peripheral)
        B(Connect to Peripheral) --> C(Discover Services)
        C(Discover Services) --> D(Discover Characteristics)
        D(Discover Characteristics) --> E(Read/Write Data)
        E(Read/Write Data) --> F(Manage Connections)
    end

    subgraph Peripheral Device
        G(Broadcast) --> H(Receive Connection)
        H(Receive Connection) --> I(Expose Services)
        I(Expose Services) --> J(Expose Characteristics)
        J(Expose Characteristics) --> K(Receive/Respond to Data)
        K(Receive/Respond to Data) --> L(Manage Connections)
    end

BLE 连接流程

  1. 扫描周围的设备(外设)。
  2. 连接到特定的设备。
  3. 发现外设提供的服务(Services)。
  4. 发现服务中的特性(Characteristics)。
  5. 读取或写入特性中的数据。
  6. 管理连接,包括断开连接等操作。

代码示例

扫描外设

import CoreBluetooth

class BLEManager: NSObject, CBCentralManagerDelegate {
    var centralManager: CBCentralManager!
    
    override init() {
        super.init()
        centralManager = CBCentralManager(delegate: self, queue: nil)
    }
    
    func centralManagerDidUpdateState(_ central: CBCentralManager) {
        if central.state == .poweredOn {
            centralManager.scanForPeripherals(withServices: nil, options: nil)
        }
    }
    
    func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
        // 处理扫描到的外设
    }
}

连接到外设

func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
    if peripheral.name == "MyDevice" {
        centralManager.stopScan()
        centralManager.connect(peripheral, options: nil)
    }
}

发现服务和特性

func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral) {
    peripheral.delegate = self
    peripheral.discoverServices(nil)
}

func peripheral(_ peripheral: CBPeripheral, didDiscoverServices error: Error?) {
    if let services = peripheral.services {
        for service in services {
            peripheral.discoverCharacteristics(nil, for: service)
        }
    }
}

读取和写入数据

func peripheral(_ peripheral: CBPeripheral, didDiscoverCharacteristicsFor service: CBService, error: Error?) {
    if let characteristics = service.characteristics {
        for characteristic in characteristics {
            if characteristic.properties.contains(.read) {
                peripheral.readValue(for: characteristic)
            }
            if characteristic.properties.contains(.write) {
                peripheral.writeValue(data, for: characteristic, type: .withResponse)
            }
        }
    }
}

func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic, error: Error?) {
    if let data = characteristic.value {
        // 处理读取到的数据
    }
}

func peripheral(_ peripheral: CBPeripheral, didWriteValueFor characteristic: CBCharacteristic, error: Error?) {
    // 写入数据完成后的处理
}

管理连接

func centralManager(_ central: CBCentralManager, didDisconnectPeripheral peripheral: CBPeripheral, error: Error?) {
    // 连接断开后的处理
}

func peripheral(_ peripheral: CBPeripheral, didReadRSSI RSSI: NSNumber, error: Error?) {
    // 读取信号强度后的处理
}

总结

通过CoreBluetooth框架,我们可以轻松实现iOS设备与外设之间的BLE连接。我们可以扫描、连接、发现服务和特性,读取和写入数据以及管理连接。希望本文对你理解iOS BLE连接有所帮助。

BLE Connection Journey