センサーのデータ、例えば夏休みの自由研究で、温度センサーのデータを期間中継続的に収集したいとします。そんな時、パソコンを1月以上立ち上げたままにしておくのも辛いものがあります。ノートパソコンだと、スリープにならないように設定しないとなりません。他に良い手があるかもしれませんが、ここではESP8266を周期的に立ち上げて、データを取得し、MQTTでデータをAmazon DynamoDBに保存することにします。
ESP8266の設定
ローカルのデバイスとしてESP8266を使います。ESP8266はWifiにダイレクトでつなげることができ、またDeep Sleep Modeで超省エネで5分に1度起こす、といったことができます。
- ESP8266はWifi につなぎます。
- センサーデータをADCで取り込みます。
- データをMQTTでAWS IoTへ投げます。
- ESP8266はDeep Sleep Modeを設定します。
- Deep Sleep の後、リセットがかかり 1. へ戻ります。
ESP8266のArduinoの環境設定はこちらを参照してください。
Wifiの設定
Wifi の接続を何回か試みで、失敗すると抜けるようなプログラムになっています。
#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チャンネルしかありませんので複数のアナログデータを取り込むときには工夫が必要ですが、また別途にさせてください。
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
- aws-mqtt-websockets-master.zip
- aws-sdk-arduino-master.zip
- arduinoWebSockets-master.zip
arduino_1.0.0.zipはこのページからダウンロードすることができます。
長くなりそうなので、プログラムのサンプルは別なページで紹介したいと思います。
Deep Sleep Modeの設定
Deep Sleepを使うためには、GPI6とReset を接続しておきます。30秒間に1回Deep Sleep Modeから起床し、LEDを10回点滅するプログラムをサンプルに示します。
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側の設定は
- AWS IoT でモノの設定を行う。
- AWS IoT を外からデータを受け取れるようにセキュリティを設定する
- DynamoDBを設定する
- AWS IoT のアクションを設定し、受け取ったデータをDynamoDBへ保存する
といったステップが必要かと思います。こちらとこちらの記事を参照して設定を行いました。こちらも長くなりそうなので、別なページに書きたいと思います。