ESP-WROOM-02でもセンサネットワークを稼働してみます。ESP-WROOM-02でもというのは今までRaspberry Piで稼働してきたのでESP-WROOM-02でも稼働してみようということです。
ESP-WROOM-02とはEspressif SystemsのSoCであるESP8266を搭載したWiFiモジュールです。ここでは、以下のArduino互換の基板に搭載したボードを使っています。他にもいろいろなタイプの開発ボードがありますが、私の場合はArduino互換が使いやすいと思ったのでこれにしました。
また既にこの後継のモジュールのESP32も発売されていますが、ここではまずいろいろと実績もあるだろうということでESP-WROOM-02の方を使ってみました。
(※今回は開発環境の構築方法やプログラム詳細については取り上げません。こういった構成で稼働試験をやってみますということが要点です。必要な場合はページ最後の関連リンク等を参照して下さい。)
今回の構成と特徴
センサとクラウドの構成
ESP-WROOM-02開発ボードに直接Aitendo製のBME280を接続してWi-Fi接続のインターネット経由でAmbientに気温、湿度、気圧を送信します。
Deep-Sleepモードでの稼働
ESP8266の大きな特徴としてDeep-Sleepモードがあります。これにより非常に省電力で稼働出来るようになります。このモードで稼働するにはIO16のピンをRST端子に接続しておく必要があります。この接続がないとSleepから復帰(リセット)出来ません。(上の画像では黒いジャンパワイヤで接続しています。)
スケッチ(プログラム)
今回のスケッチは以下です。サンプルプログラムのレベルです。動作保証は出来ませんのでご了承ください。
#include <Wire.h> #include <ESP8266WiFi.h> #include <Adafruit_Sensor.h> #include <Adafruit_BME280.h> #include "Ambient.h" extern "C" { #include "user_interface.h" } //10分が目標 #define PERIOD 600 //BME280(I2C) Adafruit_BME280 bme; //Wifi const char* ssid = "APName"; const char* password = "PASSWORDPASSWORD"; //ambient unsigned int channelId = 9999; const char* writeKey = "AAAABBBB11112222"; WiFiClient client; Ambient ambient; void setup() { WiFi.mode(WIFI_STA); int t = millis(); Serial.begin(115200); delay(10); Serial.println(""); Serial.println("Start"); //Wi-Fi APに接続 WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { // Wi-Fi AP接続待ち delay(100); } Serial.print("WiFi connected\r\nIP address: "); Serial.println(WiFi.localIP()); //I2Cアドレス0x76を指定 bool status = bme.begin(0x76); if (!status) { Serial.println("Could not find a valid BME280 sensor, check wiring!"); while (1); } Serial.println(); //チャネルIDとライトキーを指定してAmbientの初期化 ambient.begin(channelId, writeKey, &client); //Ambientに連携 ambient.set(1, bme.readTemperature()); ambient.set(2, bme.readHumidity()); ambient.set(3, bme.readPressure() / 100.0F); ambient.send(); printValues(); t = millis() - t; t = (t < PERIOD * 1000) ? (PERIOD * 1000 - t) : 1; ESP.deepSleep(t * 1000, RF_DEFAULT); delay(1000); } void printValues() { Serial.print("Temperature = "); Serial.print(bme.readTemperature()); Serial.println(" *C"); Serial.print("Pressure = "); Serial.print(bme.readPressure() / 100.0F); Serial.println(" hPa"); Serial.print("Humidity = "); Serial.print(bme.readHumidity()); Serial.println(" %"); Serial.println(); } void loop() { }
稼働状況
まずはACアダプタからの電源供給で2週間ぐらい問題なく稼働しました。その後に電池駆動に切り替えました。今現在電池駆動で数日が経過という状況です。問題なく稼働中です。
2018/08/10 電池が切れました。
思ったより早く電池が切れました。11日ぐらいです。上記の画像の通りでLEDが点灯したままだったのでこうなったとも思います。もう少し考えてまたテストしたいと思います。TWE-LITEの方は1ヶ月程経過しましたが引き続き稼働中です。
実際のSleep時間
上記のスケッチで10分間隔での送信を目的としたのですが、実際には9分45秒ぐらいで15秒ぐらい早い状態です。精度が要求される場合はこの実際の計測時間からの補正やRTCを使用する等の必要があります。
Sleep時間の参考サイト
ESP8266で300秒deepSleepしたら実際に何秒眠るのか調べた
その他関連サイト
AmbientでIoTをはじめよう 温度、湿度、気圧を測定し、記録する
ESPr Developer + Ambientで自宅の環境モニターを作る
最後に自社PRですが、Raspberry Pi 関連のご依頼お待ちしております。本記事と同様のセンサネットワークの試用、試作等対応可能です。