Looking for ios Keywords? Try Ask4Keywords

iOSConfigurer les balises avec CoreBluetooth


Introduction

Chaud pour lire et écrire des données sur un appareil Bluetooth basse consommation.

Remarques

Quelques points importants

  • Aucune capacité n'est requise.
  • iPhone stockez les octets au format Little Endian, vérifiez donc si les accessoires Bluetooth utilisent également Little Endian. Exemple:
    • Intel CPU utilise généralement peu d'endian.
    • L'architecture ARM était un peu endian avant la version 3 lorsqu'elle est devenue big-endian.
  • Après une opération unique ou par lots, la connexion sera perdue, vous devez donc vous reconnecter avant de continuer.

Scan for SERVICE UUID

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

Comment découvrir UUID SERVICE sans documentation

func centralManager(_ central: CBCentralManager, didConnect peripheral:             
CBPeripheral) {
        peripheral.delegate = self
        peripheral.discoverServices(nil)
}

func peripheral(_ peripheral: CBPeripheral, didDiscoverServices error: Error?) {
    for service in peripheral.services! {
        print("Service: \(service)\n error: \(error)")
    }
}
  • discoverServices (nil) - NIL signifie que tous les services seront retournés, ce qui n'est pas une bonne option. (LIRE les remarques 3)
  • Si vous n'avez pas trouvé l'UUID de SERVICE, exécutez votre code et cherchez dans la console entrer la description de l'image ici
  • J'ai trouvé 3 services: Batterie, Informations sur l'appareil (Firmware) et FFF0
  • Ce service uuid n'est pas un service standard, une liste de normes peut être trouvée ici
  • FFF0 est l'UUID de SERVICE dans ce cas

Convertir des données en UInt16 et contraire

Ajoutez cette extension à votre classe

protocol DataConvertible {
    init?(data: Data)
    var data: Data { get }
}

extension DataConvertible {

    init?(data: Data) {
        guard data.count == MemoryLayout<Self>.size else { return nil }
        self = data.withUnsafeBytes { $0.pointee }
    }

    var data: Data {
        var value = self
        return Data(buffer: UnsafeBufferPointer(start: &value, count: 1))
    }
}
extension UInt16 : DataConvertible {
    init?(data: Data) {
        guard data.count == MemoryLayout<UInt16>.size else { return nil }
        self = data.withUnsafeBytes { $0.pointee }
    }
    var data: Data {
        var value = CFSwapInt16HostToBig(self)
        return Data(buffer: UnsafeBufferPointer(start: &value, count: 1))
    }
}

Configurer les balises avec CoreBluetooth Exemples Liés