目次


スマートフォンを IoT デバイスに変身させる

スマートフォンとの間で送受信されるセンサー・データを処理、視覚化、保管するための Bluemix アプリを作成する

Comments

このチュートリアルでは、スマートフォンによって生成されたセンサー・データを IBM Watson IoT Platform クラウド内でホストされたサービスに送信する方法と、そのデータを処理、視覚化、保管する Bluemix™ アプリケーションを作成する方法を説明します。最後に、スマートフォン向け Android アプリケーションを作成する方法についても説明します。

このチュートリアルは、新しくなったサービス名と最新バージョンを反映して更新されています。以下のビデオでチュートリアルの手順を実演していますが、このビデオで利用している前のバージョンのサービスでは、以前のサービス名が使われています (IBM Internet of Things Foundation は、IBM Watson IoT Platform に改名されました)。

このアーキテクチャーの概要は以下のとおりです。

ソリューションのアーキテクチャーを示す図
ソリューションのアーキテクチャーを示す図

アプリを作成するために必要となる事項


 

1

Bluemix 内で IoT アプリを作成する

Internet of Things Platform Starter ボイラープレートには、Node-RED エンジンが含まれています。後で IoT メッセージを処理する際に、このエンジンを使用します。このステップでは、クラウド上の IBM IoT サーバーとの間で MQTT メッセージを送受信するための Internet of Things サービスを作成します。

  1. Bluemix アカウントにログインします (または、フリートライアルにサインアップしてください)。
  2. 「Catalog (カタログ)」をクリックします。
  3. 「Internet of Things Platform Starter」をクリックします。
  4. アプリの名前を入力します。この名前はホスト名としても使用されるので、Bluemix 内で一意の名前でなければなりません (例えば、「iot<英語表記の自分の名前>」など)。この例では、「iotdemodaniel4」という名前を使用します。「Create an app (アプリの作成)」ダイアログのスクリーン・キャプチャー
  5. 「CREATE (作成)」をクリックします。
  6. ツールバーで「Dashboard (ダッシュボード)」をクリックし、新しく作成したアプリケーション (Cloud Foundry または CF APP) をクリックします。
  7. 「ADD A SERVICE OR API (サービスまたは API の追加)」をクリックします。
  8. 左側のナビゲーション領域で「Internet of Things (モノのインターネット)」を選択して利用可能なサービスのリストをフィルタリングし、「Internet of Things Platform」サービスを選択します。「Internet of Things (モノのインターネット)」フィルターと、選択された状態の「Internet of Things Platform」サービスを示す画面のスクリーン・キャプチャー
    「Internet of Things (モノのインターネット)」フィルターと、選択された状態の「Internet of Things Platform」サービスを示す画面のスクリーン・キャプチャー
  9. デフォルト値をそのまま受け入れて、「CREATE (作成)」をクリックします。
  10. 再ステージングを求めるメッセージが表示されたら、「Restage (再ステージ)」をクリックします。これにより、アプリが再ステージングされます。
2

MQTT メッセージを IoT サーバーに送信するデバイスを追加する

  1. Bluemix のダッシュボードで、アプリを選択してから、追加した新規サービスをクリックします。
  2. サービス・ページで、「Launch Dashboard (ダッシュボードを起動)」ボタンをクリックします。「Launch Dashboard (ダッシュボードを起動)」ボタンが強調表示されたサービス・ページのスクリーン・キャプチャー
    「Launch Dashboard (ダッシュボードを起動)」ボタンが強調表示されたサービス・ページのスクリーン・キャプチャー

    IBM Internet of Things サーバーのダッシュボードが表示されます。このサービスは、Bluemix からは独立したものです。アプリには組織 ID が割り当てられます。この ID は、後でモバイル・アプリを開発する際に必要になります。以下に示す図では、組織 ID が「1xuhbp」となっています。どこに示されているかというと、ダッシュボードの右上隅にあるログイン情報の下です。

    IBM Internet of Things Platform サーバー上のサービスと組織 ID を強調表示している画面のスクリーン・キャプチャー
    IBM Internet of Things Platform サーバー上のサービスと組織 ID を強調表示している画面のスクリーン・キャプチャー
  3. 左側のメニューにカーソルを合わせ、ポップアップ表示されるメニューで「Device (デバイス)」をクリックします。次に、「Add a device (デバイスの追加)」をクリックし、「Create device type (デバイス・タイプの作成)」をクリックします。組織内では、複数のデバイス・タイプを用意することができ、タイプごとに複数のデバイスを使用することができます。デバイス・タイプとは、同じ特徴を持つデバイスのグループのことであり、あるデバイス・タイプのグループからは、同じセンサー・データが提供される場合があります。このチュートリアルの例では、デバイス・タイプの名前は「Android」にしなければなりません (このデバイス・タイプ名は、後で使用することになるアプリで必要となります)。「Create Device Type (デバイス・タイプの作成)」ダイアログのスクリーン・キャプチャー
    「Create Device Type (デバイス・タイプの作成)」ダイアログのスクリーン・キャプチャー
  4. 「Next (次へ)」をクリックします。すると、デバイスの詳細 (シリアル番号、モデルなど) を入力できるページが表示されます。このデモでは、これらの情報を指定する必要はないので、何も指定せずに「Next (次へ)」をクリックします。また、メタ情報を指定する必要もないので「Create (作成)」をクリックします。すると、「Add Device (デバイスの追加)」ダイアログに戻ります。
  5. 今作成したデバイス・タイプを選択して「Next (次へ)」をクリックします。次のページでデバイス ID を入力します。デバイス ID として、例えばスマートフォンの MAC アドレスを指定できます。ただし、この ID は組織内でのみ一意であればよいので、この例でのように「112233445566」といった数値を入力することもできます。
  6. デバイス ID を入力したら、「Next (次へ)」をクリックします。「Metadata (メタデータ)」フィールドは空白のまま、「Next (次へ)」をクリックします。「Authentication token (認証トークン)」フィールドも空白のままにして、「Next (次へ)」をクリックします。
  7. 認証トークンの値を入力します。この値は後で必要になるのでメモしておいてください。「Next (次へ)」をクリックします。認証トークンを示す画面のスクリーン・キャプチャー
    認証トークンを示す画面のスクリーン・キャプチャー
  8. 「Add (追加)」をクリックします。

    これにより、生成されたデバイスが画面上に表示されます。

    認証トークンを表示する画面のスクリーン・キャプチャー
    認証トークンを表示する画面のスクリーン・キャプチャー
  9. ダイアログ・ウィンドウを閉じます。

これで、デバイスから IBM IoT サーバーに MQTT メッセージを送信する準備ができました。

3

Android アプリをインストールして構成する

スマートフォンのセンサー・データの読み取りおよび送信には、IoT Starter for Android アプリを使用します。このアプリケーションのソース・コードと資料は、IoT Starter for Android という GitHub プロジェクトに含まれています。

Android 開発の経験がある方は、GitHub からコードをダウンロードして Android 開発環境にインポートして、.apk ファイルをビルドすることができます。そうでない場合、以下の手順に従うことで、アプリを迅速にインストールして実行中の状態にすることができます。

注: .apk ファイルは Android バージョン 5.0.1 用にコンパイルされていますが、Android 6 上でもテストして機能することが確認されています。お使いの環境に、このアプリの古いバージョンがインストールされている場合は、それをアンインストールしてから、新しいバージョンをインストールする必要があります。

  1. 携帯電話上で「Settings (設定)」 > 「Security (セキュリティー)」の順に選択します。「Device Administration (端末の管理)」セクションで、「Unknown sources (不明の送信元)」を有効にします。これで、Google Play 外部から .apk ファイルをインストールできるようになります。
  2. 携帯電話でブラウザーを開き、以下の URL を入力します。

    https://ibm.box.com/v/iotstarterapp-v2

    https://m.box.com にリダイレクトされて iot-starter_501_v2.apk ファイルが表示されます。

    ダウンロードしてインストールする .apk ファイルを表示するブラウザー・ウィンドウのスクリーン・キャプチャー
  3. 「Download (ダウンロード)」をクリックします。
  4. ファイル・エクスプローラー・アプリ (例えば、Google Play からダウンロードできる ES ファイルエクスプローラー) を使用して、ダウンロード・フォルダー内のファイルを見つけます。
  5. フォルダー内にある iot-starter_501_v2.apk をクリックします。「Install (インストール)」をクリックします。.apk ファイルを表示する画面のスクリーン・キャプチャー

    これで IoT Starter アプリが Android 端末にインストールされます。

次に、Android アプリを構成する必要があります。

  1. IoT Starter アプリを起動します。
  2. 「Skip tutorial (チュートリアルをスキップ)」をクリックします。
  3. 以下のパラメーターを入力します。
    • Organization (組織): IBM IoT サーバー上で表示された組織 ID (「MQTT メッセージを IoT サーバーに送信するデバイスを追加する」ステップの冒頭を参照)。このチュートリアルの例では、「y6spgy」となっています。
    • Device ID (デバイス ID): 「MQTT メッセージを IoT サーバーに送信するデバイスを追加する」ステップの最後で構成したデバイス ID。このチュートリアルの例では、「112233445566」となっています。
    • Auth Token (認証トークン): 「MQTT メッセージを IoT サーバーに送信するデバイスを追加する」ステップで指定した認証トークン。
    Android アプリの構成パラメーターを表示する画面のスクリーン・キャプチャー
  4. 「Activate Sensor (センサーをオンにする)」をクリックします。これで、アプリケーションがスマートフォンの加速度センサーからデータを収集し、そのデータを IBM IoT サーバーに送信するようになります。このアプリは、加速度計のデータと、公開されたメッセージ数、受信したメッセージ数を表示します。実行中の Android アプリから送信された加速度計のデータを表示する画面のスクリーン・キャプチャー
4

スマートフォンから IoT サーバーにメッセージが送信されていることを確認する

  1. コンピューターに戻り、組織の IBM IoT サーバー・ページをもう一度開きます (「MQTT メッセージを IoT サーバーに送信するデバイスを追加する」の冒頭を参照してください)。
  2. 「Devices (デバイス)」タブに、皆さんの Android 端末が表示されます。Android 端末がリスト表示された「Devices (デバイス)」タブのスクリーン・キャプチャー
    Android 端末がリスト表示された「Devices (デバイス)」タブのスクリーン・キャプチャー
  3. デバイス ID をクリックします。するとポップアップ・ウィンドウが開き、皆さんの端末から受信したメッセージが表示されます。イベントをクリックしてその詳細を表示します。Android 端末から受信したメッセージが表示されたポップアップ・ウィンドウのスクリーン・キャプチャー
    Android 端末から受信したメッセージが表示されたポップアップ・ウィンドウのスクリーン・キャプチャー

    スマートフォンから送信されるメッセージは、JSON フォーマットになっています。メッセージには、加速度と位置のデータが含まれています。

これで、Bluemix 上でメッセージのデータを扱う準備ができました。

5

Node-RED フローでメッセージを処理する

このセクションでは、Bluemix IoT アプリケーションを拡張して、Node-RED フローを使用してスマートフォンから送信されるメッセージを処理し、その処理したメッセージをスマートフォンに送り返すようにします。携帯電話は返されてきたメッセージに応じて、アプリの背景色を変化させます。

Node-RED は、モノのインターネットを簡単に接続して、そのメッセージ処理できるビジュアル・ツールです。

  1. Bluemix を開いて「DASHBOARD (ダッシュボード)」をクリックし、Bluemix ダッシュボードで (ステップ 1 で作成した) Bluemix IoT アプリが実行中になっていることを確認します。
  2. ブラウザーで <自分のアプリ名>.mybluemix.net を開きます。ここで、<自分のアプリ名> はステップ 1 で作成した Bluemix IoT アプリの名前です。Bluemix アプリの Node-RED エディターで、「Go to your Node-RED flow editor (Node-RED フロー・エディターに移動)」をクリックします。
  3. エディターが開き、サンプル・フローが表示されます。サンプル・フローを表示する画面のスクリーン・キャプチャー
    サンプル・フローを表示する画面のスクリーン・キャプチャー

    このエディターのドラッグ・アンド・ドロップ機能を使用して、メッセージのフローをつなげることができます。独自のフローを作成することもできますが、ここでは以下のコードをインポートします。ただし最初に、既存のすべてのノードを選択し、Delete キーを押して削除してください。

  4. 以下のコード (1 行の長いコード行) をコピーして、テキスト・エディターに貼り付けます。このコードのフォーマットを確認するには、https://ibm.box.com/v/iotstarterNodeRedCode からコードをテキスト・ファイルとしてダウンロードするという方法があります。
    [{"id":"215c6601.12d32a","type":"ibmiot in","authentication":"boundService","apiKey":"","inputType":"evt","deviceId":"","applicationId":"","deviceType":"","eventType":"accel","commandType":"","format":"json","name":"IBM IoT App In","service":"registered","allDevices":true,"allApplications":"","allDeviceTypes":true,"allEvents":"","allCommands":"","allFormats":"","x":264.1999969482422,"y":434.1999969482422,"z":"dc6a0ca6.7993b","wires":[["ce21edbb.320628","fdfdaaa2.a45678"]]},{"id":"ce21edbb.320628","type":"function","name":"calc color","func":"var accelZ = msg.payload.d.acceleration_z;\nvar r = 0.0;\nvar b = 0.0;\nvar g = 0.0;\nif (accelZ > 0) {\n\tg = Math.round(accelZ * 25);\n} else if (accelZ < 0) {\n\tr = 255.0;\n} else {\n\tr = 104;\n\tg = 109;\n\tb = 115;\n}\na = 1.0;\n\nmsg.eventOrCommandType = \"color\";\nmsg.payload = JSON.stringify({\"d\":{\"r\":r,\"b\":b,\"g\":g,\"alpha\":a}});\n\nreturn msg;","outputs":1,"noerr":0,"x":437.1999969482422,"y":430.1999969482422,"z":"dc6a0ca6.7993b","wires":[["9df37edb.5d4588"]]},{"id":"9df37edb.5d4588","type":"ibmiot out","authentication":"boundService","apiKey":"","outputType":"cmd","deviceId":"112233445566","deviceType":"Android","eventCommandType":"text","format":"json","data":"{\"d\":{\"value\":\"text\"}}","name":"IBM IoT App Out","service":"registered","x":629.1999969482422,"y":443.1999969482422,"z":"dc6a0ca6.7993b","wires":[]},{"id":"fdfdaaa2.a45678","type":"debug","name":"","active":false,"console":"false","complete":"false","x":442.1999969482422,"y":364.1999969482422,"z":"dc6a0ca6.7993b","wires":[]}]
  5. テキスト・エディターで、コード全体が 1 行になっていることを確認します。改行がある場合は削除してから、コード行をコピーします。
  6. Node-RED エディターで、Ctrl-I を押して「Import Nodes (ノードのインポート)」ダイアログを開きます。コードを貼り付けてから、「OK」をクリックします。「Import Nodes (ノードのインポート)」ダイアログのスクリーン・キャプチャー
    「Import Nodes (ノードのインポート)」ダイアログのスクリーン・キャプチャー
  7. ここで、このフローを特定のパラメーターに合わせて適応させる必要があります。関連するパラメーターは、デバイス ID だけです。「IBM IoT App Out (IBM IoT アプリ出力)」ノードをダブルクリックします。ポップアップ・ウィンドウが表示されるので、そこに前に使用したデバイス ID (例えば、「112233445566」) を入力して、「OK」をクリックします。
  8. フロー・エディターの「Deploy (デプロイ)」ボタンをクリックします。すると、フローがデプロイされて即座にアクティブになるはずです。
  9. スマートフォンをひっくり返したり、傾けたりしてください。z 軸の向きによって、携帯電話上のアプリの背景色が変わるはずです。
  10. Node-RED エディターで、「msg.payload」ノードの横にある四角形をクリックし、「debug (デバッグ)」タブをクリックしてデバッグを有効にします。携帯電話から送信されてくるメッセージが表示されます。メッセージのデータは JSON フォーマットです。Node-RED エディターの「msg.payload」ノードと、メッセージが表示された「debug (デバッグ)」タブを表示する画面のスクリーン・キャプチャー
    Node-RED エディターの「msg.payload」ノードと、メッセージが表示された「debug (デバッグ)」タブを表示する画面のスクリーン・キャプチャー
  11. フローを検査します。「calc color (色の計算)」ノードをダブルクリックします。このノードは、受信される z 軸方向の加速度の値に基づいて赤、緑、青の値を計算し、その結果を JSON データとして渡します。スマートフォン上で背景色を変えるコードを示す、「Edit function (関数の編集)」ノードのスクリーン・キャプチャー

スマートフォンと最初の Bluemix アプリケーションとの間で、双方向の通信が可能になりました。

6

ステップ 6. センサー・データを視覚化する Bluemix アプリを作成する

このステップでは、スマートフォン (現在は、IoT 端末に変身しています) からメッセージを受信して、そのデータを視覚化する、もう 1 つのアプリケーションを Bluemix 上で作成します。

  1. IoT 可視化のための rickshaw4iot Github プロジェクトから rickshaw4iot-0.2.0.zip ファイルをダウンロードして、このファイルを解凍します。
  2. Bluemix を開き、「DASHBOARD (ダッシュボード)」をクリックします。
  3. 「CREATE AN APP (アプリの作成)」をクリックします。
  4. アプリのタイプとして「WEB」を選択します。
  5. 「SDK for Node.js」を選択します。
  6. 「CONTINUE (続行)」をクリックし、アプリ名を入力します。前と同じく、この名前はホスト名として使用されるため、Bluemix 内で一意でなければなりません。「iotvisualizer<英語表記の自分の名前>」という形で名前を入力して、「Finish (完了)」をクリックします。
  7. 少しすると、「Your app is running. (アプリは稼働しています。)」というメッセージが表示されるはずです。
  8. iot-visualization-0.1.0.zip ファイルの抽出先フォルダー内から、manifest.yml ファイルをテキスト・エディターで開きます。host および name パラメーターを、選択したアプリの名前に変更します。ファイルを保存します。manifest.yml ファイル内の host および name パラメーターのスクリーン・キャプチャー
  9. コマンド・ウィンドウを開き、カレント・ディレクトリーを iot-visualization-0.1.0.zip ファイルの抽出先ディレクトリーに変更します。
  10. 以下の Cloud Foundry コマンドを入力します。
    cf api https://api.ng.bluemix.net
    cf login -u <自分の Bluemix ログイン ID>

    cf login コマンドが必要なのは、Cloud Foundry コマンド・ライン・ツールを初めて使用するときだけです。Bluemix パスワードも入力しなければならない場合があります。複数の Bluemix 組織を使用している場合 (デフォルトの場合には該当しません)、いずれか 1 つの組織を選択するよう求められます。
  11. 以下のコマンドを入力して、Bluemix にアプリをデプロイします。

    cf push <今作成したアプリの名前>

    このコマンドは、manifest.yml ファイルを探し、そのファイル内のパラメーターを使用して、コードを Bluemix にアップロードします。しばらくすると、以下のようなメッセージが表示されます。

    OK

    App <デプロイしたアプリの名前> was started using this command 'node app.js'.

  12. Bluemix ダッシュボードで、アプリの概要ページを開きます。「BIND A SERVICE OR API (サービスまたは API のバインド)」をクリックします。「BIND A SERVICE OR API (サービスまたは API のバインド)」ボタンが強調表示された、アプリの概要ページのスクリーン・キャプチャー
    「BIND A SERVICE OR API (サービスまたは API のバインド)」ボタンが強調表示された、アプリの概要ページのスクリーン・キャプチャー
  13. 「Bluemix で IoT アプリケーションを作成する」で定義した Internet of Things サービスを選択します。「Restage (再ステージ)」をクリックしてアプリを再ステージングします。これで、アプリが、IBM IoT サーバーからメッセージを受信できるようになります。
  14. 視覚化アプリを確認するために、ブラウザーで http://<視覚化アプリの名前>.mybluemix.net を開きます。
  15. 「Device (デバイス)」ドロップダウン・ボックスで、該当するデバイス ID を選択します。選択されたデバイスとそのセンサー・データを線グラフで表示する、IoT 視覚化アプリのスクリーン・キャプチャー
    選択されたデバイスとそのセンサー・データを線グラフで表示する、IoT 視覚化アプリのスクリーン・キャプチャー

まとめ

このチュートリアルでは、簡単にスマートフォンをセンサー・デバイスに変身させて IBM Internet of Things サーバーに接続し、スマートフォンとサーバーとの間でデータを送受信する方法を説明しました。また、Bluemix 上でデバイスからのデータを処理して視覚化する方法も紹介しました。この 2 つのアプリケーションから、Bluemix がモノのインターネットにもたらす価値を実感できるはずです。つまり、スマートフォンさえあれば、モノのインターネットを実現できるのです。


ダウンロード可能なリソース


関連トピック


コメント

コメントを登録するにはサインインあるいは登録してください。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Cloud computing
ArticleID=1026772
ArticleTitle=スマートフォンを IoT デバイスに変身させる
publish-date=07272017