Deep-Sleepさせて消費電流を節約するのはやったことがある。
今回は一番電気を食うと言われるWi-Fiを切ったらどうなるかの比較だ。
もちろんDeep-Sleepほどの節電にはならないが、結構な差が見られた。
青線は、通常使っているDeep-Sleep無しの温度、湿度、気圧の計測モジュールの消費電流を示す。
途中の山はWi-Fi経由でOrange Piに接続してデータを送信しているときをあらわしている。
オレンジの線が今回試したWi-FiのON/OFFの比較だ。
4秒毎にONとOFFを繰り返している。
ONの時は70mA程度、OFFにすると17mA程度となる。
Wi-Fi無しの用途での使用時間が長いならWi-Fiは明示的にOFFにした方が良さそうだとわかる。
ただし、Wi-Fiの操作についてはちゃんとした記述を見つけられなかったので、これでいいのかどうかは若干の疑問は残る。
こんなコードになっている。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#include <ESP8266WiFi.h> int Counter = 0; void setup() { Serial.begin(115200); } void loop() { Serial.print("Count:"); Serial.println(Counter); ++Counter; WiFi.disconnect(); WiFi.mode(WIFI_OFF); WiFi.forceSleepBegin(); delay(4000); WiFi.forceSleepWake(); WiFi.mode(WIFI_STA); //WiFi.begin(STASSID, STAPSK); delay(4000); } |
追加で人のスケッチもやってみた。
https://diyi0t.com/how-to-reduce-the-esp8266-power-consumption/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
#include "ESP8266WiFi.h" #include "WiFiClient.h" void setup() { Serial.begin(115200); } void loop() { WiFi.mode( WIFI_OFF ); WiFi.forceSleepBegin(); Serial.println("WiFi is down"); delay(5000); WiFi.forceSleepWake(); delay(1); // Bring up the WiFi connection WiFi.mode(WIFI_STA); WiFi.begin("XXX", "XXX"); // Wait until the connection has been confirmed before continuing while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } // Debugging - Output the IP Address of the ESP8266 Serial.println("WiFi connected"); Serial.print("IP address: "); Serial.println(WiFi.localIP()); delay(2000); } |
実際にルータにつながったのはグラフでConnectと書いた位置より後かもしれない。
接続開始時に電流の消費がしばらく増加するような気がする。
その後、つながるまでの時間はバラツキがあるので上のようなグラフとなる。
100ms間隔でのデータなのでピーク値は取り逃している可能性がある。