1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【ESP32】乾電池駆動を目指したDeepSleep実験備忘録

1
Posted at

はじめに

みなさま、あけましておめでとうございます。
今年もコツコツと技術を楽しみながら進んでいきたいと思います。
本年もどうぞよろしくお願いいたします。

さて、今回は「ESP32を電池で動かしたい」というテーマに挑戦します。
コンセントの位置に縛られず、好きな場所にセンサーを置けたら便利ですよね。
ということで、ESP32の乾電池駆動にトライしてみました。

準備

まずは単三乾電池3本を格納できる電池パックを用意しました。
乾電池1本は約1.5Vですが、実測すると3本で約4.8Vありました。
スクリーンショット 2026-01-02 103222.png

配線は以下の通りです。

  • 電池パックの + → ESP32 の 5V
  • 電池パックの − → ESP32 の GND

ESP32 DevKitCの5Vピンにはレギュレータが載っているため、乾電池3本の電圧でもそのまま給電できます。

20251207_022310825_iOS.jpg

ソースコード

DeepSleepを使って 10分おきに起動 → DHT22の計測 → データ送信 → 再びDeepSleep という流れです。

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

#define channelId xxxxx
#define writeKey "xxxxx"

WiFiClient client;
Ambient ambient;

#define DHTPIN 13
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);

const char *ssid = "xxxxx";
const char *password = "xxxxx";

// DeepSleep時間10分
#define SLEEP_US (600ULL * 1000000ULL)

void setup() {
  Serial.begin(115200);
  delay(1000);

  // DHT初期化
  dht.begin();
  delay(2000); // DHT22は起動後2秒待つ必要あり

  // 温湿度取得
  float t = dht.readTemperature();
  float h = dht.readHumidity();

  if (isnan(t) || isnan(h)) {
    Serial.println("[ERROR] Measurement failed!");
    esp_sleep_enable_timer_wakeup(SLEEP_US);
    esp_deep_sleep_start();
  }

  Serial.println("[INFO] Temperature: " + String(t, 1) + "C   Humidity: " + String(h, 1) + "%");

  // Wi-Fi接続
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  Serial.print("[INFO] Connecting to WiFi");
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("\n[INFO] Connected!");

  // Ambient初期化
  ambient.begin(channelId, writeKey, &client);

  // Ambient送信
  ambient.set(1, t);
  ambient.set(2, h);

  if (ambient.send()) {
    Serial.println("[INFO] Ambient Send Success!");
  } else {
    Serial.println("[ERROR] Ambient Send Failed!");
  }

  Serial.println("[INFO] Going to DeepSleep...");
  delay(100);

  // DeepSleep設定
  esp_sleep_enable_timer_wakeup(SLEEP_US);
  esp_deep_sleep_start();
}

void loop() {
  // DeepSleepワンショット方式なので使わない
}

検証結果

DeepSleepあり

  • 開始:12/21 12:50
  • 終了:12/27 17:26

deepsleep終了.png

停止後に電池の電圧を測ると約2.4Vでした(1月2日に計測)
この電圧ではESP32は動作できないようです。
20260102_004756656_iOS.jpg

DeepSleepなし(常時稼働)

  • 開始:12/7 11:23
  • 終了:12/8 12:06

こちらは約1日で電池切れになりました。
deepsleepなし終了.png

おわりに

今回の検証では、ESP32を乾電池で長期間動かすのはかなり厳しいという結果になりました。
特にWi-Fi送信は電力消費が大きく、10分おきの送信でも約6日が限界でした。

一方で、以下のような用途なら電池寿命を伸ばせる可能性がありそうです。

  • イベント発生時だけ起動する
  • センサー値をローカルに保持し、送信頻度を大幅に下げる
  • Wi-Fiを使わずBLEやLoRaを使う

また、AI に相談したところ、

乾電池2本(約3V)→ ESP32 の 3.3V ピンへ給電したほうが、レギュレータ損失が少なく長持ちする

というアドバイスもありました。
本格導入する際はこの方式でも試してみたいと思います。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?