LoginSignup
0
2

More than 1 year has passed since last update.

Swift・CoreBluetoothで通信を行いメッセージアプリっぽいのを作った4

Posted at

第4回の内容

お久しぶりです。実はしばらく体調を崩していてこちらの記事の続きを書けていませんでした。。。。
大変申し訳ありません。これからはマイペースに勉強したことを記事にしていけたらなと思います。
今回の内容は以下になります。

  • 接続したBLEデバイスからデータを読み出す
  • 接続したBLEデバイスへデータを書き込む

上記2点を書いていこうと思います。それではレッツゴー

接続したBLEデバイスからデータを読み出す(Read)

  • ペリフェラル(接続したBLEデバイス)からセントラル(iOSアプリ側)がデータを読み出す通信はReadと呼ばれます。
    直感的にはデータを受信すると表現した方がわかりやすいと思います。

実装方法

  • データ読み出しを開始する
    peripheral.readValueForCharacteristic(characteristic)
    上記でキャラクタリスティックの値を取得できます。
  • 実例
    func peripheral(_ peripheral: CBPeripheral, didDiscoverCharacteristicsFor service: CBService, error: Error?) {
        
        let characteristics: NSArray = service.characteristics as! NSArray
        print("\(characteristics.count)個のキャラクタリスティックを発見! \(characteristics)")
        
        for obj in characteristics{
            
            if let characteristic = obj as? CBCharacteristic{
                
                // Read専用のキャラクタリスティックに限定して読み出す
                if characteristic.properties == CBCharacteristicProperties.read{
                    peripheral.readValue(for: characteristic)
                }
                // characteristicに送信先のcharacteristicの値を入れる
                self.characteristic = characteristic
                
            }
        }
    }

ここでは読み出し可能であることを示すCBCharacteristicPropertyReadと一致するかどうかを判定しています。

データの読み出し結果を取得する

func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic, error: Error?) {
        print("読み出し成功! service uuid: \(characteristic.service!.uuid),characteristic uuid: \(characteristic.uuid), value: \(characteristic.value)")
            return
        }
    }

成功すれば上記のようにvalueプロパティより値を取得することができます。

接続したBLEデバイスへデータを書き込む(Write)

  • 簡単に表現するとデータを送信するということです(雑だなオイ)

  • 実装方法

peripheral.writeValue(data, for: characteristic!, type: CBCharacteristicWriteType.withResponse)

上記で書き込み処理を行います。ここでは任意のタイミングで書き込み処理を呼び出す必要があります。

func peripheral(_ peripheral: CBPeripheral, didWriteValueFor characteristic: CBCharacteristic, error: Error?) {
        
        if let error = error{
            print("Write失敗...error:\(error)")
            return
        }
        print("Write成功!")
    }

書き込み処理が成功すれば「Write成功」、失敗すれば「Write失敗」と出力させます。

久しぶりに記事書きましたが、結構書く力が落ちていますね。。
これからはマイペースに自分らしくやっていこうと思います。
セントラル側の実装は以上になります。
完成したプロジェクトのGithubあげますので興味がある方はこちらをご覧ください。
(https://github.com/Croe2019/BLEApp)

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2