浜松のWEBシステム開発・スマートフォンアプリ開発・RTK-GNSS関連の開発はお任せください
株式会社シーポイントラボ
TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:静岡県浜松市中区富塚町1933-1 佐鳴湖パークタウンサウス2F

【Swift】Core Bluetoothを使ってBluetooth端末からデータを取得する

前回の記事「【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 端末を接続・データを取得する方法でした。
ご参考になれば幸いです。

  • この記事いいね! (0)