
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);
}起動すると、画面に 2 種類のスリープ操作が表示されます。画面左側に触れると 5 秒間のライトスリープに入り、復帰後は lightSleep() の次の行から実行を続け、復帰完了メッセージを表示します。画面右側に触れると 5 秒間のディープスリープに入り、復帰時に ESP32-C5 がリセットされて setup() から再実行されます。
ToughC5 のスリープとウェイクアップの例では、M5Unified ライブラリの Power_Class を使用します。関連 API については以下のドキュメントを参照してください。