如何在 ios swift 中连接蓝牙低功耗?

Posted

技术标签:

【中文标题】如何在 ios swift 中连接蓝牙低功耗?【英文标题】:how to connect with bluetooth low energy in ios swift? 【发布时间】:2017-04-12 01:52:01 【问题描述】:

我想连接 ble 外围设备。 但是我的代码没有调用 didConect 函数

这是我的代码:

func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) 
 let device = (advertisementData as NSDictionary)
            .object(forKey: CBAdvertisementDataLocalNameKey)
            as? NSString

        if device?.contains(BEAN_NAME) == true 

            print("Did discover peripheral", peripheral)

            self.bluetoothManager.stopScan()
            self._peripheral = peripheral
            self._peripheral.delegate = self
            central.connect(peripheral, options: nil)
        



func centralManager( central: CBCentralManager, didConnect peripheral: CBPeripheral)  //cant call this
        print("connected to \(BEAN_NAME)")
        peripheral.discoverServices(nil)
    

日志:

BLE service is powered on
Did discover peripheral <CBPeripheral: 0x1740eef00, identifier = 4872623B-F872-443A-8A96-F4E1F84D6841, name = GoDoor in  :), state = disconnected>

【问题讨论】:

您确认您的if 测试通过了吗?通常您会保存您感兴趣的设备的identifier,而不是查看广告数据。 是的。日志打印“确实发现外围设备”。当我在 central.connect 之后打印一些东西时,它会打印在日志中。好像 central.connect 没有执行。@Paulw11 _peripheral 是如何声明的?您是否实现了didFailToConnect 委托方法以防连接失败? 现在我可以做功能 didConnect 外围设备,由于“”符号而失败。它必须是:func centralManager( central: CBCentralManager, didConnect peripheral: CBPeripheral) 感谢@Paulw11 的帮助 【参考方案1】:

我创建了一个演示项目,它会扫描蓝牙 LE 设备并将它们显示在列表中:

在 github 上查看:quickies/BluetoothScanner.ios

截图

【讨论】:

【参考方案2】:

我已经解决了这个问题。 只需要改变:

func centralManager(central: CBCentralManager, didConnect peripheral: CBPeripheral)

进入这个:

func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral)

参考:Swift 3: Can't connect to peripheral via BLE

【讨论】:

很好的发现。 Swift 3 中更改的委托方法签名之前也让我很伤心,尽管如此,我在看你的问题时并没有发现这一点。【参考方案3】:
      @IBAction func btnConnect(_ sender: UIButton)

        self.appDelegate.bleManager.stopScan()

        self.appDelegate.selectPeripheral = self.arrayPeripheral[sender.tag]

        self.appDelegate.bleManager.connect(self.selectPeripheral, options: nil)

      

【讨论】:

以上是关于如何在 ios swift 中连接蓝牙低功耗?的主要内容,如果未能解决你的问题,请参考以下文章

iOS 和 Android 蓝牙低功耗连接之间的区别

获取蓝牙低功耗外设的MAC地址

如何连接蓝牙低功耗设备

iOS上的蓝牙与蓝牙低功耗

Android BLE低功耗蓝牙开发极简系列(二)之读写操作

如何连接蓝牙低功耗设备