Central側を実装する最終更新日:2015-09-14TweetCoreBluetoothを使って、Peripheralの、特定のサービスの特定のCharacteristicの値を読み取るには、次の6ステップで実装します。実装済みのサンプルはこちらCBCentralManagerを作るサービスのUUIDを指定してPeripheralを検索するPeripheralに接続するPeripheralのサービスをUUID指定で検索するサービスのCharacteristicをUUID指定で検索するCharacteristicから値を読み取る順にみていきましょう。CBCentralManagerを作るまずはviewDidLoad()のあたりでCBCentralManagerオブジェクトを作ります。今回はdelegateにself(=ViewController)を指定したので、ViewControllerにCBCentralManagerDelegateプロトコルをつけます。サービスとCharacteristicのUUIDを表すオブジェクトも作っておきます。UUIDを表すオブジェクト生成。}}オブジェクトを作ると、早速CBCentralManagerDelegateのcentralManagerDidUpdateState()が呼ばれます。端末のBluetoothがOFFの場合は次の図のようにダイアログが出ます。BluetoothがONの時のみ、後続の処理を行うようcentralManagerDidUpdateState()を実装します。}}サービスのUUIDを指定してPeripheralを検索するBluetoothがONになっているのを確認したら、次はPeripheralの検索です。検索はCBCentralManagerのscanForPeripheralsWithServices()を使います。第1引数には検索対象とするサービスのUUIDを配列で指定します。nilを指定すると見つかるもの全部を返すので、デバッグ時はnilを指定して、ちゃんとPeripheralが見つかるか確認することもできます。第2引数は検索オプションですが、詳しくは別の回で紹介します。scan")}見つかると、CBCentralManagerDelegateのcentralManager:didDiscoverPeripheral:advertisementData:RSSI()が呼ばれます。引数に見つかったperipheralが渡されますが、後続の処理実行中にGCされてしまうことがあるので強参照で捕まえておきます。self}また、delegateも設定するので、対象クラス(ここではViewController)にCBPeripheralDelegateをつけておきます。中身は省略}Peripheralに接続するPeripheralが見つかったら、次は接続します。接続するにはCBCentralManagerのconnectPeripheralを使います。advertisementのデータだけ使うのであれば接続は必要ありません。省電力のため他のPeripheralのスキャンは止めておきます。止めるにはCBCentralManagerのstopScan()を使います(出典:Appleのドキュメント)。nil)self.manager.stopScan()接続が完了すると、CBCentralManagerDelegateのcentralManager:didConnectPeripheralが呼ばれます。peripheral")}PeripheralのサービスをUUID指定で検索するPeripheralに接続できたら、次はPeripheralが提供しているサービスをUUID指定で検索します。検索するにはCBPeripheralのdiscoverServices()を使います。引数には検索したいサービスのUUIDを配列で渡します。Peripheralの検索と同様、デバッグ時はnilを渡すことですべてのサービスを検索することができます。self.peripheral.discoverServices([self.serviceUUID])サービスが見つかると、CBPeripheralDelegateのperipheral:didDiscoverServices:errorが呼ばれます。エラー時は第3引数に何か値が入っているのでそこで確認します。}サービスのCharacteristicをUUID指定で検索するPeripheralのサービスが見つかったら、次はサービスに紐づくCharacteristicを検索します。見つかったサービスの中から、目的のサービスを次のようにして見つけます。見つかったらCBPeripheralのdiscoverCharacteristics:forService:service()で検索を開始します。第1引数には検索対象となるCharacteristicのUUIDを配列で指定します。nilを指定した場合の挙動はこれまでと同様、すべてを検索対象とします。}Characteristicが見つかると、CBPeripheralDelegateのperipheral:didDiscoverCharacteristicsForService:error()が呼ばれます。見つかった時の処理}Characteristicから値を読み取るCharacteristicまで見つけたら、ようやくBLEデバイス側の値を読み取ることができます。値を読み取るにはCBPeripheralのreadValueForCharacteristic()を使います。self.peripheral.readValueForCharacteristic(c)値を最後まで読み取ると、CBPeripheralDelegateのperipheral:didUpdateValueForCharacteristic:error()が呼ばれます。読み取った値はCBCharacteristicのvalueプロパティにNSDataの形で入っています。self.addMessage("value=\(data!)")}一覧に戻るモケラボ株式会社モケラボ株式会社は、AndroidやiOSアプリ開発をやっています。お仕事などのご依頼・ご相談はこちらからお願いいたします。