はじめに
みなさま、あけましておめでとうございます。
今年もコツコツと技術を楽しみながら進んでいきたいと思います。
本年もどうぞよろしくお願いいたします。
さて、今回は「ESP32を電池で動かしたい」というテーマに挑戦します。
コンセントの位置に縛られず、好きな場所にセンサーを置けたら便利ですよね。
ということで、ESP32の乾電池駆動にトライしてみました。
準備
まずは単三乾電池3本を格納できる電池パックを用意しました。
乾電池1本は約1.5Vですが、実測すると3本で約4.8Vありました。

配線は以下の通りです。
- 電池パックの + → ESP32 の 5V
- 電池パックの − → ESP32 の GND
ESP32 DevKitCの5Vピンにはレギュレータが載っているため、乾電池3本の電圧でもそのまま給電できます。
ソースコード
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
停止後に電池の電圧を測ると約2.4Vでした(1月2日に計測)
この電圧ではESP32は動作できないようです。

DeepSleepなし(常時稼働)
- 開始:12/7 11:23
- 終了:12/8 12:06
おわりに
今回の検証では、ESP32を乾電池で長期間動かすのはかなり厳しいという結果になりました。
特にWi-Fi送信は電力消費が大きく、10分おきの送信でも約6日が限界でした。
一方で、以下のような用途なら電池寿命を伸ばせる可能性がありそうです。
- イベント発生時だけ起動する
- センサー値をローカルに保持し、送信頻度を大幅に下げる
- Wi-Fiを使わずBLEやLoRaを使う
また、AI に相談したところ、
乾電池2本(約3V)→ ESP32 の 3.3V ピンへ給電したほうが、レギュレータ損失が少なく長持ちする
というアドバイスもありました。
本格導入する際はこの方式でも試してみたいと思います。


