LoginSignup
5
4

More than 5 years have passed since last update.

Mio FUSE+Device Connectでリアルタイム心拍数の計測と受信

Last updated at Posted at 2018-10-16

概要

システム構成図

ウェアラブルウォッチ「mio FUSE」が計測するリアルタイム心拍数を、Device Web API ManagerによってWebサーバー化したAndroidデバイスを介し、WebSocketで受信する。

Device Web API Managerは「Device Connectシステムをスマートフォン上で実現するアプリケーション1」で、これ
を用いることで、APIが公開されていないスマートデバイスでも、REST API / WebSocketで簡単にデータを取得することができる。

環境

Mio FUSEとは

ウェアラブルウォッチ。心拍数を測ることができる。

Mio FUSE

Device Web API Managerとは

Device Web API Managerは「Device Connectシステムをスマートフォン上で実現するアプリケーション1」。

Device Connectとは

Device Connectはスマートフォン上に仮想のHTTPサーバを立てて、それを介してスマートデバイス(Pebble、THETA、Hue、スマートグラスなどなど)をWeb APIで操作できるGotAPIの一実装です。

Device Connectとは?

NTT docomo社が中心となって開発、啓蒙している技術で、各種デバイスへの接続をDeviceConnectが行い、さらにその操作するAPIをWeb APIとして提供してくれるものです。スマートフォンの中にアプリケーションサーバが立ち上がるので、Web APIを使ってデバイスにデータを送ったり、逆に取り出せるようになります。

hifive x DeviceConnectによるWoT体験ハンズオン!

何が便利なのか

  • スマートデバイスへのアクセスを抽象化してくれる。
  • APIが公開されていないスマートデバイスでも、REST API / WebSocketで簡単にデータを取得したり、デバイスの操作ができる。

DeviceConnectの情報

やってみよう

Device Web API Manager

インストールとビルド

  1. AndroidデバイスにDevice Web API Managerをインストール
  2. ビルドマニュアルに沿って、HeartRateプラグインをビルド

プラグインがビルドされると、「MIO GLOBAL-FUSEアイコン」がトップページに表示される。
Screenshot_20181015-190905.jpg

Mio FUSEとAndroidデバイスをBluetooth接続

AndroidデバイスにMio Goをインストールし、MioFuseとAndroidデバイスをBluetooth接続する。
接続に成功すると、「MIO GLOBAL-FUSEアイコン」が明るくなる。
Screenshot_20181016-145437.jpg

設定

「トップページ」の右上から「設定」に進み、必要な設定をする。
一部の設定はDevice Web API Managerをオフにしないと変更できないので、オフにする。
変更を終えたら、再びオンにする。
Screenshot_20181016-153736.jpg

認証

「外部IPを許可」にチェック
「Local OAuth認証」「Origin有効化」のチェックを外し、無効にする(手順を簡略化するための、本記事固有の設定です)。

Host

「設定」に表示されたHostを控えておく。
Screenshot_20181015-191131.jpg

serviceId

「トップページ」→「MIO GLOBAL-FUSE」→「serviceinfomation」→「GET /gotapi/serviceinfomation/」
と進み、表示されたserviceIdを控えておく。
Screenshot_20181015-193109.jpg

WebSocketで受信する

macOSデバイスからWebSocketでリアルタイム心拍数を取得する。
macOSデバイスとAndroidデバイスを、あらかじめ同じネットワークに接続しておく。

手順

WebSocketについて - DeviceConnect Users

上記ページにある手順を、簡潔にまとめた。

  1. 接続
  2. sessionKeyを送信
  3. Web APIをコール
  4. イベントの受信

これをNode.jsで実装したのが下のコードになる。

Node.jsでの実装

a-r-i/deviceconnect_websocket_nodejs - GitHub

WebSocket受信部分

app.js
const WebSocket = require('ws');

const hostname = ''; //控えておいたHost
const ws = new WebSocket('ws://'+ hostname +':4035/websocket');
const sessionKey = 'test'; //sessionKeyはなんでもよい

ws.onopen = function () { //1.接続
    ws.send('{"sessionKey": "' + sessionKey+ '"}'); //2.sessionKeyを送信
    callWebAPI(sessionKey); //3.Web APIをコール
};

ws.onerror = function (error) {
    console.log(error);
};

ws.onmessage = function (message) { //4.イベントの受信

    try {
        var json = JSON.parse(message.data);
        var bpm = json['heart']['rate']['value'];
        console.log('BPM:' + bpm);
    } catch (e) {
        console.log('This doesn\'t look like a valid JSON: ',
            message.data);
        return;
    }

};

WebAPIコール部分

main.js
const http = require('http');

function callWebAPI(sessionKey) {
    const resource = 'health/onheart'; //心拍数APIのパス
    const serviceId = ''; //控えたserviceId

    const options = {
        host: hostname,
        port: '4035',
        path: '/gotapi/' + resource + '?serviceId=' + serviceId + '&sessionKey=' + sessionKey,
        method: 'PUT',
        headers: {
            'Content-Type': 'application/json'
        }
    };

    const req = http.request(options, function (res) {
        var responseString = '';

        res.on('data', function (data) {
            responseString += data;

            try {
                var json = JSON.parse(data);
            } catch (e) {
                console.log('This doesn\'t look like a valid JSON: ',
                    data);
                return;
            }

        });
        res.on('end', function () {
            return responseString;
        });
    });

    req.on('error', function (error) {
        console.log(error);
    });

    req.end();
}

参考文献

結果

bpm.gif

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4