技業LOG
はじめに
前回※はIoTというキーワードに関して、一般的な解釈を記載し、また、活動量計について簡単にご説明しました。今回は、実際に活動量計で計測したデータを確認してみます。
- ※
Bluetoothについて
活動量計は、データの収集ができます。活動量計自身で収集したデータを保存、解析することも可能ではありますが、活動量計自体の性能等が求められることとなり、現実的ではありません。
そのため、一般的には活動量計から別のシステムへデータを転送し、データの保存・解析を行うこととなります。この転送技術には、無線技術が利用されることがほとんどです。
無線技術の中でよく利用される技術の一つが、Bluetoothとなります。
Bluetoothについては、仕様書バージョン1.0が1999年7月に発表されました。
以後、何度かのバージョンアップが発表され、最新のバージョンは、2016年12月に発表をされたバージョン5となります。(2017年8月現在)
ただ、市場にでまわっているBLE機器については、Bluetooth4.0世代が中心となっており、バージョン5への移行はもう少し先になるかもしれません。
バージョン4.0は、Bluetooth Low Energy(略称BLE)という呼称となっており、バージョン3.0以前と比較し、大幅な省電力を実現しており、機器の小型化・省コスト化により、幅広い用途での利用がされています。
ここでは、BLEに関して、簡単に説明します。
BLEは、プロトコルとプロファイルの二つの仕様定義から成り立ちます。
- プロトコル
コントローラー/ホスト/アプリケーションの3つの仕様定義が存在します。
ここでは、個々の説明は割愛します。 - GATTの説明
GATT(Generic Attribute Profile 汎用属性(アトリビュート)プロファイル)とは、BLEデバイス同士が接続し、端末保持しているデータの送受信をおこなうための基本的なデータモデルを定義しています。すべてのBLEデバイスが、GATTで定義されている仕様のもとにデータのやり取りをおこなうことにより、異なるデバイス間であっても、共通のデータとして扱うことが可能となります。
次項で実際に、活動量計から取得できるプロファイル情報を確認してみたいと思います。
活動量計からの情報
実際にBLEデバイス(活動量計)から取得できる情報を確認してみます。
取得するプロファイル情報は、心拍数を扱う「Heart Rate Measurement」です。
「Heart Rate Measurement」のフォーマットを次表に示します。
プロファイル情報:Heart Rate Measurement
Type:Notification
Assigned Number: 0x2A37
フォーマット:
# | Name | bit長 | 説明 |
---|---|---|---|
(1) | Heart Rate Value Format bit | 1 | (6)のフォーマットを指定する。 0:unsigned 8-bit integer 1:unsigned 16-bit integer |
(2) | Sensor Contact Status bits | 2 | 計測可能な状態であるかを指定する。 00 or 01:機能として、対応していない 10:計測可能な状態ではない 11:計測可能な状態である |
(3) | Energy Expended Status bit | 1 | (7)の有無を指定する。 |
(4) | RR-Interval bit | 1 | (8)の有無を指定する。 |
(5) | Reserved for future use | 3 | 予約領域 |
(6) | Heart Rate Measurement Value | 8or16 | 計測された心拍値 |
(7) | Energy Expended | 16 | 計測機のバッテリー状態 |
(8) | RR-Interval | 16 | RRI(※)の値 |
- ※RRI:心拍の変動時系列データ
(2)については、例えば、活動量系が体から離れており、正しいデータの取得ができないような状態の場合、「10」となり、正しいデータが取得できる状態の場合、「11」となります。
今回は、Android OS上で動作するサンプルアプリケーションを準備し、実際に活動量計から取得した情報をコンソール表示します。
環境
活動量計:EPSON Pulsense
BLE受信機:Android OS端末(スマートフォン)
サンプルアプリケーション:活動量計とのペアリング・BLE送受信の結果をコンソール出力
取得結果は次の通りです。
:
08-15 14:53:32.049 9870-9870/com.example.android.bluetoothlegatt D/BluetoothGatt: registerApp() - UUID=f1d8ed91-46a4-4529-a83e-ed3de3d6dac0
08-15 14:53:32.050 9870-9870/com.example.android.bluetoothlegatt D/BluetoothLeService: Trying to create a new connection.
08-15 14:53:32.055 9870-9882/com.example.android.bluetoothlegatt D/BluetoothGatt: onClientRegistered() - status=0 clientIf=5
08-15 14:53:32.249 9870-9891/com.example.android.bluetoothlegatt D/BluetoothGatt: onClientConnectionState() - status=0 clientIf=5 device=F6:A0:90:79:38:8B
08-15 14:53:32.252 9870-9891/com.example.android.bluetoothlegatt I/BluetoothLeService: Connected to GATT server.
08-15 14:53:32.252 9870-9891/com.example.android.bluetoothlegatt D/BluetoothGatt: discoverServices() - device: F6:A0:90:79:38:8B
08-15 14:53:32.256 9870-9891/com.example.android.bluetoothlegatt I/BluetoothLeService: Attempting to start service discovery:true
08-15 14:53:32.268 9870-9891/com.example.android.bluetoothlegatt D/BluetoothGatt: onSearchComplete() = Device=F6:A0:90:79:38:8B Status=0
08-15 14:53:49.857 9870-9870/com.example.android.bluetoothlegatt V/BoostFramework: BoostFramework() : mPerf = com.qualcomm.qti.Performance@82f90eb
08-15 14:53:49.857 9870-9870/com.example.android.bluetoothlegatt V/BoostFramework: BoostFramework() : mPerf = com.qualcomm.qti.Performance@b2a7e48
08-15 14:53:50.630 9870-9870/com.example.android.bluetoothlegatt D/BluetoothGatt: setCharacteristicNotification() - uuid: 00002a37-0000-1000-8000-00805f9b34fb enable: true ・・・ ①
08-15 14:53:55.107 9870-9881/com.example.android.bluetoothlegatt I/System.out: 00001110010111000000001100000010 ・・・ ②
:
- ①:キャラクタリスティックを取得しています。uuidに「2a37」とあり、このデータが、「Heart Rate Measurement」であることを示しています。
- ②:①のデータに含まれるbit列を表示しています。
このbit列は、以下のように区分けすることが可能です。
0
0
0
0
1
1
1
0
0
1
0
1
1
1
0
0
0
0
0
0
0
0
1
1
0
0
0
0
0
0
1
0
このうち、黄色にあたる8bitが、先ほどのデータフォーマットの(1)~(5)に当てはまりますが、
bitが反転しているため、実際は、次のbit列に置き換えて、判断をします。
0 | 1 | 1 | 1 | 0 | 0 | 0 | 0 |
1bit目が、「0」となっていることから、心拍は8bitで表現されていることがわかり、水色のbit列が心拍数を示していることがわかります。
0 | 1 | 0 | 1 | 1 | 1 | 0 | 0 |
これを、10進数に変換を行うと、「92」となり、計測された心拍数を判断することができます。
さいごに
今回、「Heart Rate Measurement」プロファイルを確認しましたが、GATTで規定されているプロファイルは、多数存在します。その中には、
- ■BLP(Blood Pressure Profile) 血圧プロファイル
- ■GLP(Glucose Profile) グルコース プロファイル
- ■HTP(Health Thermometer Profile) 体温計プロファイル
- ■RSCP(Running Speed and Cadence Profile) 走行速度とケイデンス プロファイル
など、ヘルスケアに関係しそうなデータモデルも規定がされています。
今後、これらのプロファイルを活用したさらなる活動量計などのデバイスが開発され、また、Bluetoothのバージョン5が普及することにより、新たなサービスが生まれてくるかもしれません。
技業LOG
この記事で紹介しているサービスは
こちら
みまもりがじゅ丸®
フィールドで働く方々の「安全」と「健康」をみまもる、NTTPCのウェアラブルIoTサービス
おすすめ記事
お気軽にご相談ください
- ※「みまもりがじゅ丸」は、NTTPCコミュニケーションズの登録商標です。