
ESP32マイコンを内蔵したM5Stackで定期的に測定・記録等の処理を行い、バッテリー節約のためdeep sleepで待機の間眠らせておきたい場合は下記の様なスケッチを組む。
一つ注意点があり、USB駆動では問題ないのだが、バッテリー駆動の場合スリープ時間が約32秒を超えると起きれなくなってしまう。
https://github.com/m5stack/M5Stack/issues/34
ハードウェアに使われている IP5306 と言う電源制御ICが45mA以下の電流が32秒以上継続するとスタンバイに入ってしまう為らしい。このため、M5Stackでバッテリー駆動でディープスリープをする場合、必ず32秒以内に一度起きる必要がある。
#include <WiFi.h> #include <M5Stack.h> #include "esp_deep_sleep.h" #define WAKE_INTERVAL 30 //スリープ時間 秒 void gosleep() { Serial.println("Sleeping"); Serial.flush(); delay(100); const uint32_t DEEP_SLEEP_uS = 1000 * 1000 * WAKE_INTERVAL; //n秒後に起動 esp_deep_sleep_enable_timer_wakeup(DEEP_SLEEP_uS); esp_deep_sleep_start(); } void setup() { Serial.begin(115200); M5.begin(); delay(100); esp_deep_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_OFF); esp_deep_sleep_pd_config(ESP_PD_DOMAIN_RTC_SLOW_MEM, ESP_PD_OPTION_OFF); esp_deep_sleep_pd_config(ESP_PD_DOMAIN_RTC_FAST_MEM, ESP_PD_OPTION_OFF); esp_deep_sleep_pd_config(ESP_PD_DOMAIN_MAX, ESP_PD_OPTION_OFF); //なんらかの処理 gosleep(); } void loop() { }