![見出し画像](https://assets.st-note.com/production/uploads/images/56849204/rectangle_large_type_2_6997d63c4cb27c913703e1481c740d0b.jpeg?width=1200)
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)可能かどうか検討しておく予定です。