大柳です。
最近Arduino UNOを購入しました。
LチカしたりCdSセンサーを読み取ったりしてみましたが、ブレッドボードを使えばハンダ付不要でいろんな部品をつなげられるし、コーディング、コンパイル、Arduinoへの転送もArduino IDEで簡単にできて感動しました。そしてモノを作って動かすのはやはり楽しい。
最近はRaspberry Piのようなワンボードマイコンにセンサーをつけてインターネット上のサーバに連携させたり、インターネット側から機器を操作したりとIoT的なことも個人が簡単に、低コストでできるようになってきています。
AWSでもAWS IoTが提供され、機器から受けた情報を受け取ってAWSの他のサービスに連携したり、逆に機器を制御・管理することができます。
今回の記事ではAWS IoTを利用するにあたって、どんなデバイスが使えるかを調べてみましたので紹介します。
IoTメッセージブローカーで対応可能なプロトコル
デバイス(Thing、いわゆるモノ)からインターネット上に情報を送ったり、受け取ったりするためのエンドポイントは、AWS IoTではメッセージブローカーが行います。
http://www.slideshare.net/AmazonWebServicesJapan/aws-black-belt-tech-2015-aws-iotから引用
このメッセージブローカーとデバイスとの通信はMQTTとHTTPSがサポートされています。
http://docs.aws.amazon.com/iot/latest/developerguide/protocols.html
MQTTはデータ送受信用のプロトコルで、ヘッダーサイズが最小2バイトと小さく、HTTPやHTTPS(ヘッダーは100バイトオーダー)よりオーバーヘッドが小さい分、通信料やバッテリーを節約することができます。上記の表のPub/SubとはMQTTでの送信と受信を指します。
オーバーヘッドが小さいことや、ライブラリも幅広く提供されているMQTTが現状ではIoTには最適ですが、デバイスによってはMQTTに対応していなかったり、TLS1.2に対応していなかったりしてAWS IoTで利用できないことがあります。またTLS/SSLはデバイス側のCPU/メモリリソースもそれなりにいるので、そもそもTLS/SSLにデバイスが対応していない場合もあります。
選択肢としては、MQTTがセキュリティや実装の面で最適であり、MQTTが使えない場合はMQTT+WebSocket 、HTTPSを検討し、どれもデバイスが対応できない場合はEC2を立てて中継する、他のメッセージブローカーを利用するといった対処が必要になります。
開発環境(AWS IoT Device SDK)
AWSが提供するAWS IoT Device SDKを利用することでMQTTやTLS通信、認証を利用することができます。
https://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/iot-device-sdk.html
現在提供されているのは、以下のプラットフォーム向けです。
・AWS Mobile SDK for Android
・AWS Mobile SDK for iOS
・Arduino Yún SDK
・AWS IoT Device SDK for Embedded C
・AWS IoT Device SDK for Java
・AWS IoT Device SDK for JavaScript
・AWS IoT Device SDK for Python
マイコンボードや組み込み向けだとArduino Yún SDK、AWS IoT Device SDK for Embedded C、AWS IoT Device SDK for Javaを使うことになりますが、対応するデバイスは限られます。
各SDKは以下からダウンロードできます。
http://docs.aws.amazon.com/iot/latest/developerguide/iot-sdks.html
AWS IoT向け機器の例
では最後に具体的に利用できそうなデバイスを紹介していきます。
AWS IoT ボタン
Amazon Dash Buttonのベースのハードウェアです。米国Amazonから約20ドルで買えます。
https://aws.amazon.com/iotbutton/
デバイスにはWi-Fiで接続可能で、AWS IoTコンソールから簡単に設定して、IoTデバイスとして利用することができます。
AWS IoT » Developer Guide » AWS IoT の開始方法 » デバイスを設定する
https://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/configure-iot.html
AWS IoT スターターキット
Amazonのパートナーが販売しているもので、ボード本体とセンサー、アクチュエータ、AWS IoTデバイスSDKなどが含まれ、Intel Edisonなどがあります。AWS IoTでの動作が確認されているので、ガイド通りに設定すればすぐに使い始めることができるのがメリットです。30ドルくらいから150ドルくらいまでのものが紹介されています。
AWS IoT スターターキット Powered by AWS
https://aws.amazon.com/jp/iot/getting-started/#kits
Windows/Linux/Mac
AWS IoT Device SDK for Java/JavaScript/Pythonが問題なく使えるはずです。
MQTTクライアントであるMosquittoなどでもAWS IoTと通信できます。
Androidスマートフォン/iPhone
AWS Mobile SDK for Android/iOSが利用可能です。
Pahoライブラリを使えばWebSocketを経由してブラウザ上でMQTT通信を行ことも可能です。
Raspberry Piなど組み込みLinux
マシンのリソースにもよりますが、Raspberry PiのようにLinuxが乗っていればAWS IoT Device SDK for JavaScript/Pythonをインストールすれば対応できます。なお、SSL周りのパッケージも必要なようです。
Arduinoなど組み込みボード
Arduino Yún SDKではArduino Yúnのみ対応しており、他のUnoなどではMQTTに対応していなかったりします。
AWS IoTと連携するには、HTTPSでメッセージブローカーと通信するか、非公式ライブラリでMQTT+WebSocketで対応する事例も報告されています。
まとめ
AWSからSDKが提供されていますが、デバイスごとにプロトコル対応状況が違ったり、SDKに加えて関連パッケージも必要だったり、デバイスによってはIoT利用環境を作るのに骨が折れるケースもありそうです。
今回、個人的にIoTデバイスとして使いたいと考えているArduinoや互換デバイス(ESP8266など)は、別途追加のライブラリを入れたりと手間がかかりそうですが、後日チャレンジしてご報告したいと思います。
コストの話をすると、デバイスと関連部品(電源、Wifiアダプタなど)を用意するとだいたい5,000円くらいかかり、センサーごとにIoT通信用のデバイスを用意するとコストが高くつくので、たくさんのセンサーを連携させたい場合はHUBなどで集約するか、気長にデバイスの低価格化を待つことが必要そうです。
次回記事
AWS IoTを始めよう -MQTTの設定(AWS IoT編)-
最後までお読みいただきありがとうございました。