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,,,,,,
HiLetgo2019-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분의 차이는 각오가 필요하네요.
Reference
이 문제에 관하여(ESP32로 3시간 DeepSleep하면 실제로 얼마나 자는지 조사했다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/nori-dev-akg/items/76eefdff39ba8c06d136
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
실제로 사용한 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,,,,,,
HiLetgo2019-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분의 차이는 각오가 필요하네요.
Reference
이 문제에 관하여(ESP32로 3시간 DeepSleep하면 실제로 얼마나 자는지 조사했다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/nori-dev-akg/items/76eefdff39ba8c06d136
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
WA = millis();
ambient.send(WA, AS);
AS = millis() - WA;
esp_deep_sleep_start();
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분의 차이는 각오가 필요하네요.
Reference
이 문제에 관하여(ESP32로 3시간 DeepSleep하면 실제로 얼마나 자는지 조사했다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/nori-dev-akg/items/76eefdff39ba8c06d136
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
set_sleep_sec = 12 * 60 * 60; // sec
esp_sleep_enable_timer_wakeup(set_sleep_sec * 1000000LL * 1.006);
esp_deep_sleep_start();
Reference
이 문제에 관하여(ESP32로 3시간 DeepSleep하면 실제로 얼마나 자는지 조사했다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/nori-dev-akg/items/76eefdff39ba8c06d136텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)