iOS 扫描 BLE 设备的教程

在这篇文章中,我们将学习如何在 iOS 上扫描蓝牙低能耗(BLE)设备。随着智能设备的普及,BLE 已成为连接各种设备的重要方式。以下是实现 BLE 设备扫描的基本流程。

流程图

步骤 描述
1 导入 CoreBluetooth 框架
2 创建一个管理类,遵循 CBCentralManagerDelegate 协议
3 初始化中央管理器并启动扫描
4 处理发现的设备
5 处理扫描停止

代码实现

1. 导入 CoreBluetooth 框架

首先,确保您的项目中添加了 CoreBluetooth 框架。您可以在项目的设置中找到“Linked Frameworks and Libraries”,然后添加 CoreBluetooth.framework。

2. 创建中央管理器类

创建一个名为 BluetoothManager 的 Swift 类:

import CoreBluetooth

class BluetoothManager: 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)
            print("开始扫描BLE设备")
        } else {
            print("蓝牙不可用")
        }
    }

    // 发现设备的回调方法
    func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
        print("发现设备:\(peripheral.name ?? "无名设备"),RSSI:\(RSSI)")
    }
}

3. 实例化 BluetoothManager 并运行

在您的 ViewController 中,您可以实例化并运行 BluetoothManager 类。

class ViewController: UIViewController {
    var bluetoothManager: BluetoothManager!

    override func viewDidLoad() {
        super.viewDidLoad()
        bluetoothManager = BluetoothManager()
    }
}

4. 处理发现的设备

didDiscover 方法中,您将获取到扫描到的 BLE 设备。您可以在该方法中完成您需要的各种操作,例如连接设备。

func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
    print("发现设备:\(peripheral.name ?? "无名设备"),RSSI:\(RSSI)")
    // 可以在这里连接设备
    centralManager.connect(peripheral, options: nil)
}

5. 处理扫描停止

一旦你想停止扫描,你可以在适当的地方调用以下代码:

centralManager.stopScan()
print("停止扫描BLE设备")

饼状图示例

以下是一个 BLE 设备扫描的状态饼状图:

pie
    title BLE 设备状态分布
    "扫描中": 70
    "已连接": 20
    "未连接": 10

关系图示例

以下是 BluetoothManagerCBCentralManager 的关系图:

erDiagram
    BluetoothManager {
        +CBCentralManager centralManager
        +void scanForPeripherals()
        +void connectPeripheral()
    }
    CBCentralManager {
        -state: CBManagerState
        +delegate
        +scanForPeripherals()
        +stopScan()
    }

结尾

通过本教程,我们了解了如何在 iOS 上扫描 BLE 设备。虽然过程涉及多个步骤和代码实现,但一旦掌握,便可以进一步开发和扩展BLE应用程序的功能。希望这篇文章能够为你的学习之旅提供帮助,祝你在 iOS 开发的世界中探索愉快!