前回で PCと AWS IoT が MQTT で接続されて、 パブリッシュ、サブスクライブ できるようになりました。 今回は Universal ESPduino を使って ESP8266 がMQTT で AWS IoT に 接続できるようにします。
これまでの方法で分かる通り、 AWS IoT で MQTT に接続する場合、 TLS1.2 での認証が必須となります。
また、今回のやり方は MQTT over WebSocket で接続するため、 署名プロセスは SigV4 となります。
Direct MQTT で接続するメリットや方法について分かれば教えて欲しいです。
IAMユーザーの作成
まず、SigV4 のためにIoT:MQTT の Pub/Sub 権限を持った IAMユーザーの作成を行います。
AWS コンソールへアクセスし、セキュリティ項目から [IAM] のページを開きます。
[ユーザー] のページから [ユーザーの追加] をクリックします。
ユーザー名をユニークに指定し、AWSアクセスの種類として、[プログラムによるアクセス] を選択し、[次のステップ:アクセス権源] をクリックして進めます。
ユーザーに権限を持たせる方法は2種類あり、グループに所属させてグループにポリシーをアタッチする方法と、ユーザーに直接ポリシーをアタッチする方法があります。
ここでは簡単にするため、ユーザーに直接ポリシーをアタッチします。
[既存のポリシーを直接アタッチ] を選択し、 ポリシータイプに [ AWSIoTFullAccess ] を選択して、[次のステップ:確認] をクリックして次に進みます。
※問題が発生しないよう、権限は適切に設定しましょう。
ユーザー詳細を確認し、 右下の [ユーザーの作成] をクリックします。
これで IAMユーザーが作成されました。 アクセスキーID と シークレットアクセスキー を表示させて 大切に保存しておきます。
なお、これらは後から表示させることができませんので、失敗したらアクセスキーの作り直しが必要です。
[.csv のダウンロード] をしておいても良いと思います。
Universal ESPduino (ESP8266 : WROOM-02) の Arduino IDE 側の設定
今回の方法はこちらのライブラリを使用しました。
Library | Link |
aws-mqtt-websockets | https://github.com/odelot/aws-mqtt-websockets |
このライブラリは 3つの別のライブラリを使用しているため、 合わせて4つのライブラリをインストールする必要があります。
Library | Link |
aws-sdk-arduino | https://github.com/odelot/aws-sdk-arduino |
arduinoWebSockets | https://github.com/Links2004/arduinoWebSockets |
Paho MQTT for Arduino | https://projects.eclipse.org/projects/technology.paho/downloads |
aws-mqtt-websocket と Paho MQTT for Arduino (Arduino Crlient Library)は ダウンロードして libraries ディレクトリ (Windows の場合は マイドキュメント\Arduino\libraries ディレクトリです) に展開します。
aws-sdk-arduino は 同じくlibraries ディレクトリに保存しますが、 その後 src/common と src/esp8266 を aws-sdk-arduino のディレクトリに上書きコピーします。
WebSocket for Arduino は Arduino IDE のメニューから [スケッチ] > [ライブラリのインクルード] > [ライブラリの管理] を開き、 WebSocket for Arduino (Server + Client) を探して最新バージョンをインストールします。
これで Arduino IDE へのライブラリインストールが完了です。
次は実際に Universal EDPduino (ESP8266 : WROOM-02) を使って AWS IoT と MQTT 通信をしてみます。