You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift iOS应用连接ESP32蓝牙失败求助:BLE扫描无响应

问题排查与解决方案

你的iOS应用无法触发BLE扫描回调centralManager(_:didDiscover:advertisementData:rssi:),但ESP32可被第三方工具发现,从以下几个关键方向排查:

1. 确认服务UUID的有效性

检查Penbot.penbotServiceUUID是否为正确的CBUUID实例。你可以在扫描前打印UUID的字符串形式,与BLE Scanner中看到的ESP32服务UUID对比:

print("Target service UUID: \(Penbot.penbotServiceUUID.uuidString)")

如果字符串不匹配(比如大小写错误、字符遗漏),指定该UUID扫描会直接过滤掉目标设备。

2. 检查ESP32的广播数据配置

iOS的scanForPeripherals(withServices:)方法仅会发现广播包中包含目标服务UUID的外设。BLE Scanner能找到设备,是因为它扫描所有设备,而你的ESP32可能未将目标服务UUID加入广播数据。

解决方法二选一:

  • 修改ESP32代码,将目标服务UUID添加到广播包中;
  • 改为扫描所有设备,在回调中过滤目标设备(比如通过设备名称):
    // 修改扫描调用
    centralManager.scanForPeripherals(withServices: nil, options: nil)
    
    // 在didDiscover中过滤
    func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
        print("Testing 3")
        // 假设ESP32的设备名称是"Penbot"
        guard peripheral.name == "Penbot" else { return }
        
        self.centralManager.stopScan()
        self.peripheral = peripheral
        peripheral.delegate = self
        self.centralManager.connect(self.peripheral, options: nil)
    }
    

3. 验证CBCentralManager的代理设置

确保你初始化centralManager时正确绑定了代理,且管理器为类的强引用成员变量:

// 在类的属性中声明
var centralManager: CBCentralManager!

// 在初始化方法中创建实例
centralManager = CBCentralManager(delegate: self, queue: DispatchQueue.main)

如果代理未设置,或者centralManager是局部变量被提前释放,所有回调都无法触发。

4. 检查蓝牙权限配置

在项目的Info.plist中必须添加蓝牙权限描述:

  • iOS 13+:添加NSBluetoothAlwaysUsageDescription,填写权限申请说明(比如"需要蓝牙连接ESP32设备");
  • iOS 12及以下:添加NSBluetoothPeripheralUsageDescription。
    缺少权限会导致系统静默拒绝扫描请求,无任何日志提示。

5. 简化扫描参数测试

暂时移除扫描选项,使用默认配置扫描:

centralManager.scanForPeripherals(withServices: [Penbot.penbotServiceUUID])

避免CBCentralManagerScanOptionAllowDuplicatesKey参数可能带来的干扰,先确认基础扫描逻辑是否正常。


内容的提问来源于stack exchange,提问作者ProjectBlock

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 21:45:35