Se connecter en bluetooth pour échanger des données

Bonjour,

Actuellement j’essaye de créer une application qui se connecte à d’autres d’autres appareils en BLE afin de contrôler certaine parti de ma maison via une application que j’aurai faite.

Actuellement j’arrive à scanner le réseau mais lorsque je me connecte à un appareil, la connexion se coupe directement et je reçois ce message:
Cancelling connection for unused peripheral

J’aimerai comprendre pourquoi je ne peux pas juste rester connecter sur l’appareil pour et ensuite envoyer/recevoir des données comme je le veux.

Voici la partie management que j’essaye de développer.

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        manager = CBCentralManager(delegate: self, queue: nil)
    }
    func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
        print("Peripheral found: " + (peripheral.name ?? "Unknown Name"))
        peripheralsFoundNames.append((peripheral.name ?? "Unknown Name"))
        peripheralsFoundData.append((advertisementData.description ))
        print("RSSI : \(RSSI)")
        if (peripheral.name == "Nordic_UART") {
            print("Ca avance")
            
            manager.connect(peripheral, options: nil)
            print("Description \(manager.debugDescription)")
        }
    }
    func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral) {
        print("Connected to ", peripheral)
        print("Here at didConnect, connected to:" + peripheral.name!)
    }

    func centralManagerDidUpdateState(_ central: CBCentralManager) {
        var consoleMsg = ""
        switch (central.state) {
            
        case .poweredOff:
            consoleMsg = "BLE is powered off"
            
        case .poweredOn:
            consoleMsg = "BLE is powered on"
            manager.scanForPeripherals(withServices: nil, options:nil)

        case .resetting:
            consoleMsg = "BLE is resetting"
            
        case .unauthorized:
            consoleMsg = "BLE is unauthorized"
            
        case .unknown:
            consoleMsg = "BLE is unknown"
            
        case .unsupported:
            consoleMsg = "BLE is not supported"
        }
        print("\(consoleMsg)")
    }

Voila j’espère ne pas avoir trop écrit, je suis très excité à l’idée d’arriver à réussir à contrôler ma maison avec une application que j’aurai faite.

J’espère aussi que vous pourriez m’aider, je vous dit merci d’avance

1 « J'aime »

Bonjour,

Il faut garder le périphérique trouvé dans une variable.

var nordicPeripheral:CBPeripheral?
[...]

func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
[...]
if (peripheral.name == "Nordic_UART") {
    print("Ca avance")
        
    nordicPeripheral = peripheral
    manager.stopScan()                    // Arrêt du scan après avoir trouvé le périphérique.
    manager.connect(nordicPeripheral!, options: nil)
    print("Description \(manager.debugDescription)")
}
[...]

En espérant t’avoir aidé

Bonjour Superpingos,

Oui tu m’as beaucoup aidé, un grand merci à toi :grin:. (Quelle question bête j’ai posé quand même, j’ai honte :sweat_smile:)