iOSConfigura i beacon con CoreBluetooth


introduzione

Caldo da leggere e scrivere dati su un dispositivo a basso consumo di bluetooth.

Osservazioni

Alcuni punti importanti

  • Non sono necessarie capacità.
  • I byte del negozio di iPhone in formato Little Endian, quindi controlla se l'accessorio Bluetooth usa anche Little Endian. Esempio:
    • CPU Intel generalmente usa little endian.
    • L'architettura ARM era little-endian prima della versione 3 quando divenne big-endian.
  • Dopo un'operazione singola o batch, la connessione andrà persa, quindi è necessario riconnettersi prima di continuare.

Cerca UUID SERVICE

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

Come scoprire SERVICE UUID senza documentazione

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 significa che tutti i servizi saranno restituiti, che non è una buona opzione. (LEGGI Note 3)
  • Se non hai trovato l'UUID SERVICE, esegui il tuo codice e cerca nella console inserisci la descrizione dell'immagine qui
  • Ho trovato 3 servizi: batteria, informazioni sul dispositivo (firmware) e FFF0
  • Questo servizio uuid non è uno standard, una lista con gli standard può trovare qui
  • FFF0 è l'UUID di SERVIZIO in questo caso

Converti i dati in UInt16 e viceversa

Aggiungi queste estensioni alla tua 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))
    }
}

Configura i beacon con CoreBluetooth Esempi correlati