ESP32 でバッテリー電圧 + 室内温度モニターを作る


バッテリー電圧モニター ダッシュボード(電圧 14.2V / 室温 27℃ の表示例)
ダッシュボードの表示例(電圧 14.2V / 室温 27.0℃)

ログハウスに置いてある鉛蓄電池の電圧と室内温度を、スマホやPCからいつでも見られるようにした記録です。
ESP32 WROVER + カメラモジュールで電圧 / 温度 / 動体検知をまとめて監視、温度に応じて換気扇を ON/OFF する SSR 制御も追加しました。

できること

  • バッテリー電圧監視: 0〜20V を分圧抵抗で読み取り、ブラウザにリアルタイム表示
  • 室内温度監視: NTC サーミスタ (AT-THMS / SEMITEC 103AT-11) で温度計測
  • 温度連動 SSR 制御: 設定温度を超えたら GPIO13 → SSR → 換気扇を ON(ヒステリシス制御)
  • カメラ映像 + 動体検知: VGA グレースケールでフレーム差分検知、検知時は ntfy.sh で通知
  • 電圧異常通知: 注意 / 警告レベルを超えると ntfy.sh にプッシュ通知
  • 1日1ファイルの CSV ログ: 10分間隔で SPIFFS に保存、31日で自動削除、Webからダウンロード
  • 固定IPでローカルWebサーバー + MyDNS.jp DDNS で外部からもアクセス可能
  • WiFiManager: 初回設定は AP モードのキャプティブポータルから

ハードウェア構成

マイコン
Freenove ESP32 WROVER (CAM-OV2640 内蔵)
電圧計測
GPIO33 ← 分圧抵抗 R1=12kΩ + R2=2.2kΩ
温度計測
GPIO32 ← 10kΩ + NTC サーミスタ (B=3435K, R₀=10kΩ@25℃)
SSR出力
GPIO13 (HIGH=+3.3V) → DC-DC SSR →DC-ACインバータ→ AC100V換気扇
電源
USB 5V
OS
Arduino IDE / ESP32 core 3.3.8

分圧回路(電圧計測)

バッテリー(+) ──[ R1 = 12kΩ ]──┬── GPIO33 (ADC)
                                  │
                                [ R2 = 2.2kΩ ]
                                  │
バッテリー(-) ───────────────────┴── GND

分圧比は R2 / (R1+R2) = 2.2 / 14.2 ≒ 0.155。ADC レンジ 3.3V いっぱいで約 21.3V まで計測可能。校正は実測値ベースの 10 点区分線形補間。

温度分圧回路

3.3V ──[ 10kΩ ]──┬── GPIO32 (ADC)
                  │
                [ NTC 10kΩ @25℃ ]
                  │
                 GND

B 定数法で抵抗値から温度に換算。T[K] = 1 / (1/T₀ + ln(R/R₀)/B)

状態判定しきい値

電圧 状態
12.0V 以上 正常
10.0V 〜 12.0V 未満 注意
10.0V 未満 警告

注意レベルに入ると ntfy.sh で「優先度:高」、警告レベルでは「優先度:緊急」の通知を送信。連続通知を防ぐため 60 秒のクールダウンを設けています。

Web ダッシュボード

ブラウザで https://www.shinjo.tokyo:8080/ を開くと:

  • バッテリー電圧の大きな数字 + 正常/注意/警告 のバッジ表示
  • 室内温度の大きな数字 + 制御ピン(GPIO13)の ON/OFF 状態
  • カメラのライブ画像(10秒間隔で更新)
  • 動体検知インジケータ(赤いドットが点滅)
  • SSR 制御の ON/OFF 温度をブラウザ上から個別設定 → SPIFFS に保存
  • 電圧ログ CSV ファイル一覧 + ダウンロード
  • WiFi 設定リセット(Basic 認証 + 確認ページの2段階)

1.SSR のヒステリシス制御

ON 温度と OFF 温度を独立して設定できる方式に変更。たとえば「30℃ 以上で ON、25℃ 以下で OFF」と設定すれば、両閾値の間(25〜30℃)では直前の状態を維持するので、温度が閾値付近を行ったり来たりしても無駄な ON/OFF が発生しません。

2. WiFiManager でハードコードから卒業

以前はソース内に SSID/パスワードを書いてビルドしていましたが、現バージョンは初回起動時に VoltageMonitor-Setup という AP が立ち上がるので、スマホから接続してキャプティブポータルで WiFi を設定する方式に。

3. /wifi-reset は Basic 認証 + 確認ページ

誤って WiFi 設定をリセットすると再設定が面倒なので、ダッシュボードの「WiFi 設定リセット」ボタンには 2 段階の防御をかけています:

  1. クリック → Basic 認証ダイアログ → ユーザー名 / パスワード入力
  2. 認証 OK → 「実行 / キャンセル」ボタンの確認ページ表示
  3. 「実行」を押した時のみ POST で実リセット実行

4. CSV ログは 1日1ファイル / 31日で自動削除

10分ごとに /voltage_YYYY-MM-DD.csv に追記。31日経過したファイルは自動削除されるので SPIFFS が溢れません。NTP 同期成功直後にも 1 回書き込みを行うので、起動から 10 分待たなくても最初のレコードが見えます。

使ったライブラリ・サービス

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です