見出し画像

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

電力消費の改善ですが、元々問題だろうと考えるポイントが2点ありました。

液晶バックライト

オンボードの液晶のバックライトが全力で常にオンになっています。
バックライトの明るさを調整できれば良いのですが、どうもデジタル出力ピン(4) でバックライトの制御がされているようなので、PWM で明るさ制御するしか無いようですが、取り敢えずはオフにして効果を見てみます。

下記一行を適当な場所に挿入しました。

digitalWrite(4, LOW); // バックライト・オフ

表示が無いと寂しいので、画面オフの効果を見た後は、バックライトを少し暗くする方向で検討したいと考えています

イベントループ

Core 0 がBME280 からデーターを読み出し、ディスプレーに結果を書き出すという無限ループを実行しています。1ループ約15秒となっています。

15秒に1回BME280 アクセスと、連続したディスプレー更新なので、それなりに電力消費しているかと思いますが、ここは今回変更無しにしようとします。

Core 1 はWEB リクエスト処理をイベントループで対応していますが、下記の通り10m秒毎にリクエスト・チェックを行うというやや過剰な処理になっています。

ここを1000m秒(1秒) に変更して、消費電力の低減を目指してみようと思います。

変更前

//--- コア1ループ WEBリクエスト処理 (非同期処理、WEBリクエスト処理)
void loop_core1(void * parameter) {
 while(1){ // 無限イベントループ
   for(int i=0; i < 10000000; i++) { // 約160分
     web_server.handleClient();
     delay(10);
   }
   WiFi.mode(WIFI_STA);                     // DHCP のリース切れの前に再取得
   WiFi.begin(ssid, pswd);                  // WiFi再接続開始
   while (WiFi.status() != WL_CONNECTED) {  // 繰り返し接続をチェックし
       delay(500);                          // 接続するまでチェックを繰り返す
   }
//    MDNS.begin(DNS_NAME);                    // 念の為DNS名も再設定    
 }
}

変更後

//--- コア1ループ WEBリクエスト処理 (非同期処理、WEBリクエスト処理)
void loop_core1(void * parameter) {
 while(1){ // 無限イベントループ
   for(int i=0; i < 100000; i++) { // 約160分
     web_server.handleClient();
     delay(1000);
   }
   WiFi.mode(WIFI_STA);                     // DHCP のリース切れの前に再取得
   WiFi.begin(ssid, pswd);                  // WiFi再接続開始
   while (WiFi.status() != WL_CONNECTED) {  // 繰り返し接続をチェックし
       delay(500);                          // 接続するまでチェックを繰り返す
   }
//    MDNS.begin(DNS_NAME);                    // 念の為DNS名も再設定    
 }
}

問題発生!

さあ再プログラミンして実行しましょう!

ところが直ぐにESP32 開発ボードが止まってしまいます...

どうやら、ある一定以上の電流が流れていないと、モバイルバッテリーはスタンバイになって給電を止めてしまうようです。何て優れた機能でしょう!😝

Plan B

とりあえず、バックライトだけ戻して、ループ改善だけでどれだけ違いがあるかを見てみる事にします。

バックライトを消すことはかなり消費電力的に効果的な様なので、この間にバックライトの明かり調整(PWM)可能かどうか検討しておく予定です。


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