[SWIFT] [CoreBluetooth] Grundlagen zur Handhabung von BLE unter iOS

Einführung

Ich habe BLE berührt, daher werde ich es als Memorandum zusammenfassen.

Das ist anders für diejenigen, die es gesehen haben, oder? Wenn es so etwas gibt, weisen Sie bitte darauf hin.

Umgebung

iOS 13.3 xcode 11.5 swift 5.2.4

Was ist BLE überhaupt?

Der offizielle Name lautet ** Bluetooth Low Energy **, ein Standard, der sich auf geringen Stromverbrauch und niedrige Kosten spezialisiert hat. Es gibt viele Änderungen gegenüber dem vorherigen Standard (Bluetooth Classic) und es ist nicht kompatibel. (Aber es scheint eine Dual-Mode-Technologie von BLE und Bluetooth classic zu geben?)

BLE verfügt über die folgenden Funktionen.

Charakteristisch

--Energieeffizient

Glossar von BLE

Zentral

Spielt eine Rolle bei der Steuerung der Kommunikation Beispiel) iPhone, PC usw.

Peripherie

Es verfügt nicht über eine Kommunikationssteuerungsfunktion, da es als Antwort auf die Anforderung von Central kommuniziert.
Beispiel) Leuchtfeuer

--Service: Existiert immer im Peripheriegerät und repräsentiert eine Funktionseinheit --Characteristic: Enthält Daten, die tatsächlich ausgetauscht werden

Werben

Peripheral sendet regelmäßig Informationen über sich selbst durch unidirektionale Kommunikation (Broadcast-Kommunikation), damit Central sich selbst erkennen kann.

RSSI(Received signal strength indication) Numerischer Wert (relativer Wert), der die Stärke des empfangenen Signals angibt, das in den Empfängereingang eintritt

Verfahren zum Anschließen an BLE

Es wird in ca. 3 Schritten angeschlossen.

** 1. Peripheriegerät sendet Werbung ** ** 2. Central empfängt die Werbung und sendet eine Verbindungsanfrage ** ** 3. Verbindung hergestellt **

Als Verfahren können Sie einfach eine Verbindung herstellen.

Montageverfahren zum Anschließen an BLE-Geräte

1. Einführung des Frameworks

Importieren Sie das Framework "Core Bluetooth".

import CoreBluetooth

2. Definition der erforderlichen Variablen

Definieren Sie dann die diesmal erforderlichen Instanzvariablen (Mitgliedsvariablen).

var centralManager: CBCentralManager!
var peripheral: CBPeripheral!

3. Instanziierung von CBCentral Manager

Erstellen Sie eine Instanz, die dieses Mal hauptsächlich verwendet werden soll.

self.centralManager = CBCentralManager(delegate: self, queue: nil, options: nil)

4. Starten Sie den Peripheriescan

Verwenden Sie die soeben erstellte Instanz, um nach Peripheriegeräten zu suchen.

self.centralManager.scanForPeripherals(withServices: nil, options: nil)

Sie können auch eine UUID angeben, um nur bestimmte Peripheriegeräte zu scannen.

let services = [CBUUID(string: "○○○")]
self.centralManager.scanForPeripherals(withServices: services, options: nil)

5. Peripherieverbindung

Wenn ein Peripheriegerät durch Scannen von 4 Peripheriegeräten gefunden wird, wird auch die folgende Delegatenmethode aufgerufen. Die erste Zeile in dieser Funktion stellt eine Verbindung zum gefundenen Peripheriegerät her. Da wir einen Delegaten für dieses Peripheriegerät angeben möchten, weisen Sie ihn der zuvor definierten Instanzvariablen zu.

func centralManager(_ central: CBCentralManager,
                    didDiscover peripheral: CBPeripheral,
                    advertisementData: [String: Any], rssi RSSI: NSNumber) {
    self.centralManager.connect(peripheral, options: nil)
    self.peripheral = peripheral
}

6. Service in Anspruch nehmen

Wenn Sie in 5 eine Verbindung zum Peripheriegerät herstellen, wird die folgende Delegatenmethode aufgerufen. Die erste Zeile in dieser Funktion gibt den Delegaten an. Holen Sie sich dann den Dienst in die zweite Zeile der Funktion.

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

7. Charakteristik erhalten

Wenn der Dienst in 6 erworben wird, wird die folgende Delegatenmethode aufgerufen. Die erste Zeile in der Funktion erhält die Charakteristik.

func peripheral(_ peripheral: CBPeripheral, didDiscoverServices error: Error?) {
    self.peripheral.discoverCharacteristics(nil, for: (peripheral.services?.first)!)
}

Zusammenfassung

Dieses Mal habe ich "Wie man mit BLE mit Swift umgeht" als Memorandum zusammengefasst. Ich denke, es gibt noch einige Teile, die fehlen, falsch und unzureichend im Verständnis sind, deshalb möchte ich entsprechende Korrekturen vornehmen.

Ganzer Quellcode

import UIKit
import CoreBluetooth

class ViewController: UIViewController{
    
    var centralManager: CBCentralManager!
    var peripheral: CBPeripheral!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        self.centralManager = CBCentralManager(delegate: self, queue: nil, options: nil)
    }
    
    //Starten Sie den Scanvorgang per Knopfdruck
    @IBAction func scanButton(_ sender: Any) {
        self.centralManager.scanForPeripherals(withServices: nil, options: nil)
    }
}

extension ViewController: CBCentralManagerDelegate {
    //Gibt den BLE-Status zurück
    func centralManagerDidUpdateState(_ central: CBCentralManager) {
        switch central.state {
        case CBManagerState.poweredOn:
            print("Die Stromversorgung ist eingeschaltet.")
        case CBManagerState.poweredOff {
            print("Die Stromversorgung ist ausgeschaltet.")
        default:
            break
        }
    }
    
    //Wird nach dem Scannen aufgerufen
    func centralManager(_ central: CBCentralManager,
                        didDiscover peripheral: CBPeripheral,
                        advertisementData: [String: Any], rssi RSSI: NSNumber) {
        self.centralManager.connect(peripheral, options: nil)
        self.peripheral = peripheral
        self.centralManager.stopScan()    //Stoppen Sie den Scanvorgang
    }
    
    //Wird beim Verbinden aufgerufen
    func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral) {
        self.peripheral.delegate = self
        self.peripheral.discoverServices(nil)
    }
}

extension ViewController: CBPeripheralDelegate {
    //Wird beim Service angerufen
    func peripheral(_ peripheral: CBPeripheral, didDiscoverServices error: Error?) {
        self.peripheral.discoverCharacteristics(nil, for: (peripheral.services?.first)!)
    }
    
    //Wird beim Erwerb von Merkmalen aufgerufen
    func peripheral(_ peripheral: CBPeripheral, didDiscoverCharacteristicsFor service: CBService, error: Error?) {
    }
}

Referenz

Erste BLE / Marubun Co., Ltd.Versuchen Sie, ein BLE-Beispiel unter iOS Swift auszuführen

Recommended Posts

[CoreBluetooth] Grundlagen zur Handhabung von BLE unter iOS
Hinweise zur Verwendung von BLE in iOS-Apps
Ruby on Rails Grundlagen