AWS IoT と MQTT で (ESP8266 実装編)

前回で 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 と戯れたりしたいと思っています。

なお私はこっち方面は疎いので、教えてほしいです。

次ページに今回のスケッチを載せておきます。 御覧ください。

コメントを残す