
Arduino 上手教程
ToughC5 休眠唤醒相关 API 与案例程序。
3.3.9M5ToughC50.2.220.2.28#include <M5Unified.h>
constexpr auto SLEEP_TIME_US = 5000000ULL;
void drawMessage(const char* title, const char* detail)
{
M5.Display.clear(TFT_WHITE);
M5.Display.setTextDatum(middle_center);
M5.Display.setTextColor(TFT_BLACK, TFT_WHITE);
M5.Display.setFont(&fonts::FreeSansBold12pt7b);
M5.Display.drawString(title, M5.Display.width() / 2, 80);
M5.Display.setFont(&fonts::FreeSansBold9pt7b);
M5.Display.drawString(detail, M5.Display.width() / 2, 130);
}
void drawSleepMenu()
{
M5.Display.clear(TFT_WHITE);
M5.Display.setTextDatum(middle_center);
M5.Display.setTextColor(TFT_BLACK, TFT_WHITE);
M5.Display.setFont(&fonts::FreeSansBold12pt7b);
M5.Display.drawString("ToughC5 Wakeup Test", M5.Display.width() / 2, 30);
M5.Display.setFont(&fonts::FreeSansBold9pt7b);
M5.Display.drawString("Touch left: Light Sleep", M5.Display.width() / 2, 80);
M5.Display.drawString("Touch right: Deep Sleep", M5.Display.width() / 2, 120);
M5.Display.drawString("Wakeup after 5 seconds", M5.Display.width() / 2, 165);
}
void setup()
{
auto cfg = M5.config();
cfg.clear_display = false;
M5.begin(cfg);
M5.Display.setRotation(1);
drawSleepMenu();
}
void loop()
{
M5.update();
if (M5.Touch.getCount()) {
const auto touch = M5.Touch.getDetail(0);
if (touch.wasClicked()) {
if (touch.x < M5.Display.width() / 2) {
drawMessage("Light Sleep", "Sleeping for 5 seconds");
delay(200);
M5.Power.lightSleep(SLEEP_TIME_US, true);
drawMessage("Wakeup complete", "Touch the screen to sleep again");
} else {
drawMessage("Deep Sleep", "Wake up after 5 seconds");
delay(200);
M5.Power.deepSleep(SLEEP_TIME_US, true);
}
}
}
delay(20);
}程序启动后会在屏幕显示两种休眠操作。触摸屏幕左侧会进入 5 秒浅度休眠,唤醒后从 lightSleep() 的下一行继续运行并显示唤醒完成;触摸屏幕右侧会进入 5 秒深度休眠,唤醒后 ESP32-C5 复位并从 setup() 重新执行。
ToughC5 休眠唤醒部分使用了 M5Unified 库中的 Power_Class,更多相关 API 可以参考下方文档: