utime

utime モジュールには、現在の時間の取得、時間隔を測定、遅延についての関数があります。

注釈

utime モジュールは、標準の Python の time モジュールの MicroPython 版です。import utime でも import time でもインポートできますが、モジュールは同じものです。

関数

utime.sleep(seconds)

指定された秒数の間スリープします。秒より細かい精度で指定したい場合は浮動小数点数を使うか、 utime.sleep_ms()utime.sleep_us() 関数を使ってください。

utime.sleep_ms(ms)

指定のミリ秒間だけ遅延します。ミリ秒の指定は 0 以上の整数である必要があります。

utime.sleep_us(us)

指定のマイクロ秒間だけ遅延します。マイクロ秒の指定は 0 以上の整数である必要があります。

utime.ticks_ms()

呼出し時点での稼働時間をミリ秒単位で返します。稼働時間は最大値に達するとラップアラウンドします(一周して最低値に戻ります)。

utime.ticks_us()

上記の utime.ticks_ms() と同じですが、マイクロ秒単位となります。

utime.ticks_add(ticks, delta)

与えた数をティック値からのオフセットとして加算した値を返します。引数の値は正でも負でもかまいません。この関数は、ティック値のモジュール算術定義にしたがい、与えた ticks 値とその前後の delta ティックからティック値を算出します。

サンプルコード:

# 100ms 前のティック値を調べます
print(ticks_add(time.ticks_ms(), -100))

# 操作やテストのためのデッドラインを算出します
deadline = ticks_add(time.ticks_ms(), 200)
while ticks_diff(deadline, time.ticks_ms()) > 0:
    do_a_little_of_something()

# このポートの TICKS_MAX を調べます
print(ticks_add(0, -1))
utime.ticks_diff(ticks1, ticks2)

utime.ticks_ms()ticks_us() 関数の戻り値(ラップアラウンドである可能性のある符号付きの値)の間のティック値の差を計算します。

引数の順序は減算演算子と同じで、 ticks_diff(ticks1, ticks2)ticks1 - ticks2 と同じ意味を持ちます。

utime.ticks_diff() は、さまざまな使用パターンに対応するように設計されています:

タイムアウトのポーリング - この場合、イベントの順序は既知であり、次のように utime.ticks_diff() の正の結果のみを処理します:

# GPIOピンから入力があるのを待つが、最大でも50usまで
start = time.ticks_us()
while pin.value() == 0:
    if time.ticks_diff(time.ticks_us(), start) > 500:
        raise TimeoutError

イベントのスケジューリング - この場合、イベントが期限切れになると utime.ticks_diff() の結果が負になります:

# このコードは最適化されていません
now = time.ticks_ms()
scheduled_time = task.scheduled_time()
if ticks_diff(scheduled_time, now) > 0:
    print("Too early, let's nap")
    sleep_ms(ticks_diff(scheduled_time, now))
    task.run()
elif ticks_diff(scheduled_time, now) == 0:
    print("Right at time!")
    task.run()
elif ticks_diff(scheduled_time, now) < 0:
    print("Oops, running late, tell task to run faster!")
    task.run(run_faster=true)