第3回の内容
ここ2週間ほど仕事の引き継ぎや新しい仕事になったりと、忙しく3回目の投稿ができてませんでした....
本当に申し訳ないです。今日から投稿を再開していきます。
今回は接続したBLEデバイスのサービス・キャラスタリスティックを検索するを実装していきます。
セントラル、ペリフェラル、サービス、キャラクタリスティックとは?
ここから4つの聴き慣れないBLE固有の概念が出てくるので軽く説明します
- セントラル
- BLE通信において、スキャン接続などを行う側のデバイス
- ペリフェラル
- BLEの通信において、スキャンで発見される側のデバイスを指します。1つ以上のサービスを提供します
- サービス
- 1つ以上の「キャラクタリスティック」を持ちます
- キャラクタリスティック
- データを保持します
実装方法
実装の流れ
1.ペリフェラルの持っているサービス一覧を取得
2.サービスの持っているキャラクタリスティック一覧を取得
// ペリフェラルへの接続が成功すると呼ばれる
func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral) {
print("接続成功!")
print("接続したデバイス: \(self.peripheral)")
self.centralManager.stopScan()
// サービス検索結果を受け取るためにデリゲートをセット
self.peripheral.delegate = self
// サービス検索開始
self.peripheral.discoverServices(nil)
}
// サービス発見時に呼ばれる
func peripheral(_ peripheral: CBPeripheral, didDiscoverServices error: Error?) {
let services: NSArray = peripheral.services as! NSArray
print("\(services.count)個のサービスを発見! \(services)")
for obj in services{
if let service = obj as? CBService{
// キャラクタリスティック検索開始
peripheral.discoverCharacteristics(nil, for: service)
}
}
}
// キャラクタリスティック発見時に呼ばれる
func peripheral(_ peripheral: CBPeripheral, didDiscoverCharacteristicsFor service: CBService, error: Error?) {
let characteristics: NSArray = service.characteristics as! NSArray
print("\(characteristics.count)個のキャラクタリスティックを発見! \(characteristics)")
}
処理の流れとしては以上になります。処理を記述した際にCBPeripheralDelegate、CBCentralManagerDelegateが必要になるので、忘れないように注意してください。