iPhoneでBLEのUUIDを調べ、サービスに名前をつける
すべてのBLEサービスとキャラクタリスティックにはUUIDがあります。それを見るには、Periphery のインスペクターで機器に接続します。各サービスとキャラクタリスティックには生のUUIDが表示され、よく知られたものにはBattery Levelのように2A19に対する読める名前も表示されます。この名前はアプリ内に保存された小さなリストから得られるためオフラインでも使えますが、そこにないUUIDは生の16進数のままです。
短いUUIDと長いUUID
Bluetooth SIGが定義するサービスとキャラクタリスティックは、180Fが表すBattery Serviceのように、16桁ではなく4桁の16進数で書かれる短い16ビットUUIDを使います。ベンダーやホビー用途のプロジェクトは、Nordic UARTサービスの6E400001-B5A3-F393-E0A9-E50E24DCCA9Eのような完全な128ビットUUIDを使います。短いUUIDはそれだけで調べられますが、長いカスタムUUIDは、作った側が公開していない限り意味を持ちません。
Bluetooth機器のサービスのUUIDを調べる方法
- スキャン をタップして機器を探します。一覧が長い場合は 名前または UUID によるフィルター で名前で絞り込みます。
- 機器をタップしてインスペクターを開きます。Periphery が接続し、見つけたすべてのサービスを一覧表示します。
- 各サービスの見出しには、Periphery が知っている場合は名前が、それ以外は生のUUIDが表示されます。見出しをタップするとキャラクタリスティックを折りたたんだり展開したりできます。
- 各キャラクタリスティックの名前の下には、生のUUIDが常に小さな文字で表示されるので、自分のコードやメモにコピーできます。
スキャン画面の各行にある識別子は別のものです。それはiOSが機器自体に割り当てるIDで、サービスのUUIDではありません。
Peripheryがオフラインで名前をつけられるUUID
内蔵リストは短く、開発者が最もよく出会うものに絞られています。解決できるのは次の項目です。
| UUID | 表示される名前 |
|---|---|
| 1800 | Generic Access |
| 1801 | Generic Attribute |
| 180A | Device Information |
| 180D | Heart Rate |
| 180F | Battery Service |
| 1810 | Blood Pressure |
| 1812 | Human Interface Device |
| 1816 | Cycling Speed and Cadence |
| 1818 | Cycling Power |
| 181A | Environmental Sensing |
| FFF0 | Xiaomi Service |
| 6E400001-B5A3-F393-E0A9-E50E24DCCA9E | Nordic UART Service |
| 5C7A4CD0-07F5-4F60-BF6A-C7B2A61CBBF8 | ESP32 Custom Service |
| ADE3D529-C784-4F63-A987-EB69F70EE816 | Shelly BLU |
| UUID | 表示される名前 |
|---|---|
| 2A19 | Battery Level |
| 2A24 | Model Number |
| 2A26 | Firmware Revision |
| 2A29 | Manufacturer Name |
| 2A37 | Heart Rate Measurement |
| 2A38 | Body Sensor Location |
| 2A6E | Temperature |
| 2A6F | Humidity |
| FFF1 | Xiaomi Data |
| 6E400002-B5A3-F393-E0A9-E50E24DCCA9E | Nordic UART RX |
| 6E400003-B5A3-F393-E0A9-E50E24DCCA9E | Nordic UART TX |
合計25個のUUIDです。Bluetooth SIGの完全なリストではないため、それ以外はすべて生のUUIDとして表示され、チップベンダーのドキュメントやBluetooth SIGのAssigned Numbersで調べられます。
実例:Nordic UARTボード
Nordic UARTサービスを実行しているnRFベースのボードに接続すると、インスペクターにそのサービスがNordic UART Serviceとして表示されます。その下にはWタグを持つNordic UART RX(6E400002-...)、つまり書き込み先のキャラクタリスティックと、Nタグを持つNordic UART TX(6E400003-...)、つまりデータを送ってくるキャラクタリスティックが見えます。上部のカードには Nordic UART デバイス と表示されます。
よくある間違い
- スキャン画面の機器識別子とサービスUUIDを混同すること。これらは無関係です。
- FFF0が常にXiaomiを意味すると思い込むこと。多くの安価な機器がFFF0とFFF1を自分たちのデータのために使い回しています。
- すべてのカスタムUUIDに名前がついていると期待すること。カスタムの128ビットUUIDは、作った側が公開していない限り非公開です。
- スキャンのフィルターでサービスをUUIDで検索すること。名前または UUID によるフィルター は機器の名前かiOSの識別子に一致するだけで、その中のサービスには一致しません。