見出し画像

IoT(ESP32)とバッテリー運用 その7

その6での設定にて、気付いたらいつの間にかモバイルバッテリーが完全放電していました。orz

画像1

結局約264時間、10,000mAh 換算で約529時間(22日)稼働していました。
5分に一回の計測でしたが、これを1時間に1回に間隔を広げると頻度が12分の1になります。計測時の消費電力が支配的と仮定して、12倍とはいかなくとも10倍に伸びると仮定すると、10,000mAh 換算なら220 日となり、半年以上の連続稼働が視野に入りそうです。

ハードウェア変更

大体限界値が見えてきましたので、元々のバッテリー18650 での運用下での検証にハードウェアを切り替えたいと思います。

ESP32TTGO18650 - 18650バッテリー・ホルダーとOLEDディスプレー付きのESP32開発ボードです。
DHT11 - 温湿度センサー。気圧は測定できませんが、電源電圧が3.3V-5.5V と幅広いので使い易いセンサーです。またI2Cに比べても電源以外に必要な結線数が1本のみ(I2Cだと2本)というのも使い易い理由の一つです。

ピン・ヘッダーのハンダ付け

これが面倒なので今まで放置していましたが、重い腰をあげ半田ごてを取り出してハンダ付けしました。イモ半田も何カ所かありますが、まあお愛敬という事で。😝

画像2

ブレッドボードに付けると、ディスプレーが裏側になるのは少々格好悪いです。

画像3

全部でこれだけですので、コンパクトではあります。

画像4

コード

その6で使ったコードのセンサー部分をBME280 からDHT11 用へ変更しました。

#include <WiFi.h>
#include <WiFiClient.h>
#include <Ambient.h>
#include "DHT.h"

/*
//
// Global Definitions
//
*/
#define TIME_TO_SLEEP  60*5      // 測定周期(秒)

const char* ssid = "XXXXXXXX";   // %%% Wifi SSID      %%%
const char* pswd = "XXXXXXXXXX"; // %%% Wifi パスワード %%%

#define DHTPIN 17     // %%% Digital pin connected to the DHT sensor %%%
#define DHTTYPE DHT11 // DHT 11

WiFiClient client;
Ambient ambient;

unsigned int channelId = XXXXX;             // %%% AmbientのチャネルID %%%
const char* writeKey = "XXXXXXXXXXXXXXXX";  // %%% ライトキー %%%

// Initialize DHT sensor.
// Note that older versions of this library took an optional third parameter to
// tweak the timings for faster processors.  This parameter is no longer needed
// as the current DHT reading algorithm adjusts itself to work on faster procs.
DHT dht(DHTPIN, DHTTYPE);

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(".");
   }

   dht.begin();
   // Wait a few seconds between measurements.
   delay(3000);

   // Reading temperature or humidity takes about 250 milliseconds!
   // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
   float h = dht.readHumidity();
   // Read temperature as Celsius (the default)
   float t = dht.readTemperature();

   // Check if any reads failed and exit early (to try again).
   if (isnan(h) || isnan(t)) {
     Serial.println(F("Failed to read from DHT sensor!"));
     Serial.println();
   } else {
   float room_temp = t;  // センサーからのデータ読み出し値
   float room_humi = h;

   Serial.println();
   Serial.printf("temp: %.2f, humid: %.2f \r\n", room_temp, room_humi);

   ambient.begin(channelId, writeKey, &client); // チャネルIDとライトキーを指定してAmbientの初期化

   ambient.set(1, room_temp);  // Ambientのデータ1に温度をセットする
   ambient.set(2, room_humi);  // データ2に湿度をセットする
   ambient.send();  // Ambientに送信する
   delay(2000);
   }
   // Deep sleepする時間(マイクロ秒)を計算する
   uint64_t sleeptime = TIME_TO_SLEEP * 1000000 - (millis() - starttime) * 1000 - 1000000;
   esp_deep_sleep(sleeptime);  // DeepSleepモードに移行
   // ここには戻らない
}

void loop(){
}

%%% で囲まれた行が、環境毎に変更が必要な部分です。
今回DHT11 のデーターピンは17番に接続しています。

このコードをコンパイルし、ESP32にダウンロード。
Ambient にデーターが送付されている事が確認できました。

所が....

さて切り替えが完了したので18650 でどの程度の時間計測可能か確認してみようとした所...

USB から給電されている間は問題無いのですが、18650 での運用に切り替えるとAmbient に適切なデーターが送付されないという問題が発生してしまいました。

はてさて、次はこの問題対応となります。orz






この記事が気に入ったらサポートをしてみませんか?