Bluetooth SMART デバイス(LE GATT Profile)と連携するWindows Store Appsの開発
最近、Bluetooth SMARTというロゴのついた健康器具や時計など、ガジェットが増えてきました。家電量販店に行ったらパッケージをガン見していくと、結構おいてあります。
そして、残念ながら、AndroidやiOS対応と書かれているもの多数で、Windowsストアアプリ対応のものが少ないのが現実。うん、でも、欲しければ作ってストアから公開してしまえばよいのです。それがソフトウェア開発者の生きる道(なんてね)
Bluetooth SMARTのロゴがついているデバイスは、Bluetooth Low Energy GATT(Generic Attribute) Profileという、標準規格に則ってインターフェイスが規定されています。
で紹介したように、これ、Windows 8.1で追加された新しいAPIでアクセス可能です。基本は上のURLのページを見て勉強してください。Bluetooth SMARTのインターフェイス群は、
https://developer.bluetooth.org/gatt/Pages/default.aspx
で公開されています。一つのデバイスは、複数のServiceを提供し、Serviceには複数のCharacteristicsが含まれ、Characteristicsは、Descriptorを含む場合があります。これらすべて、Bluetooth Orgのページにデータの取得方法について記載があります。
標準化されているプロファイル膨大です。売られているガジェットにはどんなServiceをサポートしているか公開されているものはほとんどありません。連携するStoreアプリを開発するには、先ず、各ガジェットがサポートするService群を調べる必要があります。
サポートしているServiceを調べるために、ストアアプリを作って公開してみました。
調べたいガジェットを先ず、設定チャーム→PC設定の変更→PCとデバイス→Bluetooth でペアリングしてください。Bluetooth SMARTデバイスは大抵の場合ボタン電池で動いていて、PCに近づければデバイスのリストに表示されるはずです。
ペアリング後、このアプリを起動してください。リストにBluetooth SMARTデバイス群が表示されます。調べたいデバイスをタップすると、そのデバイスがサポートしているServiceがリストの右側に表示されます。Serviceの項目をタップすると、そのServiceが含んでいるCharacteristicsのリストが表示されるページに移動します。更にDescriptorのリストが表示され、詳細を調べていくことが可能です。
点線で囲んだ部分をタップすると、Bluetooth ORGの仕様詳細ページに飛びます。
Service、Characteristics、Descriptorで、水色のWinRT API Supportedアイコンが表示されている項目は、Windows.Devices.Bluetooth.GenericAttributeProfile名前空間の、GattServiceUuids、GattCharacteristicUuids、GattDescriptorUuidsで、あらかじめWinRT APIの列挙子として定義されているものであることを示しています。
ストアアプリ内でのデバイス発見は、
var deviceWatcher = DeviceInformation.CreateWatcher(GattDeviceService.GetDeviceSelectorFromUuid(GattServiceUuids.BloodPressure));
deviceWatcher.Added += deviceWatcher_Added;
こんな感じで、WinRT APIで定義された列挙子定義を使って取り扱いが可能なものです。
一方、
という、アイコンの項目のものは、WinRTには定義がありません。でも問題Nothing。私が公開したアプリで表示される各項目のUuid、これを直接指定してガジェットと接続することができるんです。例えば、
var deviceWatcher = DeviceInformation.CreateWatcher(GattDeviceService.GetDeviceSelectorFromUuid(Guid.Parse("{00001816-0000-1000-8000-00805f9b34fb}")));
こんな形で、Uuidの値を直書きすれば接続できます。ちなみにこの値は、CYCLING_SPEED_AND_CADENCE です。GattDeviceService、GattCharacteristicクラスのメソッドにそれぞれ、Uuidを指定して含んでいる定義の取り出しが用意されていますが、それらも、全て同じ感じでアクセス可能です。Uuidは、アプリが表示するUuidを使ってください。で、具体的にどんなデータ構造、とか、呼び出し形式とかは、Bluetooth Orgの標準仕様の説明を見てくださいね。
サンプルは、https://code.msdn.microsoft.com/Bluetooth-Generic-5a99ef95 を参考にすると良いでしょう。
はい、では、連携アプリどんどん作ってくださいね。
あ、ストアアプリ+デバイス連携については、Facebookのグループページもあるので、興味のある方ご参加ください。ストアで公開されたアプリの自慢もOK。