
こちらの記事について、内容・翻訳・視点・長さなど、皆様のご意見をお送りください。今後の記事製作の参考にしたいと思います。

Thank you! Your feedback has been received.

There was a problem submitting your feedback, please try again later.

こちらの記事の感想をお聞かせください。
スマートブレスレッドのお蔭で体調も良くなってしばらくたったころ、ちょうど今年5月ゴールデンウィーク前に中国深圳市にあるLoRaWAN関連ハードウェアメーカー Dragino社に出張する機会がありましたので、ついでに前途のスマートブレスレットを製造しているメーカー元へ訪ねてみました。
*深圳市郊外スマートブレスレットメーカー会議室にて
スマートブレスレット工場に訪問した理由は、スマートブレスレットの専用スマホアプリWearfitのSDKキットと技術資料を入手することでした。
帰国後、さっそくSDKキットと中国語で書かれた技術資料をもとにスマートブレスレットをBluetooth経由で制御できないか? 社内で検討してみました。
*Wearfitプロトコルの基本仕様
ホスト(Android、iOS)とクライアント(ブレスレット)間プロトコルの基本仕様は、次のとおりです。
- ホスト - >クライアント間プロトコル
- クライアント - >ホスト間プロトコル
- データパケット⻑は20バイト以内。20バイト超のデータは別パケットで送信各々のデータパケット形式は以下を参照してください。
・1.2 クライアント - >ホスト間プロトコル
クライアント->ホスト間プロトコルは、表1-1に⽰すように、開始フレーム+ ID、データ⻑、データ0、データパケットヘッダ、データ1、および他の情報が含まれます。
表1-1 クライアント->ホスト間プロトコル解析
*Data Legth:データ⻑は、Data Legth以降のパケットヘッダを含まないデータサイズをバイト単位で⽰し、そのデータサイズは[Total length-1]となります。
*Status:ステータス表⽰(下記のプロトコルを参照のこと)
1.3 ホスト - >クライアント間プロトコル
中国語で書かれた技術資料をGoogle翻訳で和訳し、ホスト(スマホ)とクライアント(スマートブレスレット)の相互通信の仕様は理解しました。しかし、転送される各サービスの定義に関しては、詳細資料がないために開発元であるはずのスマートブレスレット工場のマネージャーに質問しました。しかし、質問した内容を理解されず、自力で解析するしかなくなりました。
そこでスマートブレスレットに搭載されているBluetoothチップの情報をもとにWearfitを開発した会社(たぶんスマートブレスレットとは違う現地のソフト会社?)のBluetooth SIGの標準仕様とは別の独自GATT情報を解析しました。
*GATTとは?
GATT(Generic attribute profile)-汎用アトリビュートプロファイルは、ATT(アトリビュートプロトコル)を用いてデータを構造化する方法と、アプリケーション間でのやり取りの方法を定義します。Bluetooth low energyのアプリケーションは、すべてこのGATTを使用して構築されることから、GATTはBluetooth low energyのデータ転送の主軸となるものです。
GATTには、Bluetooth SIGが公式に提供しているプロファイルと、機器メーカなどの独自提供のものがあります。Bluetooth SIGが定義しているプロファイルには、Alert Notification(アラート通知)、Blood Pressure(血圧計)、Health Thermometer(体温計)、Heart Rate(心拍数)、Location and Navigation(位置とナビ)などがあります。これらはすべて、Bluetooth low energy用に定義されたもので、Bluetooth v3以前のプロファイルとは互換性がありません。
情報参照元:
http://micro.rohm.com/jp/techweb_iot/knowledge/iot02/s-iot02/04-s-iot02/3469
試行錯誤を何度も重ねてgatttoolというBluetoothライブラリでスマートブレスレットとRaspberry Piをつかいながら、プロトコルのサービス内容の定義ができるところまで辿りました。
*Raspberry Piとスマートブレスレットの連携
Raspberry Piからgatttoolコマンドを使用したスマートブレスレットの設定および情報取得の方法について説明します。
1.確認環境
以下の環境で確認しています。
・Raspberry Pi Zero W
・Raspbian(jessie)
2.スマートブレスレットのMACアドレス取得
(1)ラズベリーパイに以下のコマンドを入力し、スマートブレスレットのMACアドレス取得します。
$ sudo hcitool lescan
LE Scan ...
XX:XX:XX:XX:XX:XX B2
この場合、B2という名前のスマートブレスレットです。
3.スマートブレスレットのhandle取得
(1)gatttoolを対話モードで起動します。(XX:XX:XX:XX:XX:XXはスマートブレスレットのMACアドレス)
$ sudo gatttool -b XX:XX:XX:XX:XX:XX -t random –I
(2)スマートブレスレットと接続します。(以下、gatttoolの対話モードでの入力です。)
$ connect
Attempting to connect to XX:XX:XX:XX:XX:XX
Connection successful
(3)Notificationを有効にするhandleを取得します。
> char-read-uuid 00002902-0000-1000-8000-00805f9b34fb
handle: 0x000b value: 00 00
handle: 0x000f value: 00 00
handle: 0x0017 value: 00 00
handle: 0x001d value: 00 00
handle: 0x0020 value: 00 00
複数のhandleが表示されます。
(4)Notificationを有効にするhandleを特定します。
上記(3)で取得したhandleに上から順に0100を設定します。
> char-write-req 0x000f 0100
Characteristic value was written successfully
Notification handle = 0x000e value: ab 00 05 ff 91 80 00 50
Notification handle = 0x000e value: ab 00 0d ff 92 c0 03 06 a3 00 00 00 00 00 00 04
上記の様に、設定後、「Notification handle = …」と表示されるhandleがNotificationを有効にするhandle(この場合は0x000e)です。
(5)制御データの書き込み先handleを取得します。
> primary
attr handle: 0x0001, end grp handle: 0x0007 uuid: 00001800-0000-1000-8000-00805f9b34fb
attr handle: 0x0008, end grp handle: 0x000b uuid: 00001801-0000-1000-8000-00805f9b34fb
attr handle: 0x000c, end grp handle: 0x0011 uuid: 6e400001-b5a3-f393-e0a9-e50e24dcca9e
attr handle: 0x0012, end grp handle: 0x0019 uuid: 00001530-1212-efde-1523-785feabcd123
attr handle: 0x001a, end grp handle: 0xffff uuid: 0000fee7-0000-1000-8000-00805f9b34fb
6e400001で始まるuuidのend grp handle: にある値(この場合は0x0011)が制御データの書き込み先handleです。
(6)スマートブレスレットの接続を解除します。
> disconnect
(7)gatttoolを終了します。
> exit
4.スマートブレスレットの設定および情報取得
各ハンドルの値は以下の通りとします。スマートブレスレットに合わせて3.で取得した値に読み替えてください。書き込みデータおよび出力データの詳細はWearfit仕様書を参照してください。
Notificationを有効にするhandle : 0x000f
制御データの書き込み先handle : 0x0011
(1)gatttoolを対話モードで起動します。
$ sudo gatttool -b XX:XX:XX:XX:XX:XX -t random –I
(2)スマートブレスレットと接続します。(以下、gatttoolの対話モードでの入力です。)
> connect
(3)Notificationを有効にします。
> char-write-req 0x000f 0100
(4)定時測定をONにします。(毎時0分に測定するように設定します。)
> char-write-req 0x0011 ab0005FF78800101
(5)データ同期要求をします。
> char-write-req 0x0011 ab0009ff5180001207010100
毎時0分に測定したデータが表示されます。
(6)心拍数一回測定をします。
> char-write-req 0x0011 ab0004ff310901
1分程度待ちます。
> char-write-req 0x0011 ab0004ff310900
測定データが表示されます。
(7)血圧一回測定をします。
> char-write-req 0x0011 ab0004ff312101
1分程度待ちます。
> char-write-req 0x0011 ab0004ff312100
測定データが表示されます。
(8)ブレスレット探索をします。
> char-write-req 0x0011 ab0003ff7180
スマートブレスレットが振動します。
(9)スマートブレスレットの接続を解除します。
> disconnect
(10)gatttoolを終了します。
> exit
上述のLinuxのシェル上でホスト(Raspberry Pi)とクライアント(スマートブレスレット)との相方向通信と定義されたサービスが送信可能であることが検証できましたので、これを何らかのコンピュータ言語でプログラムにする必要があります。
そこで、The Things Network Niigata (新潟)イニシエータの田中さんに依頼し、まず最初にWiFi環境下でスマートブレスレットの血圧値と心拍数と血中酸素をRaspberry Piで取得して、遠隔地からでも見える化、つまりスマートヘルスケアシステムの構築をお願いしました。 --- その3へつづく
今回、この記事のデモキットの開発にご協力いただいたThe Things Network Niigataイニシエータ田中さんのサイト