5
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

センサーのデータをMQTTで飛ばしてAmazon DynamoDBで保存

Last updated at Posted at 2018-04-29

センサーのデータ、例えば夏休みの自由研究で、温度センサーのデータを期間中継続的に収集したいとします。そんな時、パソコンを1月以上立ち上げたままにしておくのも辛いものがあります。ノートパソコンだと、スリープにならないように設定しないとなりません。他に良い手があるかもしれませんが、ここではESP8266を周期的に立ち上げて、データを取得し、MQTTでデータをAmazon DynamoDBに保存することにします。


IoTtoDynamoDB.jpg


ESP8266の設定

ローカルのデバイスとしてESP8266を使います。ESP8266はWifiにダイレクトでつなげることができ、またDeep Sleep Modeで超省エネで5分に1度起こす、といったことができます。
 

  1. ESP8266はWifi につなぎます。
  2. センサーデータをADCで取り込みます。
  3. データをMQTTでAWS IoTへ投げます。
  4. ESP8266はDeep Sleep Modeを設定します。
  5. Deep Sleep の後、リセットがかかり 1. へ戻ります。

flow2.jpg

ESP8266のArduinoの環境設定はこちらを参照してください。

Wifiの設定

Wifi の接続を何回か試みで、失敗すると抜けるようなプログラムになっています。

wificonnect.ino
#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#include <ESP8266HTTPClient.h>

ESP8266WiFiMulti WiFiMulti;
#define MAXTRY    100

void setup() {
    Serial.begin(9600);
    Serial.println ("connecting to wifi");
    WiFiMulti.addAP("SSID", "PASSWORD");    // put your setup code here, to run once:
    int iwait=0;
    while(WiFiMulti.run() != WL_CONNECTED) {    //wait for connection
        delay(100);
        Serial.print (".");
        iwait++;
        if(iwait>=MAXTRY){ 
            Serial.println ("\nconnect error");    //connect NG
            break;
        }
    }
    if(WiFiMulti.run() == WL_CONNECTED)    //connect OK
        Serial.println ("\nconnected");
}

センサーデータをADCで取り込む

こちらの記事を参考にさせていただきました。ADCのチャンネルが1チャンネルしかありませんので複数のアナログデータを取り込むときには工夫が必要ですが、また別途にさせてください。

adc8266.ino
extern "C" {
    #include "user_interface.h"
}

int iadc;

void setup() {
    Serial.begin(9600);
}
void loop() {
    iadc = system_adc_read();
    Serial.println (iadc);
    delay(1000);
}

データをMQTTでAWS IoTへ投げる

ESP8266からAWS IoTへデータを投げるプログラムはこちらこちら
こちらの記事を参照させていただきました。

次の4つのライブラリをArduino IDE にインストールします。

arduino_1.0.0.zipはこのページからダウンロードすることができます。

p1.jpg

長くなりそうなので、プログラムのサンプルは別なページで紹介したいと思います。

Deep Sleep Modeの設定

Deep Sleepを使うためには、GPI6とReset を接続しておきます。30秒間に1回Deep Sleep Modeから起床し、LEDを10回点滅するプログラムをサンプルに示します。

deepsleepblink.ino
void setup() {
    int i;
    pinMode(2, OUTPUT);
    for(i=0; i<10; i++){
        digitalWrite(2, HIGH);   // turn the LED on (HIGH is the voltage level)
        delay(1000);             // wait for a second
        digitalWrite(2, LOW);    // turn the LED off by making the voltage LOW
        delay(1000);  
    }
    ESP.deepSleep(3e7);          //Going into deep sleep for 30 seconds
}

AWSの設定

AWS側の設定は

  1. AWS IoT でモノの設定を行う。
  2. AWS IoT を外からデータを受け取れるようにセキュリティを設定する
  3. DynamoDBを設定する
  4. AWS IoT のアクションを設定し、受け取ったデータをDynamoDBへ保存する

といったステップが必要かと思います。こちらこちらの記事を参照して設定を行いました。こちらも長くなりそうなので、別なページに書きたいと思います。

5
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?