BLE设备随机断开连接.



我正在使用BLE设备并使用swift将其连接到via。当我打开它时,它会连接、断开连接,然后重新连接。我不知道为什么它首先断开连接,电池电量为 100%,我没有任何触发断开连接的东西,有人知道会发生什么吗?以下是我的一些函数供参考

func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
kestrelPeripheral = peripheral
kestrelPeripheral.delegate = self
manager.connect(kestrelPeripheral)
manager.stopScan()
self.kestrelIsConnected = true
}
func centralManager(_ central: CBCentralManager, didDisconnectPeripheral peripheral: CBPeripheral, error: Error?) {
delegate?.didDisconnect()
cancelReading()
self.kestrelIsConnected = false
self.manager = CBCentralManager(delegate: self, queue: nil)
}
func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral) {
self.isInitialReading = false
kestrelPeripheral.discoverServices(nil)
delegate?.didConnect()
}

有关更多上下文:

func startReading() {
self.manager = CBCentralManager(delegate: self, queue: nil)
self.takeReading = true
progressHUD = ReadingProgressHUD(text: "Taking Reading")
self.vc!.view.addSubview(self.progressHUD)
}

这将开始读取值

首先,我同意CodeBender的观点,即在该领域拥有大量设备可能具有挑战性,但是关于您的代码的几件事让我怀疑。

首先,您没有记录任何内容,因此很难确切知道发生了什么。您肯定希望记录每个步骤。

确保您正在扫描所需的服务;不要将nil传递到scanForPeripherals。同样,不要将nil传递给discoverServices

但最可疑的部分在这里,我怀疑这可能是原因:

func centralManager(_ central: CBCentralManager, didDisconnectPeripheral peripheral: CBPeripheral, error: Error?) {
...
self.manager = CBCentralManager(delegate: self, queue: nil)
...
}

您不应该在每次外围设备断开连接时都创建一个新管理器。中央管理器处理所有外围设备;不仅仅是一个连接。您应该为整个程序运行设置一次manager,并且通常应避免系统中有多个CBCentralManager对象。让多个经理工作并非不可能,但我发现他们经常互相妨碍。

我怀疑您连接到的设备比您想象的要多,当您断开与其中一个设备的连接时,您会重置您的管理器并破坏其他设备。可能不是这样,可能是很多事情,但这是您在此处发布的代码中最可疑的部分。

最新更新