Timerを使ったスケジュール機能

つぶやき

import machine
import utime

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

# 引数付きのタスク
def job_with_argument(name):
    print(f"I am {name}")

# 10秒ごとにjob()を実行するタイマー
def timer_10_seconds(timer):
    job()

# 10分ごとにjob()を実行するタイマー
def timer_10_minutes(timer):
    job()

# 1時間ごとにjob()を実行するタイマー
def timer_1_hour(timer):
    job()

# 毎日10:30にjob()を実行(手動で時間をチェック)
def check_time_and_run():
    current_time = utime.localtime()
    if current_time[3] == 10 and current_time[4] == 30:  # 10:30のチェック
        job()

# 5〜10分ごとにjob()を実行
def timer_5_to_10_minutes(timer):
    job()

# 月曜日ごとにjob()を実行(曜日が月曜日かをチェック)
def check_day_and_run(timer):
    current_time = utime.localtime()
    if current_time[6] == 0:  # 月曜日は0
        job()

# 水曜日13:15にjob()を実行(時間と曜日をチェック)
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:  # 水曜日は2
        job()

# 10秒ごとに実行
timer_10_seconds_timer = machine.Timer()
timer_10_seconds_timer.init(period=10000, mode=machine.Timer.PERIODIC, callback=timer_10_seconds)

# 10分ごとに実行
timer_10_minutes_timer = machine.Timer()
timer_10_minutes_timer.init(period=600000, mode=machine.Timer.PERIODIC, callback=timer_10_minutes)

# 1時間ごとに実行
timer_1_hour_timer = machine.Timer()
timer_1_hour_timer.init(period=3600000, mode=machine.Timer.PERIODIC, callback=timer_1_hour)

# 5〜10分ごとに実行
timer_5_to_10_minutes_timer = machine.Timer()
timer_5_to_10_minutes_timer.init(period=300000, mode=machine.Timer.PERIODIC, callback=timer_5_to_10_minutes)

# 月曜日ごとに実行
monday_timer = machine.Timer()
monday_timer.init(period=86400000, mode=machine.Timer.PERIODIC, callback=check_day_and_run)

# 水曜日13:15に実行
wednesday_timer = machine.Timer()
wednesday_timer.init(period=86400000, mode=machine.Timer.PERIODIC, callback=check_wednesday_13_15)

# 引数付きのタスクを10秒ごとに実行
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)

# 毎日10:30のチェックを行うタイマー
check_time_timer = machine.Timer()
check_time_timer.init(period=60000, mode=machine.Timer.PERIODIC, callback=check_time_and_run)

# 無限ループで実行し続ける
while True:
    utime.sleep(1)  # 1秒待機

コメント