ぜのぜ

しりとりしようぜのぜのぜのぜ

240日目 Core Bluetooth始めたメモ

登場人物

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

アプリのスクショはこんな感じ。 peripheralがリストアップされているアプリの画面

参考