Raspberry Pi Picoでタイマーを使ったスケジュール機能

つぶやき

はじめに

Raspberry Pi Pico では machine.Timer を使うことで、定期的に関数を実行するスケジュールを簡単に作ることができます。
この仕組みを活用すると、IoT機器の定時処理や定期的なデータ取得、アラーム通知などを自動化できます。



📌 基本的なタイマーの使い方

import utime

# 定期的に実行されるタスク
def job():
    print("I'm working...")

# 10秒ごとに job() を実行
def timer_10_seconds(timer):
    job()

timer_10_seconds_timer = machine.Timer()
timer_10_seconds_timer.init(period=10000, mode=machine.Timer.PERIODIC, callback=timer_10_seconds)
  • period はミリ秒単位(10000ms = 10秒)
  • mode は周期実行か単発実行か(PERIODIC / ONE_SHOT
  • callback に実行したい関数を指定

⏰ 応用例

  1. 分単位・時間単位の定期処理
# 10分ごとに job() を実行
timer_10_minutes_timer = machine.Timer()
timer_10_minutes_timer.init(period=600000, mode=machine.Timer.PERIODIC, callback=timer_10_minutes)
  1. 曜日・時間の指定実行
# 水曜日13:15に実行
def check_wednesday_13_15(timer):
    current_time = utime.localtime()
    if current_time[6] == 2 and current_time[3] == 13 and current_time[4] == 15:
        job()

wednesday_timer = machine.Timer()
wednesday_timer.init(period=86400000, mode=machine.Timer.PERIODIC, callback=check_wednesday_13_15)
  • utime.localtime() で現在の日時を取得
  • [6] が曜日(0=月曜日, 6=日曜日)
  • [3] が時、 [4] が分
  1. 引数付きのタスク
def job_with_argument(name):
    print(f"I am {name}")

def job_with_argument_timer(timer):
    job_with_argument("Peter")

job_with_argument_timer_timer = machine.Timer()
job_with_argument_timer_timer.init(period=10000, mode=machine.Timer.PERIODIC, callback=job_with_argument_timer)

💡 ポイント

  • Pico のタイマーは複数個を同時に使うことが可能
  • タスクの実行間隔を柔軟に設定できる
  • utime.sleep() と組み合わせて無限ループで常駐させることが可能

⚠️ 注意点

  • MicroPython のタイマーは軽量ですが、重い処理をタイマー内で実行すると他のタイマーや処理に影響が出ることがあります。
  • 時刻の精度は Pico の内部時計依存。必要であれば NTP で時刻同期するのがおすすめです。

まとめ

machine.Timer を使うことで、Pico 上で簡単に 秒単位・分単位・曜日指定のスケジュール処理 を実装できます。
IoT でのセンサーデータ取得や定時通知など、幅広い用途に活用可能です。

コメント