前回の記事「【Swift】Core Bluetoothを使ってiPhoneとBluetooth端末を接続する」に引き続き、Core Bluetooth の使い方についてです。
前回までに iPhone と Bluetooth 端末の接続はできていたので、今回は、その後の Bluetooth 端末からデータを取得する方法についてです。
実装についてですが、以前の記事は大きくは間違っておりませんでした。
修正したのは、Characteristics
を発見してからの処理です。
// Characteristics を発見したら呼ばれる func peripheral(_ peripheral: CBPeripheral, didDiscoverCharacteristicsFor service: CBService, error: Error?) { print("Find Characteristics") for i in service.characteristics!{ if i.uuid == characteristicsUUID[0] { myPeripheral?.setNotifyValue(true, for: i) } } } // Characteristic の値が更新されたら呼ばれる func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic, error: Error?) { let data: Data = characteristic.value! let hexStr = data.map { String(format: "%02hhx ", $0) }.joined() print(hexStr) }
まず、4行目からの処理で、characteristic を発見したあと、その UUID が指定した値と一致したら、.setNotifyValue
を設定しています。
これを指定すると、値が更新されるたびに 12行目からの関数が呼び出されるので、この関数内でデータを取得し、ログに表示しています。
データをファイルに保存したり、どこかに送信したりする場合は、この関数内で行えばいいと思います。
なお、今回は取得データをスペース区切りの16進数に変換しています。
Data 型を16進数に変換する処理については、こちらの記事を参考にさせていただきました。
Swift3で追加されたData構造体の使い方レシピ – A Day In The Life
http://glassonion.hatenablog.com/entry/2017/01/20/003716
修正点としてはこれだけでした!
前回の記事ではデータがおかしい…と書いていましたが、試しに取得したデータを分析してもらったところ、データ自体に欠けはあるものの、形式としては合っているとのことでした。
あとは、なぜそのデータの欠損が発生しているのかを調べなければ!
以上、Code Bluetooth を使って iPhone と Bluetooth 端末を接続・データを取得する方法でした。
ご参考になれば幸いです。