Looking for ios Keywords? Try Ask4Keywords

iOSBeacons mit CoreBluetooth konfigurieren


Einführung

Hot zum Lesen und Schreiben von Daten auf ein Bluetooth-Gerät mit niedrigem Energieverbrauch.

Bemerkungen

Einige wichtige Punkte

  • Es sind keine Fähigkeiten erforderlich.
  • iPhone speichert Bytes im Little Endian-Format. Überprüfen Sie daher, ob Bluetooth-Zubehör auch Little Endian verwendet. Beispiel:
    • Intel-CPU verwendet normalerweise Little Endian.
    • Die ARM-Architektur war Little Endian vor der Version 3, als sie Big-Endian wurde.
  • Nach einem Einzel- oder Batch-Vorgang geht die Verbindung verloren, daher müssen Sie die Verbindung wiederherstellen, bevor Sie fortfahren.

Scannen Sie nach SERVICE UUID

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

So entdecken Sie SERVICE UUID ohne Dokumentation

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 bedeutet, dass alle Dienste zurückgegeben werden, was keine gute Option ist. (LESEN Sie die Bemerkungen 3).
  • Wenn Sie die SERVICE-UUID nicht gefunden haben, führen Sie Ihren Code aus und suchen Sie in der Konsole Geben Sie hier die Bildbeschreibung ein
  • Ich habe 3 Dienste gefunden: Batterie, Geräteinformationen (Firmware) und FFF0
  • Dieser uuid-Dienst ist kein Standardservice. Eine Liste mit Standards finden Sie hier
  • In diesem Fall ist FFF0 die SERVICE-UUID

Konvertieren Sie Daten in UInt16 und umgekehrt

Fügen Sie diese Erweiterungen Ihrer Klasse hinzu

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))
    }
}

Beacons mit CoreBluetooth konfigurieren Verwandte Beispiele