AWS IoTをArduino Yúnで使う(少し詳しく書いてみた)

AWS IoTがリリースされたので、そのSDKを使ってArduino Yún試してみたと書いたのですが、ここでは具体的にどういうことをしたのか、もう少し詳しく書いておくことにします。

ここではAWS CLIではなくマネジメントコンソール(AWSのウェブブラウザ向けUI)を使います。

まずAWSのマネジメントコンソールでIoTを選んで画面を開きます。
0

「Create a resource」ボタンでThingを作ります。(ここでは「mything-tokyo」としました。)
スクリーンショット 2015-10-13 14.24.09

Thingのパネルには「Connect a Device」というボタンがあるのでそちらを押します。
2

デバイスとして「Arduino Yún」を選びます。
3

証明書が作られてリンクができるのでそれをダウンロードします。(※ SafariではダウンロードできなかったのだけれどChromeでは可能。)
4

「Confirm & Start Connecting」ボタンを押すとプログラムコードが表示されます。これをどこかにメモしておきましょう。このコードは後でArduinoのプログラムに使います。
4.1

AWSマネジメントコンソールでの作業は一旦ここまでにして、次にArduino Yúnの設定を行います。

YúnのライブラリをGithubからダウンロードします。
5

zipを解凍すると、AWS-IoT-Arduino-Yun-SDK-1.0.0というディレクトリができます。

まず、このディレクトリにある「certs」の中の3つのファイルは削除します。
6

ルート証明書を「root-CA.crt」という名前でこのディレクトリに保存します。
7

先ほどダウンロードしたファイルの内、証明書とプライベートキーもこのディレクトリに、名前は変えずに保存します。
8

ここから先は環境によるのですが、MacやLinuxならAWS-IoT-Arduino-Yun-SDK-1.0.0の中にある

  • mySCP.sh
  • mySETUP.sh

を(chmod 755などで実行可能にした上で)実行するのが簡単だと思います。

実行する前に、それぞれファイルの中身を自分のYúnに合わせて書き変えます。

  • [your_boards_ip]の部分はIPアドレス
  • [your_password]の部分はrootのパスワード

それぞれこのようになりました。
10

11

実行はこのディレクトリにcdで入って

  • ./mySCP.sh
  • ./mySETUP.sh

です。

Windowsはドキュメントによれば、winscpなどで

* aws_iot_mqtt_client.pyファイル
* certsフォルダ

をYúnに載ったLinuxのルートディレクトリに転送。
さらにputtyなどを使ってYúnのLinuxにログインして

* opkg update
* opkg install distribute
* opkg install python-openssl
* easy_install pip
* pip install paho_mqtt

を実行しパッケージをインストールすれば良いものと思います。

これでYúnに載ったLinuxの準備ができたので、次はArduino IDEを使ってスケッチをYúnに書き込む作業をします。

まず、AWS-IoT-Arduino-Yun-SDK-1.0.0のディレクトリにある「AWS-IoT-Arduino-Yun-Library」をArduinoのライブラリのディレクトリに置きます。

Arduino IDEのライブラリは

  • Mac:~/Documents/Arduino/libraries/
  • Windows:My Documents\Arduino\libraries\

にあるものと思いますので、そちらへフォルダごと移動。
12

次にArduino IDEでサンプルの「BasicPubSub」を開きます。
13

このサンプルはBasicPubSub.inoとaws_iot_config.hの2ファイルで構成されています。

aws_iot_config.hを開いて
// Copy and paste your configuration into this file
の下のところを、先ほど保存しておいたプログラムコードで差し替えます。
14

ようやくこれで準備ができたので、Yúnにスケッチをアップロードします。

Arduino IDEのシリアルターミナルを開くとこのようなメッセージが繰り返されて表示されたら、これでAWS IoTにMQTTでメッセージを送ることができたことになります。
17

さらにもう少しだけ続きがあります。

今度はこのYúnから送っているメッセージをAmazon S3に保存させてみることにします。

まず、スケッチのBasicPubSub.inoを見ると「topic1」という部分があります。
18

このキーワードを元にしてAWS IoTが処理を振り分けるように、AWSマネジメントコンソールで「Create a rule」してルールを作ります。
19

ルールの作成ページではSQL文のようなものを作るのですが、そのTopic filterには先ほど出てきた「topic1」を指定します。
20

ルールには最低1つのアクションを用意する必要があり、Lambdaの呼び出し、DynamoDBへのinsert、SNSの呼び出し、など幾つかの選択肢があるのですが、S3に記録するには「Strore a message in a file and store in the cloud(S3)」を選択。保存する先のバケットとキー(ここではmessage.txt)を設定します。
21

その際、もしロールが無ければ、バケットにオブジェクトをPutするためのロールを作ることになりますが、AWSの権限さえあれば、幾つかのクリックをするだけで自動的に適切なルールが作成されます。

これで指定したS3のバケットにはmessage.txtができ、中を覗くとYúnから送信している文字列「new message [カウント数]」が保存されていることが確認できます。
22


試している時に気がついたことなど。

これらの作業をIAMアカウントで行う場合、IoTへのアクセスはもちろん必要になりますが、さらにルールの設定画面を機能させるには、DynamoDBとKinesisの権限も必要なようでした。(どこまで削って良いのかわからず、私はどちらもフルアクセスを指定しましたが、もっと適切な設定があるのかもしれません。)

この接続を最初に試してみた時(2015年10月9日夜)は、何故か東京リージョンだと名前解決ができなかったのですが、現在は問題ありません。

いろいろ試しにやっているうちにThing、証明書、ルール、ポリシーなどが沢山できてしまい整理したいと思ったのですが、証明書についてはマネジメントコンソール上では削除の仕方がわかりませんでした。でもAWS CLIを使えば
aws iot delete-certificate --certificate-id 証明書ID
のように削除することができます。

YúnのLinuxにMacやLinuxからログインするには、もしデフォルトのままならばこんなコマンドライン
ssh -l root arduino.local
でパスワードが「arduino」です。

Pocket