登場人物
Central
peripheralからデータを収集して何かしらのタスクをするもの
Peripheral
データを送信するもの。他のperipheralからデータを収集してそれを送信することもある(と書いてあったはず
通信の仕組み
peripheralがadvertising packetを送ってcentralがそれを収集する。advertising packetにはperipheralの名前や主な機能が含まれている。advertising packetを見つけたcentralは接続するようにperipheralにリクエストできる。
peripheralは一つ以上のserviceを持つ。serviceはcharacteristicsかserviceからなっている。characteristicsはserviceの詳細なデータを含む。そのデバイスが温度計であれば温度、心拍計であれば心拍数のような。centralは接続したperipheralのserviceに対してread/writeをリクエストでき
Core Bluetooth
以上の概念はCore Bluetoothにおいて以下のオブジェクトで表される。
- central: CBCentralManager*1
- peripheral: CBPeripheral*2
- service: CBService*3
- characteristics: CBCharacteristic*4
peripheralを探す
必要な箇所を抜粋するとこんな感じ。今日やったのはここまで。
let centralManager = CBCentralManager(delegate: self) // centralを初期化する centralManager.scanForPeripherals(withServices: nil, options: nil) // peripheralを探す
// CBCentralManagerDelegateに準拠するのにこれだけは必要 func centralManagerDidUpdateState(_ central: CBCentralManager) { // centralとしているデバイスのBluetoothの状態を見る // ref: https://developer.apple.com/documentation/corebluetooth/cbmanagerstate } // centralがperipheralを見つけるたびに呼ばれる func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) { print(peripheral.name) }
アプリのスクショはこんな感じ。