| |
Armadillo-IoTを使い、データをクラウド上のサーバーにアップロードするサンプルアプリケーションを動かし、IoTの基本部分を体験してみましょう。
サンプルアプリケーションは、Armadillo-IoT(クライアント)からデータを AWS(サーバー) にアップロードする機能と、AWS(サーバー)から Armadillo-IoT(クライアント)に対して操作指示を行う機能の二つを備えています。
クライアントからサーバーへのデータアップロードの例として、Armadillo-IoT が本体の状態監視用に内蔵している温度センサの値をアップロードします。また、サーバーからの操作指示の例として、AWS から LED の状態を示すドキュメントの値を変更すると、その状態(ON または OFF)を Armadillo-IoT に通知して LED の状態を変更します。
また、データの可視化をするサービスとして、Amazon OpenSearch Service を使用して、Armadillo-IoT から受け取ったデータを Web ブラウザからリアルタイムに変化を確認できます。
本サンプルアプリケーションのシステムは以下の様に様々な AWS サービスを連携させることにより実現しています。
| AWS |
---|
AWS(アマゾン ウェブ サービス)は、Amazonが提供する200以上のクラウドサービスの総称です。
一昔前の Web アプリケーション開発現場では、まず開発環境に Linux や Apache、MySQL、PHP(LAMP)をインストールして開発を行い、開発がうまくいったら公開用のサーバーを購入するなり、レンタルサーバーを借りるなりして、また色々インストールして、一般公開するためにドメインを購入して、というようにアプリケーションの実装以外に多くの付随する作業が必要でした。
AWS を使用すると、1. AWS アカウントを作成する、2. アプリケーションを実装する(アプリケーションの実行に必要なサーバーやデータベースの設定は、AWS のツールが面倒を見てくれるので、開発者は何を使うか指定するだけです)、3. サーバーに「push」する、という単純なステップで、アプリケーションを一般公開できます。また、サーバーで使用する CPU の数やメモリサイズ、データベース容量を動的に変更できるなど、急にアクセスが増えた場合でも、簡単にスケールアウトできるような仕掛けがなされています。
また、Web アプリケーションを開発する際に必要となる様々な機能が「SDK」として用意されており、それらを活用することで、アプリケーションの本質的な部分に開発リソースを集中することができます。サンプルアプリケーションでは、Amazon から提供されている Boto3 という AWS SDK を使用しています。
|
| REST API |
---|
REST(REpresentational State Transfer)は、Web アプリケーションの API に関するアーキテクチャスタイル(設計思想)の一つです。
ネットワーク上のリソースに対し一意の URI を割り当て、リソースに対する操作を HTTP GET(取得)/ POST(新規作成)/ PUT(更新)/ DELETE(削除)で行います。REST の原則に従い API を設計すると、クライアントからのリクエストをステートレスにできるため、サーバー側の実装をスケールアウトしやすいと言われています。サンプルアプリケーションでは、時々刻々と変化する温度センサデータのアップロードは、常にリソース(温度データの時系列情報)の新規作成となるため HTTP POST で行っています。
なお、厳密にはREST原則に従っていないAPIもREST APIと称することが多くなっているため、原則に忠実に従って設計されたAPIのことを、RESTful APIということもあります。
|
Armadillo-IoTに電源を投入する前に、USBシリアル変換アダプタのスライドスイッチを次のように外側になるようにしてください。[]
Armadillo-IoTに電源を接続すると、シリアル通信ソフトウェアには次のように表示されます。
Linuxシステムを起動するには、次のように "boot"コマンドを実行してください。コマンドを実行するとブートローダーがLinuxシステムを起動させます。シリアル通信ソフトウェアにはLinuxの起動ログが表示されます。
ここでは、rootユーザーでログインします。デフォルトのパスワードは、"root"となっています。
サンプルアプリケーションを実行する前に環境構築を行います。
AWS アカウントの作成方法については、 AWS 公式サイトの AWS アカウント作成の流れ (https://aws.amazon.com/jp/register-flow/) を参照してください。
AWS IAM (Identity and Access Management) は、AWS リソースへのアクセスを安全に管理するためのウェブサービスです。IAM により、誰を認証(サインイン)し、誰にリソースの使用を承認する(アクセス許可を持たせる)かを管理することができます。
手順4.1 IAM ユーザーを作成する IAM へ移動し、「アクセス管理」→「ポリシー」を開き、「ポリシーを作成」をクリックします。 「JSON」を選択し、以下のように入力して、「次のステップ: タグ」をクリックします。ポリシードキュメントは https://download.atmark-techno.com/armadillo-iot-g3/startup-guide/IAM_policy.json からダウンロードすることも出来ます。
何も選択せずに、「次のステップ: 確認」をクリックします。 ポリシー名を入力し、「ポリシーの作成」をクリックします。ここでは、ポリシー名を "policy_for_AWS_test" としています。 IAM から、「アクセス管理」→「ユーザー」を開き、「ユーザーを追加」をクリックします。 下記の通り入力、選択し、「次のステップ: アクセス権限」をクリックします。 「既存のポリシーを直接アタッチ」をクリックし、先程作成したポリシーを選択して、「次のステップ: タグ」をクリックします。
何も選択せずに、「次のステップ: 確認」をクリックします。
内容を確認し、「ユーザーの作成」をクリックします。
「.csvのダウンロード」をクリックし、 "new_user_credentials.csv" をダウンロードして、「閉じる」をクリックします。
ポリシーは、AWSの JSON ドキュメントで、AWS リソースへのアクセスの許可または拒否を設定することが出来ます。ここでは、Cloud Formation というサービスを用いて自動で設定を行います。
手順4.2 ポリシーの設定をする 作業用PCにポリシー設定用のテンプレートファイルをダウンロードします。
Cloud Formation へ移動し、「スタックの作成」→「新しいリソースを使用(標準)」をクリックします。 「テンプレートファイルのアップロード」を選択し、「ファイルの選択」で先程ダウンロードしたテンプレートファイルをアップロードして、「次へ」をクリックします。 スタック名を入力し、「次へ」をクリックします。 そのまま「次へ」をクリックします。 チェックボックスを選択し、「スタックの作成」をクリックします。 作成したスタックのステータスが “CREATE_COMPLETE” になったら作成完了です。ステータスは更新ボタンを押すと反映されます。
Armadillo を IoT Core と連携するためにはデバイスデータエンドポイントを使用します。 手順4.3 エンドポイントを確認する IoT Core へ移動し、サイドバー下部にある設定をクリックします。 ここで表示されるエンドポイントは後ほど使用しますので、メモしておいてください。
ArmadilloをAWS IoTと連携するためにデバイスを登録し、証明書の生成、ポリシーのアタッチを行います。
手順4.4 モノを作成する IoT Coreから、「管理」→「すべてのデバイス」→「モノ」を開き、「モノを作成」をクリックします。 「1つのモノを作成」を選択し、「次へ」をクリックします。 モノの名前を “my_test_armadillo” と入力します。 「名前のないシャドウ (クラシック)」を選択し、シャドウステートメントを以下のように入力して、「次へ」をクリックします。
「新しい証明書を自動生成 (推奨)」を選択し、「次へ」をクリックします。 “PolicyForThing” を選択し、「モノを作成」をクリックします。 ポップアップで表示された画面で、デバイス証明書、パブリックキーファイル、プライベートキーファイルをそれぞれダウンロードし、「完了」をクリックします。 ダウンロードしたファイルは、デバイス証明書が "[ハッシュ値64桁]-certificate.pem.crt"、パブリックキーファイルが "[ハッシュ値64桁]-public.pem.key"、プライベートキーファイルが "[ハッシュ値64桁]-private.pem.key" という名前で保存されます。以下の例では各ファイルを「Downloads ディレクトリ」に保存しています。
[PC ~/Downloads]# ls
[ハッシュ値64桁]-certificate.pem.crt
[ハッシュ値64桁]-private.pem.key
[ハッシュ値64桁]-public.pem.key
USB や SD カードを使用して Armadillo に証明書と秘密鍵を転送します。
手順4.5 証明書と秘密鍵を Armadillo に転送する 先程ダウンロードした証明書と秘密鍵を USB や SD カードに入れ、Armadillo に接続します。 Armadillo のホームディレクトリに 「certs ディレクトリ」を作成します。
[armadillo ~]# mkdir certs
[armadillo ~]# cd certs
「certs ディレクトリ」内に証明書と秘密鍵を転送し、それぞれ以下のようにリネームします。
[armadillo ~/certs]# mv [ハッシュ値64桁]-certificate.pem.crt certificate.pem.crt
[armadillo ~/certs]# mv [ハッシュ値64桁]-private.pem.key private.pem.key
[armadillo ~/certs]# ls
certificate.pem.crt private.pem.key
4.3.7. サンプルアプリケーションの環境を構築する
ここでは、Cloud Formation を用いてサンプルアプリケーションの環境を自動構築します。
手順4.6 サンプルアプリケーションの環境を構築する 作業用PCに環境構築用のテンプレートファイルをダウンロードします。
Cloud Formation へ移動し、「スタックの作成」→「新しいリソースを使用(標準)」をクリックします。 「テンプレートファイルのアップロード」を選択し、「ファイルの選択」で先程ダウンロードしたテンプレートファイルをアップロードして、「次へ」をクリックします。 スタック名を入力し、「次へ」をクリックします。 “RoleForCloudFormation” を選択し、「次へ」をクリックします。 チェックボックスを選択し、「スタックの作成」をクリックします。 作成したスタックのステータスが “CREATE_COMPLETE” になったら作成完了です。この環境構築には30分ほど時間を要します。
ここでは、構築したサンプルアプリケーション環境を用いて Armadillo と AWS のデータのやり取りのテストを行います。
サンプルプログラムを使用して IoT Core へデータを送信してみましょう。
手順4.7 データを IoT Core へ送る IoT Core へ移動し、「テスト」→「MQTT テストクライアント」をクリックします。 “topic/sensors”と入力し、「サブスクライブ」をクリックします。 Armadillo に戻って、サンプルコードを実行します。[endpoint] は「エンドポイントを確認する」で確認したエンドポイントを入力してください。
IoT Core を確認すると、送信されたデータが表示されます。
先程のサンプルプログラムの中では、シャドウの LED_state の値を5秒置きに確認し、Armadillo の LED3 に反映させています。ここでは REST API を用いて LED_state の値を変更することで Armadillo の LED を操作します。
手順4.8 LED を操作する API Gateway を開き、”operateLED_API” をクリックします。 「ステージ」から ”dev” を開き、URL を確認します。 「API キー」から “my_APIkey” を開き、「表示」をクリックして API キーを確認します。 Armadillo に戻って、publish.py を終了させた場合は、もう一度実行します。 作業用 PC から、以下のコマンドを実行すると、Armadillo の LED3 が点灯します。ここで、[URL] と [APIキー] の部分を先程確認した URL と API キーに置き換えてください。
作業用 PC から、以下のコマンドを実行すると、Armadillo の LED3 が消灯します。
ここでは、AWS IoT Core へ送信した CPU 温度や LTE 電波強度をグラフ化する方法を説明します。
手順4.9 前準備 Cognito へ移動し、「ユーザープール」から “MyTestUserPool” をクリックします。 「ユーザーを作成」をクリックします。 ユーザー名とパスワードを入力し、「ユーザーを作成」をクリックします。このユーザー名とパスワードは後ほど使用しますので、メモしておいてください。 Amazon OpenSearch Service から「ドメイン」を開き、”mytest-opensearch” をクリックします。 「OpenSearch Dashboards の URL」をクリックします。 先程作成したユーザー名と仮パスワードを入力し、 “Sign in” をクリックします。 新しいパスワードを入力し、 “Send” をクリックします。 “Manage” をクリックします。 “Index Patterns” を開き、“Create index pattern” をクリックします。 “server_timestamp” と入力し、“Next step” をクリックします。 “server_timestamp” を選択し、”Create index pattern” をクリックします。
手順4.10 ダッシュボードを作成する サイドバーから、“Dashboard” をクリックします。 “Create new dashboard” をクリックします。 “Save” をクリックします。 ダッシュボード名を入力し、”Save” をクリックします。ここでは、ダッシュボード名を “my_test_dashboard” としています。 “Edit” をクリックします。 “Create_new” をクリックします。
手順4.11 CPU 温度を可視化する ”Line” を選択します。
“server_timestamp” を選択します。
“Metrics” を以下の通りに選択します。
“Buckets” を以下の通りに選択し、”Update” をクリックします。 ”X-axis” を選択する ”Aggregation” は “Data Histogram” を選択する ”Field” は “server_timestamp” を選択する ”Minimum interval” は “Minute” を選択する
“Save” をクリックします。 タイトルを入力し、”Save and return” をクリックします。ここでは、タイトルを “Temperature” としています。
手順4.12 LTE 電波強度を可視化する ”Gauge” を選択します。
“Metric” を以下の通りに選択します。 ”Aggregation” は “Top Hit” を選択する ”Field” は “sensor.signal_quality” を選択する ”Aggregate with” は “Max” を選択する
“Options” を開き、”Reverse schema” を選択して、”Update” をクリックします。
“Save” をクリックします。 タイトルを入力し、”Save and return” をクリックします。ここでは、タイトルを “Signal_quality” としています。 “Save” をクリックします。
| |
| | | |
| |