繁体   English   中英

BLE设备随机断开

[英]BLE device randomly disconnecting

我正在使用BLE设备,并使用swift将其连接到通孔。 当我打开它时,它将连接,断开连接,然后重新连接。 我不知道为什么首先要断开连接,电池电量为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的观点,即在该区域拥有许多设备可能具有挑战性,但是关于您的代码的几件事使我感到怀疑。

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

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

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

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

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

我的怀疑是,您连接的设备数量超出了您的想象,并且当您断开其中一台设备的连接时,您会重置管理器并破坏其他设备。 可能并非如此,可能有很多事情,但这是您在此处发布的代码中最可疑的部分。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM