iOS Affichage des noms de tous les Bluetooth Low Energy (BLE)


Exemple

  • Pour cet exemple, j'ai une salle contrôlée avec un seul périphérique BLE.
  • Votre classe devrait étendre CBCentralManagerDelegate.
  • Implémentez la méthode: centralManagerDidUpdateState (_ central: CBCentralManager).
  • Utilisez la file d'attente globale pour ne pas geler l'écran lors de la recherche d'un périphérique.
  • Instanciez CBCentralManager et attendez la réponse de callback centralManagerDidUpdateState.
class BLEController: CBCentralManagerDelegate{

var cb_manager: CBCentralManager!
var bles : [CBPeripheral] = []

    override func viewDidLoad() {
        super.viewDidLoad()
        cb_manager = CBCentralManager(delegate: self, queue: DispatchQueue.global())
    }

    func centralManagerDidUpdateState(_ central: CBCentralManager) {
        print("UPDATE STATE - \(central)")
    }
}

Le rappel de centralManagerDidUpdateState indique que CoreBluetooth est prêt, vous pouvez donc rechercher BLE maintenant. Mettez à jour le code centralManagerDidUpdateState pour rechercher tout périphérique BLE lorsqu'il est prêt.

func centralManagerDidUpdateState(_ central: CBCentralManager) {
    print("UPDATE STATE - \(central)")
    SearchBLE()
}

func SearchBLE(){
    cb_manager.scanForPeripherals(withServices: nil, options: nil)
    StopSearchBLE()
}

func StopSearchBLE() {
    let when = DispatchTime.now() + 5 // change 5 to desired number of seconds
    DispatchQueue.main.asyncAfter(deadline: when) {
        self.cb_manager.stopScan()
    }
}
  • SearchBLE () recherche les périphériques BLE et arrête la recherche après 5 secondes
  • cb_manager.scanForPeripherals (withServices: nil, options: nil) recherche chaque BLE à portée de main.
  • StopSearchBLE () arrête la recherche après 5 secondes.
  • Chaque BLE trouvée rappellera func centralManager (_ central: CBCentralManager, périphérique didDiscover: CBPeripheral, advertisementData: [String: Any], rssi RSSI: NSNumber)
func centralManager(_ central: CBCentralManager, didDiscover peripheral:                                                             
    CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
    guard let name = peripheral.name else {
        return
    }
    print(name)
    bles.append(peripheral)
}