Program Resource

開発者向け各種コード、アルゴリズム、リソース情報ライブラリ もしくはねふぁの覚え書き

ESP32マイコンを内蔵したM5Stackで定期的に測定・記録等の処理を行い、バッテリー節約のためdeep sleepで待機の間眠らせておきたい場合は下記の様なスケッチを組む。

M5Stack Basic
M5Stack Basic

一つ注意点があり、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() {
}

コメントを残す

メールアドレスが公開されることはありません。


*

CAPTCHA