4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ESP32で3時間DeepSleepしたら実際にどのくらい眠るのか調べた

Posted at

#はじめに
ESP32 のバッテリー駆動のときに良く使うdeepsleepですが、実際にどのくらいの誤差があるのか調べてみた。
キッカケは、12時間ほど寝かせたら数分の差が出たので、もうちょっとだけ正確な方がいいかなと思った。

元ネタとなり、参考とさせて頂いた ESP8266版がこちらになります。

ESP8266で300秒deepSleepしたら実際に何秒眠るのか調べた

ESP8266ですとおよそ、2.3% ほど早く指定時間より早くWakeupするそうです。

#ESP32
実際に使用したESP32。上2つは開発ボード。スイッチサイエンス版はDIP化して使用。

ESP32 購入先
ESP32-DevKitC ESP-WROOM-32開発ボード 秋月電子通商
HiLetgo ESP32 ESP-32S NodeMCU開発ボード HiLetgo
ESP32-WROOM-32D Wi-Fi + BLEモジュール スイッチサイエンス

#調査方法
元ネタは、RTCモジュールを使っているのですが、面倒なのでAmbientサーバの時刻の差で簡単に測ってみることにしました。3時間を3回連続で。

image.png

Ambientは受信時刻を記録しているので、他に、Ambientに送信してから寝るまでの時間(AS)と起きてから送信するまでの時間(WA)をデータとしてAmbientに送っておきます。よって、

実際に寝ていた時間SW2 = AA - (AS2 + WA2)

ということになります。

起きてから送信するまでの時間(WA)は、Ambient に送信する前に millis() で起動からの時間を使いました。

  WA = millis();
  ambient.send(WA, AS);

送信してから寝るまでの時間(AS)は、DeepSeep 直前で、

  AS = millis() - WA;
  esp_deep_sleep_start();

※3時間で1分ぐらいの差が出る想定ですので、Ambientへの送受信時間は無視しました。許容範囲かと。
※結果的には、WA,ASも無視してよい時間でした。WiFi接続に掛かる時間も1秒ぐらいでしたし。

#結果
###Ambient データ

秋月電子通商
2019-10-05T09:57:40.541Z,0,1169,,,,,,
2019-10-05T12:56:56.192Z,89,1076,,,,,,
2019-10-05T15:55:50.333Z,86,1123,,,,,,
2019-10-05T18:54:56.422Z,91,1100,,,,,,
2019-10-05T21:53:31.936Z,83,1176,,,,,,
2019-10-06T00:52:39.708Z,82,1125,,,,,,
2019-10-06T03:51:34.157Z,85,1101,,,,,,
HiLetgo
2019-10-05T09:57:33.102Z,0,1131,,,,,,
2019-10-05T12:56:23.105Z,85,1071,,,,,,
2019-10-05T15:55:10.675Z,82,1106,,,,,,
2019-10-05T18:54:11.482Z,84,1071,,,,,,
2019-10-05T21:52:43.656Z,91,1108,,,,,,
2019-10-06T00:51:52.953Z,82,1082,,,,,,
2019-10-06T03:50:46.230Z,89,1871,,,,,,
スイッチサイエンス
2019-10-05T12:24:26.746Z,0,1229,,,,,,
2019-10-05T15:22:40.139Z,90,1874,,,,,,
2019-10-05T18:21:44.531Z,85,1118,,,,,,
2019-10-05T21:20:28.176Z,92,1081,,,,,,
2019-10-06T00:19:33.532Z,91,1074,,,,,,
2019-10-06T03:18:36.512Z,82,1117,,,,,,

以下が集計結果です。1~6回計測。
見方は、-45.5 というのは3時間のDeepSleep指定で45.5秒早く起きたということです。
誤差は、3時間のDeepSleep指定で平均-0.58%の誤差があったということです。

1回目 2回目 3回目 4回目 5回目 6回目 平均 誤差%
秋月電子通商 -45.5 -67.0 -55.1 -85.7 -53.4 -66.7 -62.2 -0.58
HiLetgo -71.1 -73.6 -60.3 -89.0 -51.8 -68.6 -69.1 -0.64
スイッチサイエンス -108.5 -56.8 -77.5 -55.8 -58.2 - -71.3 -0.66

#まとめ
上記の結果を踏まえると、3時間のDeepSleepで約1~2分早く目覚めるということが分かりました。
なので、例えば12時間のDeepSleepさせたいときは、誤差-0.6%発生することを加味して、

    set_sleep_sec = 12 * 60 * 60;   // sec
    esp_sleep_enable_timer_wakeup(set_sleep_sec * 1000000LL * 1.006);
    esp_deep_sleep_start();

のようにしておけば大体よろしいかと。まぁそれでも12時間だと1,2分の差は覚悟が必要ですね。

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?