はじめに
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
に実行したい関数を指定
⏰ 応用例
- 分単位・時間単位の定期処理
# 10分ごとに job() を実行
timer_10_minutes_timer = machine.Timer()
timer_10_minutes_timer.init(period=600000, mode=machine.Timer.PERIODIC, callback=timer_10_minutes)
- 曜日・時間の指定実行
# 水曜日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]
が分
- 引数付きのタスク
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 でのセンサーデータ取得や定時通知など、幅広い用途に活用可能です。
コメント