Rabbit Note

技術的な事柄をメモしていきます.

ESP32 と Fluentd で作る高精度 WiFi 温湿度計

ESP32 を使って乾電池駆動で動作するワイヤレス温度計を作る方法を紹介します.

背景

Fluentd と Raspberry Pi で作るセンサーネットワーク」では,Raspberry Pi を使って WiFi 経由でセンシングする方法を紹介しましたが,この方法では電源がとれない場所に設置できないという欠点がありました.Raspberry Pi は消費電力が大きすぎ,長期間の電池駆動には適さないためです.

そこで今回は,低消費電力で動作する ESP32 を使い,乾電池で動作する WiFi 温湿度計の作り方を紹介します.単3乾電池2本で約3ヶ月程度は動作するので,電源の無い屋外等に設置するのにぴったりです.

ホスト側のソフトとしては,Fluentd を使用します.

必要な部品

必要な部品はこんな感じ.

AliExpress で入手するもの

ESP-WROOM-32

格安の WiFi モジュールです.Arduino IDE で開発することができます.


ESP-32S Adapter Board

ESP32 を一般的な 2.54mm ピッチの端子に変換する基板です.

端子間に半田をはじくレジストがないので,半田付けがちょっと難しいです.安価なので多めに買っておきましょう.


ESP32 test board burn fixture

ESP32 に半田付けせずに,パソコンと接続したり,2.54mm ピッチの端子に変換したりできるボードです.

モジュールを押し込むだけで使えます.無くても良いですが,手元にあると開発が楽になるのでオススメです.


Strawberry Linux で入手するもの

TPS61291 超ローパワー昇圧コンバータ(2.5V/3V/3.3V)

乾電池2個から 3.3V を生成できるモジュールです.

ESP32 自体は 3V を切っても動作できますが,センサー類はそうはいかないので,安定した測定のために組み込んで起きます.入れておくと,乾電池の容量を絞りきれる,というメリットもついてきます.


Tindie で入手するもの

SHT31-D (Digital) Humidity & Temperature Sensor

温湿度計のモジュールです.

制度は,温度±0.3℃ 湿度±2%RH.温度計用ととしては十分過ぎるスペック.

このモジュールの場合,水や埃からセンサーを保護するフィルターをつけることができるので,屋外に設置する場合にはこのモジュールがオススメです.フィルターはセンサチップメーカの純正品になります.


ソフト

Arduino IDE を使って,ESP32 から SHT-31 をたたいて,結果を WiFi 経由で Fluentd に投げるコードを書きます.

ポイントは,次の 2 点です.

  • 消費電力を抑えるため,測定は5分ごとに行い,その間は消費電力を数 uA オーダに押さえる Deep Sleep Mode に入れる
  • WiFi 接続の途中で固まることがあるので,タイマーを使って一定時間経過したら無条件に Deep Sleep Mode に入れる

具体的なコードは下記のようになります.

環境に応じて書き換えないといけないのは,下記の部分です.

元のコードのままだと 192.168.2.1 のポート 8888 で待ち受けている http インプットプラグインに対して,「{“temp”:24.92,”humi”:63.07,”hostname”:”ESP32-outdoor”}」のような JSON を 5 分おきに投げつけます.

SHT-31 の SDA, SCL とはポート 25, 26 を使って接続します.

まずは,上で紹介した ESP32 test board burn fixture とブレッドボードを使ってささっと回路をくみ上げて動作確認するのがお勧めです.

その際,FLUENTD_TAG を “/test” のようにしたうえで,サーバ側の Fluentd に以下の設定をするのがオススメです.ESP32 が送信したデータがファイルに書き出されますので,tail -f しておけばリアルタイムに通信内容がモニタできます.

回路

ソフトの動作確認ができたら組み上げます.普通に結線するだけです.こんな感じで,100均のタッパーに収められます.

動作確認

Fluentd で収集したデータを Grafana でグラフ化するとこんな感じです.

今回作ったセンサーのデータは赤色の線の「屋外」のものになります.温度はなめらかに変化しており,精度良く測定できています.逆に湿度は小刻みな変化をしっかり捉えており,フィルター越しでも応答性をしっかり確保できていることが確認できます.

消費電力確認

乾電池駆動でどの程度もつか確認するため,3.3V の消費電流を測定してみました.

動作時は 150mA 近くまでいきますが,スリープ時は約 8uA まで落ち,平均すると約 1mA です.

単三アルカリ乾電池だと約 2000mAh なので,2個使いだとざっくり 2000 * (1.5*2 / 3.3) / 24 = 75日程度持つ計算になります.電源ICの効率とかの問題はありますが,TPS61291 が昇圧して乾電池を完全に使い切ることも考えると,約3ヶ月程度は動作しそうです.

雑感

ESP32 はなかなかいけてると感じました.

ZigBee 等と比べると WiFi は消費電力が断然多いので,格安 WiFi モジュールにあまりよいイメージなかったのですが,WiFi 電波が届く範囲で間欠動作させるのであれば,欠点はあまり感じません.

電力問題が足かせにならないのであれば逆に下記のようなメリットが光ってきます.

  • Arduino IDE を使って開発できるので,作業がとてもスムーズ.
    (ワンクリックでコンパイル,書き込み,ソフト動作が可能)
  • I2C や SPI といった通信が簡単に使えるのでセンサーとの接続性が良い.
  • センサーデータを使うホスト側とダイレクトに接続するので,開発時の見通しが良い.

一部ですごく注目されているのも納得です.

Pocket

, ,

コメントを残す

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