前回で Arduino IDE への ライブラリのインストールと、 AWS IoT の準備ができました。 いよいよ実機の Universal ESPduino を使って ESP8266 (WROOM-02) から MQTT で AWS IoT に接続したいとおもいます。
Universal ESPduino は ESP8266 (WROOM-02) を搭載したマイコンボードです。
今回の回路も こちらで使用したタクトボタンが付いたサンプルを使用します。
コードは aws-mqtt-websocket のサンプルを使用します。
Arduino IDE を起動したら メニューから [ファイル] > [スケッチ例] > かなり下の方の [aws-mqtt-websocket] > [aws-mqtt-websocket-example] をクリックして スケッチ例を開きます。
開いたスケッチ例 の ” //AWS IOT config, change these: ” の部分を修正します。
//AWS IOT config, change these: char wifi_ssid[] = "your-ssid"; char wifi_password[] = "your-password"; char aws_endpoint[] = "your-endpoint.iot.eu-west-1.amazonaws.com"; char aws_key[] = "your-iam-key"; char aws_secret[] = "your-iam-secret-key"; char aws_region[] = "eu-west-1"; const char* aws_topic = "$aws/things/your-device/shadow/update"; int port = 443;
29行目から、接続する Wi-Fi のSSID、 パスワード、
こちらで確認した エンドポイント、
こちらで作成したIAMユーザーキーと、シークレットキー、
エンドポイントの amazonaws の手前にある リージョン (違う場合もある?)
前回までと同じトピックで MQTTを試す場合、以下のようにします。
const char* aws_topic  = "mqtt/test";
ポートは443でOKです。
このスケッチでは起動直後にメッセージが送信されますが、このメッセージを変更します。
    strcpy(buf, "{\"state\":{\"reported\":{\"on\": false}, \"desired\":{\"on\": false}}}");
これを以下のように変更します。
    strcpy(buf, "{\"message\": \"Hello from Universal ESPduino\"}");
167行目の setup() { の直後に pinMode(4, INPUT_PULLUP); を入れます
void setup() { pinMode(4, INPUT_PULLUP); Serial.begin (115200);
そして、 loop() {} の中を以下の様にしてボタン入力に対応させます。
void loop() { //keep the mqtt up and running if (awsWSclient.connected ()) { client->yield(); if(!digitalRead(4)){ sendmessage (); } } else { //handle reconnection if (connect ()){ subscribe (); } } }
これでコンパイルしてボードに書き込むと、シリアルコンソール上に起動直後からこのようなメッセージが表示されます。このように表示され、Wi-Fi と MQTT の接続完了し、メッセージの送信もできました。
MQTT.fx で確認しても、以下のようにメッセージが無事にAWS IoT 経由で受信されている事が分かります。
さらに Universal ESPduino に実装されたプッシュボタンを押すとシリアルコンソールに以下のように文字が追加されます。
※ボタンは1秒ごとにスキャンされるため、長押ししてください。
また、MQTT.fx からパブリッシュしても、シリアルコンソールにメッセージが受信されます。
これで Universal ESPduino を使って ESP8266 (WROOM-02) から MQTT で AWS IoT に接続し、 パブリッシュ、サブスクライブができました!
ここまで出来れば、あとは AWS IoT 側で煮るなり焼くなりして いろいろ便利な IoT が実現できそうですね。
とりあえず私は Lambda を使ったり、 DynamoDB に入れたり、 Amazon Alexa と戯れたりしたいと思っています。
なお私はこっち方面は疎いので、教えてほしいです。