AWS IoTがリリースされたので、そのSDKを使ってArduino Yúnで試してみたと書いたのですが、ここでは具体的にどういうことをしたのか、もう少し詳しく書いておくことにします。
ここではAWS CLIではなくマネジメントコンソール(AWSのウェブブラウザ向けUI)を使います。
まずAWSのマネジメントコンソールでIoTを選んで画面を開きます。
「Create a resource」ボタンでThingを作ります。(ここでは「mything-tokyo」としました。)
Thingのパネルには「Connect a Device」というボタンがあるのでそちらを押します。
証明書が作られてリンクができるのでそれをダウンロードします。(※ SafariではダウンロードできなかったのだけれどChromeでは可能。)
「Confirm & Start Connecting」ボタンを押すとプログラムコードが表示されます。これをどこかにメモしておきましょう。このコードは後でArduinoのプログラムに使います。
AWSマネジメントコンソールでの作業は一旦ここまでにして、次にArduino Yúnの設定を行います。
YúnのライブラリをGithubからダウンロードします。
zipを解凍すると、AWS-IoT-Arduino-Yun-SDK-1.0.0というディレクトリができます。
まず、このディレクトリにある「certs」の中の3つのファイルは削除します。
ルート証明書を「root-CA.crt」という名前でこのディレクトリに保存します。
先ほどダウンロードしたファイルの内、証明書とプライベートキーもこのディレクトリに、名前は変えずに保存します。
ここから先は環境によるのですが、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のパスワード
実行はこのディレクトリに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\
次にArduino IDEでサンプルの「BasicPubSub」を開きます。
このサンプルはBasicPubSub.inoとaws_iot_config.hの2ファイルで構成されています。
aws_iot_config.hを開いて
// Copy and paste your configuration into this file
の下のところを、先ほど保存しておいたプログラムコードで差し替えます。
ようやくこれで準備ができたので、Yúnにスケッチをアップロードします。
Arduino IDEのシリアルターミナルを開くとこのようなメッセージが繰り返されて表示されたら、これでAWS IoTにMQTTでメッセージを送ることができたことになります。
さらにもう少しだけ続きがあります。
今度はこのYúnから送っているメッセージをAmazon S3に保存させてみることにします。
まず、スケッチのBasicPubSub.inoを見ると「topic1」という部分があります。
このキーワードを元にしてAWS IoTが処理を振り分けるように、AWSマネジメントコンソールで「Create a rule」してルールを作ります。
ルールの作成ページではSQL文のようなものを作るのですが、そのTopic filterには先ほど出てきた「topic1」を指定します。
ルールには最低1つのアクションを用意する必要があり、Lambdaの呼び出し、DynamoDBへのinsert、SNSの呼び出し、など幾つかの選択肢があるのですが、S3に記録するには「Strore a message in a file and store in the cloud(S3)」を選択。保存する先のバケットとキー(ここではmessage.txt)を設定します。
その際、もしロールが無ければ、バケットにオブジェクトをPutするためのロールを作ることになりますが、AWSの権限さえあれば、幾つかのクリックをするだけで自動的に適切なルールが作成されます。
これで指定したS3のバケットにはmessage.txtができ、中を覗くとYúnから送信している文字列「new message [カウント数]」が保存されていることが確認できます。
試している時に気がついたことなど。
これらの作業を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」です。