Data-Loggerを作る

最近ミニ温室を買ったので温室の外と中の違いLoggerを作って測って見ることにしました。

先ずはハード

今回の回路は以下の通り。

  • CPU: ESP32(30ピンタイプ) バージョン” v3.1”。
  • 外部クロック: 32.768kHz 水晶発振子
    • ESP32のRTCはクロックとして通常Internal 150kHzを使います。ただこの発信器の精度は悪い
    • クロックに32.768kHzの外部発振器を使えば精度が格段に上がる。
  • 温湿度センサ: DHT20
    • I2C仕様の温度と湿度が測定出来るセンサーです。
    • 難点はI2Cアドレスが1つで複数個使用には向いていない点。
    • 今回はアナログスイッチで切り替えてDHT20を4個使用しています。
  • アナログスイッチ: 4066
    • DHT20切り替え用のアナログスイッチ。
    • このICは4回路のスイッチを持っていて、それを各DHT20に割り当てています。
  • u_SD: データ保存用
    • SPI仕様のu_SD。ここに測定データを保存します。
  • 電池: 18650タイプのリチューム電池
  • 三端子レギュレータ: NJU7223DL1
    • ここで3.3Vを作っています。
  • バッテリーモニタ: 30,50kΩ抵抗
    • バッテリーの電圧をここで測定しています。
    • 2.5Vから4.5Vを測定出来るように30と50kΩ抵抗で電圧を調整。
    • SP32のADC機能を使って測定しています。
  • 外部割り込み
    • 10kΩとプッシュスイッチでDeepSleepからの復帰信号用を作成しています。
  • パイロットLED
    • 基板に実装されている赤いLEDがパワーオンと同時に点灯します。
    • この赤いLEDはDeepSleep時でも点灯し消費電力を下げる為除去しました。
    • 赤いLESの変わりに測定の準備が出来た事を知らせる。
    • ESP32の基板に実装されている青いLEDを使用しています。

次はソフト

開発はArduino IDE1.8.19 で行っています。ソフトは本体コードの”logger.ino”。HP用の”logger_esp32.html”, “set_time.html”, “logger.css”の全部で4つです。

  • ”logger.ino”
    • ESP32をアクセスポイントとしてHTTPサーバを立ち上げています。
      • サーバにWebブラウザでアクセスして測定の設定を行います。
      • WebServerの簡単な製作と説明にESP32でWebサーバを立ち上げる時の説明が有ります参照下さい
    • 測定と次の測定の間はDeepSleepでパワーセーブ
      • ミニ温室の温度測定なので1時間に1回または2回位の測定で1週間位続けて行いたいと思います。
      • 測定の時間より次の測定までの時間(ウエイト)が長く、パワーをセーブしたいのでDeepSleepを採用しています。DeepSleepに関しては Deep Sleep & Its Wake-up Sources を参照下さい。
      • 今回はWake-up Sourcesとして、RTCと外部信号割り込みの2つを使用しています。
    • ファイルシステムを2つ使用しています。
      • HP用のHTML、CSSはLittleFSを使用してESP32内に保存しています。
      • 測定データはSDカードに”/data0.dat”、”/data1.dat” の2つファイル名で保存されます。
        • 2つの内容は同じ。ー>どちらか一方処理中に電池切れ等不慮の事故のBackアップ。
    • DHT20関係
      • DHT20ライブライがArduinoに有るのですが、それは測定後1秒間隔を置かないと測定出来ない使用になっていました。
      • 1つのセンサで測定を行う場合、1秒のウエイトが必要なのかも知れませんが、今回は4個別のセンサなのでウエイトを置く必要は無いと思いDHT20使い方を参照しています。
    • RTC関係
    • バッテリー電圧
      • ADCに関しては ADCを使う を参照下さい。 
      • 補正を自動で行う関数を使用して測定しています。
  • ”logger_esp32.html” センサ管理用HPのHTML コード
  • “set_time.html” 基本時間設定用HPのHTMLコード
  • “logger.css” 上記2つのCSS。

使い方

上記のスケッチをコンパイルし、実行。基板の青いLEDが点灯したらESP32側の準備OKです。

  • ESP32のアクセスポイント(AP)に接続
    • スマホ等でESP32のアクセスポイントに接続します。
    • 下記はスマホでの接続の例
      1. スマホで近くのAPを検索。今回はAPをlooger_APとしています。
        looger_APをクリックすると
      2. PassWord入力の画面が表示されます。PassWordは”test1234” です。
        PassWordを入力して接続します。
      3. スマホが”looger_AP”に接続された事を確認
  • ESP32のコントロールHPにアクセス
    • スマホのブラウザを上げて192.168.4.10にアクセス。コントロールHPは表示されます
    • 各部分の説明は以下の通り。
    • 現在の時間設定ボタン”Set Time”を押すと下記が表示されます。
      ここで現在の時間を設定します。
      • 年:2000年から2099年
      • M / D:月 / 日
      • H / M:時間/分
  • 実行例
    • センサを2つ使用。測定間隔を5分。と設定してStartボタンを押して測定開始。
    • これでバッテリが無くなる。またはリセットボタンが押されるまで測定を続けます。
    • 測定中外部割り込みプッシュスイッチを押すと測定を中断せずに途中データを見る事が出来ます。
      • プッシュスイッチを押す。青いLEDが点灯した後192.168.4.10にアクセス
      • HPの画面は下記右の様になります。
        • Status: Running。
        • To next: 次の測定までの時間(秒)
        • Contボタンが有効。Startボタンが無効。
      • To nextに表示された時間内にデータをダウンロードしContボタンを押せば測定は継続されます
      • 長期の測定で途中経過をみたい時に使います。
  • ダウンロードした測定データは下記の様に項目毎に”,”で区切ったフォーマットになっています。
    • 測定通しNO,バッテリー電圧,時間/曜日,年月,センサNO1,温度/湿度、〜、
    • 0,3.98,13:14:26 Sun, Mar 09 2025,1:,21.1,36.8,2:,19.9,32.3,3:,No use,4:,No use,
      1,4.04,13:44:29 Sun, Mar 09 2025,1:,31,73.1,2:,21.3,25.4,3:,No use,4:,No use,
      2,4.04,14:14:29 Sun, Mar 09 2025,1:,29.8,79.3,2:,20.8,27.9,3:,No use,4:,No use,
      3,4.04,14:44:29 Sun, Mar 09 2025,1:,27.2,74.8,2:,14.7,40,3:,No use,4:,No use,
      4,4.03,15:14:29 Sun, Mar 09 2025,1:,24.3,77.1,2:,14.3,41.1,3:,No use,4:,No use,
      5,4.03,15:44:29 Sun, Mar 09 2025,1:,18.6,85,2:,12.3,45.1,3:,No use,4:,No use,

実際に使ってみた

ミニ温室の中と外にセンサを設置して温度と湿度を測定して見ました。測定間隔を30分に設定して測定開始。温度、湿度共に問題無く測定出来ていました。結果は下記の通り。

測定は問題無いようなのですが、測定期間が予想よりかなり短かったです。約3日でバッテリが切れてしまいました。基板のPower LEDを取ったにも関わらずバッテリ切れが速すぎます。