*

IoT開発(14)
ESP-WROOM-02の稼働時間を延ばす工夫をしてみる

公開日: : Arduino, 開発, 電子工作

どもです。
この記事は、以下の続きです。

IoT開発(4)-ESP-WROOM-02を電池で駆動
IoT開発(11) ESP-WROOM-02を長時間駆動させた

上記のエントリで、DeepSleepモードを使用した場合の稼働時間を測定しました。
その結果、「測定間隔」を5分に設定した場合は、おおよそ20日間連続で稼働することが分かりました。
ここで、この「測定間隔」を長くすることで稼働時間を長くできることは、容易に想像ができます。
しかしながら、「測定間隔」を変更する以外に稼働時間を長くする方法は無いのでしょうか。
調査・検討して、その結果を試してみました。

1.電池を消費しそうな処理

単純に考えると、稼働時間を長くするためには、電池を消費する処理の時間を短くすればよいと考えました。
そこで、電池を消費しそうな処理、かつ処理時間を短くできそうな処理は無いか、考えてみました。
これに当てはまる処理として、「WiFi接続待ち」の処理があります。
具体的には、下記の処理になります。

上記の処理ですが、観察してみたところ、長い時には10分くらい続く場合があります。
そこで、この「待ち時間」を短くすることで、電池の消費を減らすことができると期待できます。

2.待ち時間を短くする方法

この「待ち時間」は、ライブラリの中の処理、WiFiの接続先(ルーターなど)の状態に依存します。
そのため、できる方法は限られます。
そのような状況での検討の結果、以下のような方法が考えられました。

  • 最大待ち時間を設定する。
  • 最大待ち時間以内にWiFiに接続できなかった場合には、測定を行わない。
  • 最大待ち時間以内にWiFiに接続できなかった場合には、DeepSleepモードの時間を短くする。

1つ目と2つ目は、至って当たり前の内容かと思います。
重要なのは、3つ目です。
この対応が無い場合、測定間隔が不要に長くなってしまい、観測データの精度が低くなる可能性があります。
例えば、測定間隔を「5分」に設定していた場合、1回WiFiに接続できないと、測定間隔が「10分」に広がってしまい、データの精度が落ちることが懸念されます。
時々刻々と変化している値を測定している場合には、影響が大きくなると考えられます。
これに対して、仮にWiFiに接続できなかった場合のDeepSleepモードの時間を「1分」とすると、測定間隔は「6分」となります。
測定できていない時間があるため、もちろんデータの精度が落ちることは回避できませんが、その影響は小さくできると考えられます。

3.最大待ち時間の設定

3.1.実装

上記を実現するために、実装を以下のように変更します。

WIFI_CONNECTION_WAIT_TIMEは、接続待ちの繰り返し回数、即ち待ち時間です。
また、メインループの処理を以下のように変更します。

DEEP_SLEEP_TIME_LONGとDEEP_SLEEP_TIME_SHORTは、それぞれWiFiに接続できた/できなかった場合のDeepSleepモードの時間です。

3.2.実装の解説

簡単ですが、上記実装を解説します。

3.2.1.setup()

まず、setup()関数です。
while()ループの中で、ループの繰り返し回数をカウントしています。
確認間隔(上記処理では500msec)とこの「繰り返し回数」から、接続待ち時間が分かります。
そして、WIFI_CONNECTION_WAIT_TIME以内に接続できなかった場合には、接続状態を示す変数(is_wifi_connected)に「0」をセットして、ループを抜けます。

3.2.2.loop()

次に、loop()関数の内容です。
loop()の先頭で、接続状態を示す変数(is_wifi_connected)の値を判定しています。
接続状態が「0」、即ち「接続できていない」場合にはdeep_sleep_timeにDEEP_SLEEP_TIME_SHORTをセットします。
接続状態が「0」ではない、即ち「接続できた」場合には、deep_sleep_timeにDEEP_SLEEP_TIME_LONGをセットします。
また、「接続できた」場合には、データの測定などの必要な処理を行います。
これにより、「接続できなかった場合には、DeepSleepモードの時間を短くする」ことが実現できています。

4.測定

上記の実装で、測定を開始しています。
しかしこの測定、通常でも「20日」を要するため、すぐに結果は得られません。
測定が完了したら、その時に報告します。

ではっ!

関連記事

google_test_top

C言語でEV3開発(5)

どもです。 今回のエントリーは、前回のエントリーでちくっと触れた、「単体テスト」について、です。

記事を読む

RasPi_Qt

QtでRaspberryPi/GUI開発(10)-SPI通信をしてみた(その2)

どもです。 えー。 「Qtで…」とか書いておきながら、今回もやっぱりQtは出てきません。

記事を読む

Arduino_Logo

Arduino nano(中華版)をセットアップしてみた

どもです。 突然ですが、「Arduino nano」互換(なのか?)の中華ボードを手に入れました。

記事を読む

think_about_utest

middle_unit
最小…よりも(ほんの)少し大きいテストフレームワーク

どもです。 今回は、単体テストのフレームワークについて書きます。 1.最小のフレームワーク

記事を読む

no image

C言語でEV3開発(15)-TOPPERS/HRP2 EV3 で PID制御

どもです。 今回のエントリーは、コレまでのエントリーから内容を変えて、モーターの動作の制御をします

記事を読む

think_about_utest

単体テストの効率化を考える(6)-スタブの自動生成ツール

どもです。 「単体テストの効率化について考える」の6回目です。 1回目から5回目まではコチラ

記事を読む

Rasp_DHT11

温度(湿度)センサを使ってみた(2)-RaspberryPi/pigpioでDHT11

どもです。 前回は、DHT11をAdrudinoにつないで温度/湿度を測定してみました。 そこで

記事を読む

cygwin_my_image

Windows10/cygwinの音を消す

どもです。 最近、Windows10/cygwinで作業をする場面がありました。 このcyg

記事を読む

cygwin_my_image

cygwinでstartコマンド

どもです。 このエントリでは、cygwinでWindows/コマンドプロンプトの「start」

記事を読む

raspberry-pi

RaspberryPi3を購入しました

どもです。 突然ですが、「Raspberry Pi3 model B」を購入しました。 今回のエ

記事を読む

Message

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

CAPTCHA


次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

arduino_relay_switch_002_ae_g5v_drv_eye_catch
Arduinoでリレースイッチ(2)-AE-G5V-DRV

どもです。 前回の記事では、「フォトカプラリレー」を使用したLチ

tlp222af_001_eye_catch
Arduinoでリレースイッチ(1)-TLP222AF

どもです。 つい先日、やっとのことでリレースイッチを手に入れるこ

c_sharp_eye_catch
外部からMariaDbにアクセスする(2)-C#からMariaDbにアクセスする。

どもです。 前回のエントリで、外部からMariaDbにアクセスす

c_sharp_eye_catch
外部からMariaDbにアクセスする(1)-データベースの設定

どもです。 今回は、Linux上のMariaDbにWindows

think_about_utest
middle_unit
最小…よりも(ほんの)少し大きいテストフレームワーク

どもです。 今回は、単体テストのフレームワークについて書きます。

→もっと見る

PAGE TOP ↑