pdf-icon

Arduino入門

2. デバイス&サンプル

Unit TimerPWR Arduino チュートリアル

1. 準備

2. サンプルプログラム

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

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

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

cpp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
#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();
}
}

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

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

cpp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
#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