IoT(ESP32)とバッテリー運用 その6 #根本変更
その5の結果を受け、センサー・液晶へのアクセス頻度を1/4 に減らしてみた結果...
返って短く無くなってしまいました... orz
これは拉致があかないと、根本的に変更してこのボードの限界性能を先に確認する事にしました。
具体的には、下記の様に抜本的変更を行いました。
現在考え得る最も消費電力の小さい方法だと思います。
1. 計測データーのプル待ちを、Ambient というサービスへのプッシュ方式に変更(5分間隔)
2.液晶表示を全く行わず、待機時間は低消費電力モード(DeepSleep mode)にする
実装コード
以上2点を実装したコードが下記となります。
コメントで’%%%’ の有る行が、環境毎に変更が必要な部分です。
#include <WiFi.h>
#include <WiFiClient.h>
#include <Adafruit_BME280.h>
#include <Ambient.h>
/*
//
// Global Definitions
//
*/
#define TIME_TO_SLEEP 60*5 // 測定周期(秒)
const char* ssid = “XXXXXXX”; // %%% Wifi SSID %%%
const char* pswd = “XXXXXXXX”; // %%% Wifi パスワード %%%
WiFiClient client;
Ambient ambient;
unsigned int channelId = 40063; // %%% AmbientのチャネルID %%%
const char* writeKey = “XXXXXXXXX”; // %%% ライトキー %%%
Adafruit_BME280 bme; // I2C
/*
//
// Main
//
*/
void setup(){
unsigned long starttime = millis();
Serial.begin(115200);
while (!Serial) ;
WiFi.begin(ssid, pswd); // Wi-F接続開始
while (WiFi.status() != WL_CONNECTED) { // 接続するまでチェックを繰り返す
delay(500);
Serial.print(".");
}
ambient.begin(channelId, writeKey, &client); // チャネルIDとライトキーを指定してAmbientの初期化
Serial.println(F("BME280 check")); // BME280用セットアップ
unsigned status;
status = bme.begin(0x76);
// You can also pass in a Wire library object like &Wire2
// status = bme.begin(0x76, &Wire2)
if (!status) {
Serial.println("Could not find a valid BME280 sensor, check wiring, address, sensor ID!");
Serial.print("SensorID was: 0x"); Serial.println(bme.sensorID(),16);
Serial.print(" ID of 0xFF probably means a bad address, a BMP 180 or BMP 085\n");
Serial.print(" ID of 0x56-0x58 represents a BMP 280,\n");
Serial.print(" ID of 0x60 represents a BME 280.\n");
Serial.print(" ID of 0x61 represents a BME 680.\n");
//while (1) delay(10);
}
Serial.println(F("BME280 OK"));
Serial.println();
float room_temp = bme.readTemperature(); // センサーからのデータ読み出し
float room_humi = bme.readHumidity();
float room_prss = bme.readPressure() / 100;
Serial.printf("temp: %.2f, humid: %.2f, vbat: %.1f\r\n", room_temp, room_humi, room_prss);
ambient.set(1, room_temp); // Ambientのデータ1に温度をセットする
ambient.set(2, room_humi); // データ2に湿度をセットする
ambient.set(3, room_prss); // データ3にバッテリー電圧をセットする
ambient.send(); // Ambientに送信する
delay(1000);
// Deep sleepする時間(マイクロ秒)を計算する
uint64_t sleeptime = TIME_TO_SLEEP * 1000000 - (millis() - starttime) * 1000 - 1000000;
esp_deep_sleep(sleeptime); // DeepSleepモードに移行
// ここには戻らない
}
void loop(){
}
データー確認
送られたデーターは下記URL にて確認できます。
https://ambidata.io/bd/board.html?id=29813
さあ、何時間持つか楽しみ😄
この記事が気に入ったらサポートをしてみませんか?