- 2017-3-20
- ESP-WROOM-02
- コメントを書く
ESP-WROOM-02開発ボードを単三電池3本で長期に運用するのが目的。
今回は温湿度・気圧センサーのBME280を使用し、ESP-WROOM-02開発ボードの低消費電力モード「Deep-Sleep」モードを試してみた。
スマホでの温度表示はBlynkです。
配線図
IO16ピンをRST端子に接続しておくことがDeep-Sleepモードからの復帰のためには必要です。
Aruduino IDEでスケッチ書き込み時に16ピンとRSTが接続されているとエラーになるので、ジャンパーピン等を利用して書き込み時に外せる様にすると良いでしょう。
乾電池はVINに接続します。
118行目で設定した時間でDeep-Sleepモードから復帰します。
ESP.deepSleep(300 * 1000 * 1000);
↑赤字部分
今回は300秒で設定しました。
/************************************************************** * Blynk is a platform with iOS and Android apps to control * Arduino, Raspberry Pi and the likes over the Internet. * You can easily build graphic interfaces for all your * projects by simply dragging and dropping widgets. * * Downloads, docs, tutorials: http://www.blynk.cc * Blynk community: http://community.blynk.cc * Social networks: http://www.fb.com/blynkapp * http://twitter.com/blynk_app * * Blynk library is licensed under MIT license * This example code is in public domain. * ************************************************************** * This example runs directly on ESP8266 chip. * * You need to install this for ESP8266 development: * https://github.com/esp8266/Arduino * * Please be sure to select hte right ESP8266 module * in the Tools -> Board menu! * * Change WiFi ssid, pass, and Blynk auth token to run :) * **************************************************************/ #define BLYNK_PRINT Serial // Comment this out to disable prints and save space #include <ESP8266WiFi.h> #include <BlynkSimpleEsp8266.h> #include <BME280_MOD-1022.h> #include <Wire.h> #define WakeMode RFMode #define WAKE_RF_DEFAULT RF_DEFAULT #define WAKE_RFCAL RF_CAL #define WAKE_NO_RFCAL RF_NO_CAL #define WAKE_RF_DISABLED RF_DISABLED // You should get Auth Token in the Blynk App. // Go to the Project Settings (nut icon). char auth[] = "fromBlynkApp"; //Blynkで生成されるAuth Token unsigned long lastCheck = 0; double tempMostAccurate, humidityMostAccurate, pressureMostAccurate; char buff[50]; // Arduino needs this to pring pretty numbers void printFormattedFloat(float x, uint8_t precision) { char buffer[10]; dtostrf(x, 7, precision, buffer); Serial.print(buffer); } void deepSleep(uint32_t time_us, RFMode mode = RF_DEFAULT); void setup() { Serial.begin(115200); Blynk.begin(auth, "SSID", "password"); //無線ルーターのSSIDとパスワード Wire.begin(); pinMode(12, OUTPUT); // need to read the NVM compensation parameters BME280.readCompensationParams(); BME280.writeStandbyTime(tsb_0p5ms); // tsb = 0.5ms BME280.writeFilterCoefficient(fc_16); // IIR Filter coefficient 16 BME280.writeOversamplingPressure(os16x); // pressure x16 BME280.writeOversamplingTemperature(os2x); // temperature x2 BME280.writeOversamplingHumidity(os1x); // humidity x1 BME280.writeMode(smNormal); } void formattedFloat(float x, uint8_t precision, char *buff) { dtostrf(x, 7, precision, buff); } BLYNK_READ(V0) { tempMostAccurate = BME280.getTemperatureMostAccurate(); Serial.print("Temp "); printFormattedFloat(tempMostAccurate, 2); Serial.println(); formattedFloat(tempMostAccurate, 2, buff); Blynk.virtualWrite(V0, buff); } BLYNK_READ(V1) { humidityMostAccurate = BME280.getHumidityMostAccurate(); Serial.print("humid "); printFormattedFloat(humidityMostAccurate, 2); Serial.println(); formattedFloat(humidityMostAccurate, 2, buff); Blynk.virtualWrite(V1, buff); } BLYNK_READ(V2) { pressureMostAccurate = BME280.getPressureMostAccurate(); Serial.print("pressure "); printFormattedFloat(pressureMostAccurate, 2); Serial.println(); formattedFloat(pressureMostAccurate, 2, buff); Blynk.virtualWrite(V2, buff); ESP.deepSleep(300 * 1000 * 1000); } void loop() { Blynk.run(); int diff = millis() - lastCheck; if (diff > 1000) { while (BME280.isMeasuring()) { } // read out the data - must do this before calling the getxxxxx routines BME280.readMeasurements(); lastCheck = millis(); } else if (diff < 0) { lastCheck = 0; } }
コメント
この記事へのトラックバックはありません。
この記事へのコメントはありません。