このドキュメンテーションは、MicroPython の最新開発ブランチのためのものです。 リリースバージョンでは利用できない機能に言及することがあります。

特定のリリースのドキュメントをお探しの場合は、左側のドロップダウンメニューを使って、 望みのバージョンを選択します。

クラス Timer -- ハードウェアタイマーの制御

Timer クラスは、指定した時間が経過した後、または一定の周期で、Python のコールバック関数を実行する機能を提供します。

Timer オブジェクトで利用できる機能や制約は、利用する MicroPython のボードやポートによって異なります。

WiPy ボードを使用している場合、このクラスの代わりに machine.TimerWiPy を参照してください。

タイマーの種別

MicroPython には2種類のタイマーが存在しますが、すべてのポートが両方をサポートしているわけではありません:

  • 仮想タイマー: ソフトウェアで管理されるタイマーで、一般的に柔軟性があります。複数の仮想タイマーを同時に作成して動作させることができます。仮想タイマーの id-1 です。

  • ハードウェアタイマー: ハードウェアタイマーは 0 から始まる整数の id を持ちます。利用可能な id の数はハードウェアにより決まります。ハードウェアタイマーは、特に hard=True がサポートされ設定されている場合、サブミリ秒精度の非常に細かいタイミングでより高精度になります(割り込みハンドラの作成 を参照)。多くのマイコン向けポートはハードウェアタイマーをサポートしていますが、Zephyr と RP2 は仮想タイマーのみをサポートしています。

コンストラクタ

class machine.Timer(id, /, ...)

"指定した id で新しいタイマーオブジェクトを構築します。

仮想タイマーをサポートするポートでは、 id パラメータは任意指定です。デフォルト値は -1 で、これは仮想タイマーを生成します。

ハードウェアタイマーをサポートするポートでは、 id0 以上の整数を指定することで、使用するタイマーを決定します。

id は キーワード引数として渡してはいけません。

その他の追加パラメータは Timer.init() と同じように処理されます。

メソッド

Timer.init(*, mode=Timer.PERIODIC, freq=-1, period=-1, callback=None, hard=True)

タイマーを初期化します。たとえば次のように使います:

def mycallback(t):
    pass

#1kHz で定期的に実行
tim.init(mode=Timer.PERIODIC, freq=1000, callback=mycallback)

# 100ms 周期で定期的に実行
tim.init(period=100, callback=mycallback)

# 1000ms 後に1度だけ実行
tim.init(mode=Timer.ONE_SHOT, period=1000, callback=mycallback)

キーワード引数:

  • mode は次のいずれかになります。

    • Timer.ONE_SHOT - タイマーは、設定したチャネルの周期が経過した後に1回だけ実行します。

    • Timer.PERIODIC - タイマーは、チャネルの設定した周期で定期的に実行します。

  • freq - タイマーの周波数(単位:Hz)。周波数の上限はポートに依存する。 freqperiod の両方の引数を与えた場合、 freq の方を優先し、 period は無視します。

  • period - タイマー期間(ミリ秒単位)。

  • callback - タイマー期間が終了したときに呼び出されるコールバックです。コールバックは1つの引数を取らなければならず、その引数にはタイマーオブジェクトが渡されます。

    callback 引数は指定しなければなりません。さもなければ、タイマー満了時に次の例外が発生します: TypeError: 'NoneType' object isn't callable

  • hard は次のいずれかです:

    • True - コールバックはハード割り込みコンテキストで実行されます。これにより遅延やジッタ(時間の揺らぎ)が最小限に抑えられますが、 割り込みハンドラの作成 で説明されている制限を受けます。すべてのポートがハード割り込みをサポートしているわけではありません。詳細については、各ポートのドキュメントを参照してください。

    • False - コールバックはソフト割り込みとしてスケジュールされ、メモリ割り当てが可能になりますが、ガベージコレクションの遅延とジッターも発生する可能性があります。

    このパラメータのデフォルト値は、歴史的な理由によりポート固有です。

Timer.deinit()

タイマーを非初期化します。タイマーを停止し、タイマーのペリフェラルを無効にします。

定数

Timer.ONE_SHOT
Timer.PERIODIC

タイマー操作モード。