pdf-icon

Arduino Guide

Unit TimerPWR Arduino チュートリアル

1. 準備

2. サンプルプログラム

サンプルの説明
Unit TimerPWR は、HY2.0-4P Grove インターフェースの 5V 出力を周期的にオン/オフできるタイマー電源ユニットです。この例では、I2C コマンドを書き込むことで Unit TimerPWR を設定し、主デバイスが操作を終了した後に電源を完全にオフにし、低消費電力を実現します。

単発ウェイクアップの設定

サイクルモードを無効にし、CoreS3 をタッチした後、即時に電源を切り、オフ時間が終了した後に電源を復帰させます。

#include "M5Unified.h"
#include "Wire.h"
#include "m5_unit_timerpwr.hpp"

M5UnitTimerPWR timer_pwr;

void setup()
{
    M5.begin();
    Serial.begin(115200);
    M5.Display.setTextDatum(middle_center);
    M5.Display.setFont(&fonts::lgfxJapanMinchoP_24);

    while (!timer_pwr.begin(&Wire, TIMERPWR_ADDR, 2, 1, 400000U)) {
        M5.Display.drawString("Unit TimerPWR init Fail!", M5.Display.width() / 2, M5.Display.height() / 2);

        delay(1000);
    };
    M5.Display.clear();
    M5.Display.drawString("Unit TimerPWR init OK", M5.Display.width() / 2, M5.Display.height() / 2 - 20);
    M5.Display.drawString("Touch To Sleep 10S", M5.Display.width() / 2, M5.Display.height() / 2 + 20);

    // do something before sleep...

    // disable cycle sleep mode
    timer_pwr.set_cycle_sleep(false);
}

void loop()
{
    M5.update();
    auto t = M5.Touch.getDetail();

    if (t.wasClicked() || M5.BtnA.wasClicked()) {
        M5.Display.clear();
        M5.Display.drawString("Sleep 10S!", M5.Display.width() / 2, M5.Display.height() / 2);
        delay(1000);
        timer_pwr.set_power_on_time(0, 0, 0);
        timer_pwr.set_power_off_time(0, 0, 10);
        timer_pwr.set_sleep();
    }
}

周期的なウェイクアップの設定

サイクルモードを有効にし、オン/オフ時間を設定して、サイクルが開始された後、オン時間が終了した時点で電源を切り、オフ時間が終了後に電源が復帰します。新しい設定が書き込まれるか、バッテリーが完全に消耗するまで、このサイクルが繰り返されます。

#include "M5Unified.h"
#include "Wire.h"
#include "m5_unit_timerpwr.hpp"

M5UnitTimerPWR timer_pwr;

void setup()
{
    M5.begin();
    Serial.begin(115200);
    M5.Display.setTextDatum(middle_center);
    M5.Display.setFont(&fonts::lgfxJapanMinchoP_24);

    while (!timer_pwr.begin(&Wire, TIMERPWR_ADDR, 2, 1, 400000U)) {
        M5.Display.drawString("Unit TimerPWR init Fail!", M5.Display.width() / 2, M5.Display.height() / 2);

        delay(1000);
    };
    M5.Display.clear();
    M5.Display.drawString("Unit TimerPWR init OK", M5.Display.width() / 2, M5.Display.height() / 2 - 20);
    M5.Display.drawString("ON 10S / OFF 5S", M5.Display.width() / 2, M5.Display.height() / 2 + 20);
}

void loop()
{
    M5.update();
    auto t = M5.Touch.getDetail();

    if (t.wasClicked() || M5.BtnA.wasClicked()) {
        M5.Display.clear();
        M5.Display.drawString("Start Cycle ON/OFF!", M5.Display.width() / 2, M5.Display.height() / 2);
        delay(1000);
        // enable cycle sleep mode
        timer_pwr.set_cycle_sleep(false);
        timer_pwr.set_power_on_time(0, 0, 10);
        timer_pwr.set_power_off_time(0, 0, 20);
        timer_pwr.save_flash();
        timer_pwr.set_cycle_sleep(true);
    }
    if (t.wasHold() || M5.BtnA.wasHold()) {
        // disable cycle sleep mode
        timer_pwr.set_cycle_sleep(false);
        M5.Display.clear();
        M5.Display.drawString("Stop Cycle ON/OFF!", M5.Display.width() / 2, M5.Display.height() / 2);
        delay(1000);
    }
}

3. コンパイルとアップロード

    1. ダウンロードモード:異なるデバイスではプログラム書き込み前にダウンロードモードに入る必要があります。この手順は使用するメインコントロールデバイスによって異なる場合があります。詳細については、 Arduino IDE のはじめにガイド を参照し、デバイスごとのダウンロード手順をご確認ください。
  • CoreS3 の場合、リセットボタンを 2 秒ほど長押しして、内部の緑色の LED が点灯したらボタンを離します。これでデバイスはダウンロードモードに入り、プログラム書き込みの準備が整います。

    1. デバイスのポートを選択し、Arduino IDE の左上にあるコンパイル&アップロードボタンをクリックして、プログラムのコンパイルとアップロードを行います。

4. タイマーウェイクアップ

Unit TimerPWR を使用して CoreS3 にタイマーウェイクアップを提供します。 (注:実現するためには CoreS3 のベースのバッテリー電源を切断して接続する必要があります)。

CoreS3 のスクリーンをタッチして、単発のスリープウェイク操作を制御します。

スリープモードに入ります。

On This Page