iPhoneからBLEキャラクタリスティックを読み書きし、通知を受け取る方法
Periphery のインスペクターで機器を開くと、各キャラクタリスティックが対応する操作のボタンを表示します。読む で値を取得し、書く で16進数として入力したバイトを送信し、通知する で 停止通知 をタップするまでライブの更新を受信します。値は ヘックス、小数、ASCII、バイナリ のいずれかで表示できます。ノートパソコンなしで自作のファームウェアを手早くテストできます。
BLEのサービス・キャラクタリスティック・プロパティを1分で
BLE機器はデータをサービスにまとめ、それぞれのサービスがキャラクタリスティックを持ちます。キャラクタリスティックは電池残量やデータチャンネルのような1つの値で、そのプロパティが何をしてよいかを示します。読み取る、書き込む、変化を通知してもらう、のいずれかです。Periphery はそれらのプロパティを各行の小さなタグで示します。Rは読み取り、Wは書き込み、Nは通知またはインジケートです。
キャラクタリスティックを読み取る方法
- スキャン をタップし、目的の機器をタップします。Periphery が接続し、そのサービスを一覧表示します。
- Rタグの付いたキャラクタリスティックを見つけて 読む をタップします。
- 値がそのキャラクタリスティックの下に表示されます。フォーマット ピッカーで ヘックス、小数、ASCII、バイナリ を切り替えられます。
キャラクタリスティックにバイトを書き込む方法
- Wタグの付いたキャラクタリスティックで 書く をタップします。16進数を入力 シートが開きます。
- バイトを16進数のペアで入力します。例えば01 FF。スペースは省略できます。
- 入力欄の下の行を確認します。送信されるバイト数か、テキストが正しい16進数でないという警告が表示されます。
- 送信 をタップして書き込むか、キャンセル で書き込まずに閉じます。
キャラクタリスティックが応答付き書き込みに対応していれば、Periphery はそれを使い、機器からの確認を待ちます。応答なし書き込みのみに対応している場合はバイトが確認なしで送信されるため、値を読み直したり通知を確認して届いたかどうかを確かめてください。
通知を受信する方法
- Nタグの付いたキャラクタリスティックで 通知する をタップします。
- 機器が新しい値を送るたびに、キャラクタリスティックの下の表示が置き換えられます。
- 停止通知 をタップすると受信をやめます。インスペクターを離れると接続が切れ、すべての受信が終わります。
実例:1つの値、4つの表示形式
テスト用のボードに送るような3バイトを返すキャラクタリスティックがあるとします。各表示形式でどのように見えるかを示します。
| 形式 | 表示 |
|---|---|
| Hex | 01 41 42 |
| Decimal | 1 65 66 |
| Binary | 00000001 01000001 01000010 |
| ASCII | 最初のバイトだけは印字できず、残りの2つはAB という文字として表示 |
16進数で5Aを返すBattery Level(2A19)キャラクタリスティックは、Decimalでは90になり、これは90%を意味します。Manufacturer Nameのようなテキストのフィールドは、ASCIIで読むのが最も読みやすいです。
Proでテストセッションをログに残す
Periphery Proがあると、接続中のすべての読み取り・書き込み・通知が、タイムスタンプ、方向、キャラクタリスティックUUID、生のバイトとともに自動で保存されます。ログ タブを開くと各セッションとそのパケット数が確認でき、セッションをスワイプして エクスポート でプレーンテキストとして共有したり、削除 で削除したりできます。パケットが1つもないセッションは、インスペクターを離れると自動的に破棄されます。Proがない場合、何も記録されません。
コツとよくある間違い
- ボタンはそのキャラクタリスティックが許可する操作にしか表示されません。読む ボタンがないのはプロパティが設定されていないからで、アプリが隠しているわけではありません。
- BLEの複数バイトの数値はたいていリトルエンディアンです。16進数の34 12は0x1234であり、0x3412ではありません。
- ペアリングや暗号化が必要なキャラクタリスティックでは、読み書きが失敗することがあります。iOSがペアリングを処理するので、その確認を受け入れて再試行してください。
- 通常、1つの携帯機器やアプリしか同時に接続を保持できません。まず自分のテスト用アプリや別の携帯機器の接続を切ってください。