Files
2020-07-13 15:21:14 +08:00

102 lines
2.5 KiB
C++

/*
* WakeupFormPEKKey: Use AXP202 interrupt pin to wake up T-Watch
* Copyright 2020 Lewis he
*/
#include "config.h"
TTGOClass *watch;
TFT_eSPI *tft;
AXP20X_Class *power;
bool irq = false;
void setup()
{
// Get TTGOClass instance
watch = TTGOClass::getWatch();
// Initialize the hardware, the BMA423 sensor has been initialized internally
watch->begin();
// Turn on the backlight
watch->openBL();
//Receive objects for easy writing
tft = watch->tft;
power = watch->power;
tft->setTextColor(TFT_GREEN);
pinMode(AXP202_INT, INPUT_PULLUP);
attachInterrupt(AXP202_INT, [] {
irq = true;
}, FALLING);
// Must be enabled first, and then clear the interrupt status,
// otherwise abnormal
power->enableIRQ(AXP202_PEK_SHORTPRESS_IRQ,
true);
// Clear interrupt status
power->clearIRQ();
tft->println("Wait for the PEKKey interrupt to come...");
// Wait for the power button to be pressed
while (!irq) {
delay(1000);
}
/*
After the AXP202 interrupt is triggered, the interrupt status must be cleared,
* otherwise the next interrupt will not be triggered
*/
power->clearIRQ();
for (int i = 5; i > 0; i--) {
tft->print("Go to sleep after ");
tft->print(i);
tft->println(" seconds");
delay(1000);
}
tft->println("Sleep now ...");
delay(1000);
// Set screen and touch to sleep mode
watch->displaySleep();
/*
When using T - Watch2020V1, you can directly call power->powerOff(),
if you use the 2019 version of TWatch, choose to turn off
according to the power you need to turn off
*/
#ifdef LILYGO_WATCH_2020_V1
watch->powerOff();
// LDO2 is used to power the display, and LDO2 can be turned off if needed
// power->setPowerOutPut(AXP202_LDO2, false);
#else
power->setPowerOutPut(AXP202_LDO3, false);
power->setPowerOutPut(AXP202_LDO4, false);
power->setPowerOutPut(AXP202_LDO2, false);
// The following power channels are not used
power->setPowerOutPut(AXP202_EXTEN, false);
power->setPowerOutPut(AXP202_DCDC2, false);
#endif
// Use ext0 for external wakeup
// esp_sleep_enable_ext0_wakeup((gpio_num_t)AXP202_INT, LOW);
// Use ext1 for external wakeup
esp_sleep_enable_ext1_wakeup(GPIO_SEL_35, ESP_EXT1_WAKEUP_ALL_LOW);
esp_deep_sleep_start();
}
void loop()
{
}