Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 14 additions & 7 deletions examples/RTC_WakeUp/RTC_WakeUp.ino
Original file line number Diff line number Diff line change
Expand Up @@ -18,20 +18,27 @@ void setup()
{
Serial.printf("Ink Sprite creat faild");
}
InkPageSprite.drawString(10,50,"Press PWR Btn for sleep");
InkPageSprite.drawString(15,80,"after 5 sec wakeup.");
InkPageSprite.drawString(10,50,"Press EXT Btn for sleep");
InkPageSprite.drawString(15,80,"after 30 sec wakeup.");
InkPageSprite.drawString(10,110,"Press PWR Btn for");
InkPageSprite.drawString(15,140,"shutdown.");
InkPageSprite.pushSprite();
}

void loop()
{
//Press PWR Btn for sleep , after 5 sec wakeup.
//Press EXT Btn for sleep , after 30 sec wakeup.
if( M5.BtnEXT.wasPressed())
{
Serial.printf("Btn %d was pressed \r\n",BUTTON_EXT_PIN);
M5.M5Ink.deepSleepEink(); // Eink wakeup through setup routine
M5.deepSleepESP(30);
}
//Press PWR Btn for shutdown
if( M5.BtnPWR.wasPressed())
{
Serial.printf("Btn %d was pressed \r\n",BUTTON_PWR_PIN);
M5.shutdown(5);
//M5.shutdown(RTC_TimeTypeDef(10,2,0));
M5.shutdown();
}
//M5.rtc.SetAlarmIRQ(RTC_TimeTypeDef(10,2,0));
M5.update();
}
}
20 changes: 10 additions & 10 deletions src/M5CoreInk.cpp
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
#include "M5CoreInk.h"
#include "driver/gpio.h"

M5CoreInk::M5CoreInk(/* args */)
{
Expand All @@ -12,11 +13,12 @@ int M5CoreInk::begin(bool InkEnable, bool wireEnable, bool SpeakerEnable)
{
pinMode(POWER_HOLD_PIN, OUTPUT);
digitalWrite(POWER_HOLD_PIN, HIGH); // Hold power

gpio_hold_en((gpio_num_t)POWER_HOLD_PIN); // Hold power during deepSleep

pinMode(LED_EXT_PIN, OUTPUT);

Serial.begin(115200);
Serial.printf("initializing.....OK\n");
Serial.printf("initializing github library OK\n");

if (wireEnable)
{
Expand Down Expand Up @@ -57,34 +59,32 @@ void M5CoreInk::update()

void M5CoreInk::shutdown()
{
M5Ink.deepSleep();
// Disable power to shutdown device
gpio_hold_dis((gpio_num_t)POWER_HOLD_PIN);
digitalWrite(POWER_HOLD_PIN, LOW);
}
int M5CoreInk::shutdown(int seconds)
int M5CoreInk::deepSleepESP(int seconds)
{
M5Ink.deepSleep();
rtc.clearIRQ();
rtc.SetAlarmIRQ(seconds);
delay(10);
digitalWrite(POWER_HOLD_PIN, LOW);
esp_deep_sleep_start();
return 0;
}
int M5CoreInk::shutdown(const RTC_TimeTypeDef &RTC_TimeStruct)
{
M5Ink.deepSleep();
rtc.clearIRQ();
rtc.SetAlarmIRQ(RTC_TimeStruct);
delay(10);
digitalWrite(POWER_HOLD_PIN, LOW);
esp_deep_sleep_start();
return 0;
}
int M5CoreInk::shutdown(const RTC_DateTypeDef &RTC_DateStruct, const RTC_TimeTypeDef &RTC_TimeStruct)
{
M5Ink.deepSleep();
rtc.clearIRQ();
rtc.SetAlarmIRQ(RTC_DateStruct,RTC_TimeStruct);
delay(10);
digitalWrite(POWER_HOLD_PIN, LOW);
esp_deep_sleep_start();
return 0;
}

Expand Down
2 changes: 1 addition & 1 deletion src/M5CoreInk.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ class M5CoreInk
void update();

void shutdown();
int shutdown( int seconds );
int deepSleepESP( int seconds );
int shutdown( const RTC_TimeTypeDef &RTC_TimeStruct);
int shutdown( const RTC_DateTypeDef &RTC_DateStruct, const RTC_TimeTypeDef &RTC_TimeStruct);

Expand Down
42 changes: 9 additions & 33 deletions src/utility/BM8563.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -217,40 +217,16 @@ void RTC::SetDate(RTC_DateTypeDef *RTC_DateStruct)

int RTC::SetAlarmIRQ(int afterSeconds)
{
uint8_t reg_value = 0;
reg_value = ReadReg(0x01);

if (afterSeconds < 0)
{
reg_value &= ~(1 << 0);
WriteReg(0x01, reg_value);
reg_value = 0x03;
WriteReg(0x0E, reg_value);
return -1;
}

uint8_t type_value = 2;
uint8_t div = 1;
if (afterSeconds > 255)
{
div = 60;
type_value = 0x83;
}
else
{
type_value = 0x82;
}

afterSeconds = (afterSeconds / div) & 0xFF;
WriteReg(0x0F, afterSeconds);
WriteReg(0x0E, type_value);

reg_value |= (1 << 0);
reg_value &= ~(1 << 7);
WriteReg(0x01, reg_value);
return afterSeconds * div;
if (afterSeconds > 0)
{
esp_sleep_enable_timer_wakeup(afterSeconds * uS_TO_S_FACTOR);
return 1;
}
else
{
return 0;
}
}

int RTC::SetAlarmIRQ(const RTC_TimeTypeDef &RTC_TimeStruct)
{
uint8_t irq_enable = false;
Expand Down
2 changes: 2 additions & 0 deletions src/utility/BM8563.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
#define __BM8563_H__

#include <Wire.h>
#include "esp_sleep.h"
#define uS_TO_S_FACTOR 1000000ULL /* Conversion factor for micro seconds to seconds */

typedef struct RTC_Time
{
Expand Down
2 changes: 1 addition & 1 deletion src/utility/Ink_eSPI.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -331,7 +331,7 @@ uint8_t Ink_eSPI::getPix(uint16_t posX, uint16_t posY)
return 0;
}

void Ink_eSPI::deepSleep()
void Ink_eSPI::deepSleepEink()
{
writeCMD(0X50);
writeData(0xf7);
Expand Down
2 changes: 1 addition & 1 deletion src/utility/Ink_eSPI.h
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ class Ink_eSPI
void setDrawAddr(uint16_t posx, uint16_t posy, uint16_t width, uint16_t height);
uint8_t getPix(uint16_t posX, uint16_t posY);

void deepSleep();
void deepSleepEink();
void powerHVON();
void powerHVOFF();

Expand Down