6. シナリオ2: LEDのリモート制御

Intel Edison上のプログラムは接続されたボタンを監視してボタンが押されると、接続されたLEDをOn/Offし、LEDのOn/Off変化をAWS IoT Shadowに伝えます。同時に、AWS IoT ShadowからOn/Offの変更指示があれば接続されたLEDをOn/Offします。WebサイトはS3で別途用意済みで、Webブラウザで開きLambda経由でAWS IoT ShadowにLEDのOn/Offを指示できます。

_images/scenario2.png

6.1. プログラムの実行

本ハンズオン用に用意されているzipファイルを解凍した aws-iot-handson-dojo-basic の下 scenario2 にシナリオ2用の Node.js プログラムがあります。プログラムを実行します。

# cd ~/aws-iot-handson-dojo-basic/scenario2/
# node main.js
Connected to Shadow
-> Sending update {"state":{"reported":{"led":"off"}}}
Received status 'accepted' on 'edison-01': {"state":{"reported":{"led":"off"}},"metadata":{"reported":{"led":{"timestamp":1451963594}}},"timestamp":1451963594}

6.2. ローカルから制御

Edisonに直接接続されたボタンを押すことでLEDをOn/Offできることを確認します。(あまり素早くボタンを押して離すと押された事がタイミングよっては検知できません。押してから少し間をおいてから離します。)

6.3. リモートから制御

LEDがOnになっている場合はボタンを押してOffの状態にしてから、今度はリモートからLEDをOnにします。マネージメントコンソールのサービス一覧から[AWS IoT]をクリックして開きます。

_images/4-servicemenu@2x.png

[登録]-[モノ] を選択します。デバイス(Thing)一覧から”edison-<参加者番号>”をクリックします。

_images/6-led-1@2x.png

[シャドウ] をクリックし、[シャドウドキュメント] の [編集] をクリックします。

_images/6-led-2@2x.png

[Sシャドウステータス:] を以下のように変更し、[保存] をクリックします。

{
  "desired": {
    "led": "on"
  }
}

_images/6-led-3@2x.png

以下のメッセージが表示されます。

_images/6-led-4@2x.png

LEDがOnになったことを確認します。同様の操作で、”desired”内にある”led”の値をoffやonに変更することで、LEDをOn/Offさせることができます。

Shadowの確認や変更をS3に保存されているWebサイトでもLambdaを経由して行う事ができます。Webブラウザに読み込まれたJavaScriptはWebブラウザ上で動作して、CognitoでAWSにアクセスするための一時クレデンシャルを取得し、定期的にLambda経由でShadowの状態を確認して最新のLEDの状態を画像で表示させます。また、On/Offボタンが押されるとJavaScriptはLambdaを経由してShadowの内容を更新します。Shadowの内容が更新されると、AWS IoT Shadowは差分が発生したことをEdisonに通知して、Edison上のプログラムは通知を受けて実際のLEDをOn/Offさせます。

以下のURLをブラウザで開きます。

https://s3-ap-northeast-1.amazonaws.com/awsiot-handson-dojo-jp/scenario2/IoT+HandsOn+Dojo+Basic+-+Scenario+2_+LED+Remote+Button.html

[Cognito Identity Pool ID]に「Cognito Identityを手動作成」で作成したCognito Identityの[Identity Pool ID]を、[Member ID]に参加者番号を入力し、[Cognito Unauth Login]をクリックします。

_images/6-webapp-1@2x.png

Webサイト上のボタンの[LED ON][LED OFF]を押して、実際のLEDがOn/Offされることを確認します。