ESP8266はsetOutputPower()でWi-Fiの出力レベルを変えることができます。そこでWi-Fiの出力レベルを変えた時にESP8266の消費電流がどう変化するかを測定しました。

消費電流の測定は電流センサーを使い、5ミリ秒ごとに消費電流をサンプリングし、Ambientに送って記録しました。「AmbientとArduino ESP8266でマイコンの消費電流モニターを作る」に書いた方法です。

測定対象プログラムの大まかな流れは次のようです。

void setup() {
    WiFi.setOutputPower(出力レベル); // Wi-Fiの出力レベル設定

    WiFi.begin(ssid, password); // Wi-Fi APに接続
    while (WiFi.status() != WL_CONNECTED) { // Wi-Fi AP接続待ち
        delay(100);
    }

    // センサーの初期化
    // Ambientの初期化

    // センサー値の取得
    // Ambientへの送信

    ESP.deepSleep(時間, RF_DEFAULT);
    delay(1000);
}

void loop() {
}

setOutputPower()で設定できる出力レベルは20.5dBm(最大)から0.0dBm(最小)までの値です。

出力レベルを20.5dBmと0.0dBmにした場合でESP8266の消費電流を調べたものが次です。

Wi-Fi出力20.5dBm

Wi-Fi出力0.0dBm

ESP8266からWi-Fiアクセスポイントまでの距離は3mぐらいで、20.5dBmでも0.0dBmでも通信できています。

どちらの場合も立ち上がってからWi−Fiアクセスポイントに接続し、センサーの値を読み、Ambientに送信するまでは約6.5秒かかっています。立ち上がり直後は350mA程度の電流が流れ、その後はベースで70mA弱の電流が流れるのは出力レベルによらず同じです。

ベースから何回もスパイク状に大きな電流が流れているのがWi−Fi送信をおこなっている部分と思われますが、このスパイク状の電流の値は出力レベルを20.5dBmに設定した場合は200〜400mA、0.0dBmに設定した場合は80〜120mAと変わっています。Wi-Fiの出力レベルを下げることで送信時の消費電流が抑えられることは確認できました。

Deep Sleep状態での消費電流は0.3mA程度です。仮に5分に一回データーを測定して送信し、後はDeep Sleepする場合、5分間の消費電流の累積値は20.5dBmの場合617mA秒、0.0dBmの場合は591mA秒で、消費電流の削減は4.2%程度になります。

Wi-Fiの出力レベルを下げることで送信時の消費電流は低く抑えられるのですが、5分に1回センサー値を測定し、Wi-Fiにつないで値を送信し、後はDeep Sleepするようなアプリケーションでは、送信している時間が少ないので、アプリケーション全体でいうと、削減効果は4%ぐらいと、あまり大きくないという結果になりました。