ESP32로 3시간 DeepSleep하면 실제로 얼마나 자는지 조사했다

소개



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회 연속으로.



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%의 오차가 있었다는 것입니다.



첫 번째
두 번째
세 번째
네 번째
다섯 번째
여섯 번째
평균
오차 %


아키즈키 전자 통상
-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분의 차이는 각오가 필요하네요.

좋은 웹페이지 즐겨찾기