J'ai touché à la BLE, je vais donc la résumer sous forme de mémorandum.
C'est différent pour ceux qui l'ont vu, non? S'il y a quelque chose comme ça, veuillez le signaler.
iOS 13.3 xcode 11.5 swift 5.2.4
Le nom officiel est ** Bluetooth Low Energy **, qui est une norme spécialisée dans la faible consommation d'énergie et le faible coût. Il y a de nombreux changements par rapport à la norme précédente (Bluetooth Classic) et elle n'est pas compatible. (Mais il semble y avoir une technologie double mode de BLE et Bluetooth classique?)
BLE a les caractéristiques suivantes.
--Basse consommation énergétique
Joue un rôle dans le contrôle de la communication Exemple) iPhone, PC, etc.
Il n'a pas de fonction de contrôle de communication car il communique en réponse à la demande de Central.
Exemple) Beacon
--Service: existe toujours dans le périphérique et représente une unité fonctionnelle --Caractéristique: contient des données réellement échangées
Peripheral continue d'envoyer régulièrement des informations sur lui-même par communication unidirectionnelle (communication par diffusion) afin que Central puisse se reconnaître.
RSSI(Received signal strength indication) Valeur numérique (valeur relative) indiquant la force du signal reçu entrant dans l'entrée du récepteur
Il sera connecté en environ 3 étapes.
** 1. Le périphérique envoie une annonce ** ** 2. Central reçoit l'annonce et envoie une demande de connexion ** ** 3. Connexion terminée **
En guise de procédure, vous pouvez facilement vous connecter.
Importez le framework "Core Bluetooth".
import CoreBluetooth
Ensuite, définissez les variables d'instance (membre) requises cette fois.
var centralManager: CBCentralManager!
var peripheral: CBPeripheral!
Créez une instance à utiliser dans le main cette fois.
self.centralManager = CBCentralManager(delegate: self, queue: nil, options: nil)
Utilisez l'instance que vous venez de créer pour lancer la recherche de périphériques.
self.centralManager.scanForPeripherals(withServices: nil, options: nil)
Vous pouvez également spécifier un UUID pour analyser uniquement des périphériques spécifiques.
let services = [CBUUID(string: "○○○")]
self.centralManager.scanForPeripherals(withServices: services, options: nil)
Si un périphérique est trouvé en analysant 4 périphériques, la méthode déléguée suivante est également appelée. La première ligne de cette fonction établit une connexion avec le périphérique trouvé. De plus, puisque nous voulons spécifier un délégué pour ce périphérique, affectez-le à la variable d'instance définie précédemment.
func centralManager(_ central: CBCentralManager,
didDiscover peripheral: CBPeripheral,
advertisementData: [String: Any], rssi RSSI: NSNumber) {
self.centralManager.connect(peripheral, options: nil)
self.peripheral = peripheral
}
Si vous vous connectez avec un périphérique dans 5, la méthode déléguée suivante sera appelée. La première ligne de cette fonction spécifie le délégué. Ensuite, obtenez le service sur la deuxième ligne de la fonction.
func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral) {
self.peripheral.delegate = self
self.peripheral.discoverServices(nil)
}
Lorsque le service est acquis dans 6, la méthode de délégué suivante est appelée. La première ligne de la fonction obtient la caractéristique.
func peripheral(_ peripheral: CBPeripheral, didDiscoverServices error: Error?) {
self.peripheral.discoverCharacteristics(nil, for: (peripheral.services?.first)!)
}
Cette fois, j'ai résumé "Comment gérer le BLE avec Swift" sous forme de mémorandum. Je pense qu'il y a encore certaines parties qui manquent, qui sont erronées et qui sont mal comprises, alors j'aimerais apporter les corrections appropriées.
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)
}
//Démarrez la numérisation en appuyant sur un bouton
@IBAction func scanButton(_ sender: Any) {
self.centralManager.scanForPeripherals(withServices: nil, options: nil)
}
}
extension ViewController: CBCentralManagerDelegate {
//Renvoie l'état BLE
func centralManagerDidUpdateState(_ central: CBCentralManager) {
switch central.state {
case CBManagerState.poweredOn:
print("Le courant est allumé.")
case CBManagerState.poweredOff {
print("L'alimentation est coupée.")
default:
break
}
}
//Appelé après la numérisation
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() //Arrêter la numérisation
}
//Appelé lors de la connexion
func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral) {
self.peripheral.delegate = self
self.peripheral.discoverServices(nil)
}
}
extension ViewController: CBPeripheralDelegate {
//Appelé lors de l'obtention du service
func peripheral(_ peripheral: CBPeripheral, didDiscoverServices error: Error?) {
self.peripheral.discoverCharacteristics(nil, for: (peripheral.services?.first)!)
}
//Appelé lors de l'acquisition de la caractéristique
func peripheral(_ peripheral: CBPeripheral, didDiscoverCharacteristicsFor service: CBService, error: Error?) {
}
}
・ First BLE / Marubun Co., Ltd. ・ Essayez d'exécuter l'exemple BLE sur iOS Swift