I would like my M5 Core Ink to shutdown (to save battery), then automatically wake up after a given amount of seconds and resume its activity.
For that, I use M5.shutdown(x)
where x
is the amount of seconds. To my understanding, that's typically what shutdown
does.
It is not working! For example, I specify 60 seconds as argument to M5.shutdown()
, the program's loop()
is still called every ~5 seconds!
Strange: the eInk display is not refreshed... (at all).
Precisely, my loop
code
- Gets the RTC time
- Displays it (both Serial and eInk)
- Calls
M5.shutdown(60)
The serial monitor shows that loop
is called every ~6-7 seconds. Strange, the eInk screen is not refreshed and displays only the first RTC time.
RTC Time 14:07:35
Shutting down for 60 seconds
RTC Time 14:07:41
Shutting down for 60 seconds
Code
#define DELAY_SECONDS 60
void loop() {
// Get RTC time
RTC_TimeTypeDef rtcTime;
M5.rtc.GetTime(&rtcTime);
// Display time
sprintf(buf, "%02d:%02d:%02d", rtcTime.Hours, rtcTime.Minutes, rtcTime.Seconds);
InkPageSprite.drawString(10,50,buf);
InkPageSprite.pushSprite();
Serial.printf("RTC Time %02d:%02d:%02d\n", rtcTime.Hours, rtcTime.Minutes, rtcTime.Seconds);
// Sleep
delay(100);
Serial.printf("Shutting down for %d seconds\n", DELAY_SECONDS);
M5.shutdown(DELAY_SECONDS);
}
I tried M5.shutdown(60000)
, same result. I also tried supplying a rtcTime to shutdown
, but it didn't change anything either.
The creation of the sprite is in setup
:
void setup() {
M5.begin(); //Init CoreInk.
if( !M5.M5Ink.isInit()) //Init CoreInk screen.
{
Serial.printf("[-] M5Ink init failed");
while (1) delay(100);
}
M5.M5Ink.clear(); // Clear screen.
Serial.printf("[+] Clearing eInk screen\n");
delay(1000);
if( InkPageSprite.creatSprite(0,0,200,200,true) != 0 ){
Serial.printf("[-] Ink Sprite create failed\n");
}
// set RTC time
RTC_TimeTypeDef rtcTime;
rtcTime.Hours = 14;
rtcTime.Minutes = 6;
rtcTime.Seconds = 0;
M5.rtc.SetTime(&rtcTime);
Serial.printf("[+] Setup success\n");
}