今回は、「タイマー」と「割り込み」という2つのキーワードに焦点を当て、Raspberry Pi Picoでどのようにこれらを活用できるかを解説します。
どちらも制御系のシステムでは重要な要素で、リアルタイムコンピューティングにおいて必須の知識となりますので、実際にコードを書いて試してみてください。
MicroPythonとは
MicroPythonは、Pythonプログラミング言語のコンパクトなバージョンで、マイクロコントローラー上で動作します。Pythonの簡潔さと柔軟性を活かしながら、ハードウェア制御のための豊富な機能を提供します。
MicroPythonの開発環境については、以下の記事で詳細を解説しています。
![](https://murasan-itlab.com/wp-content/uploads/2023/06/IMG_6039as-300x170.jpg)
タイマーとは
タイマーは、一定の時間間隔でイベントをトリガーするハードウェアコンポーネントです。これは、定期的なタスクの実行や、時間に基づく制御など、さまざまな用途で使用されます。
割り込みとは
割り込みは、特定のイベント(例:タイマーの満了、ボタンの押下)が発生したときに、プログラムの通常の流れを一時的に中断し、特定のタスク(割り込みハンドラ)を実行するメカニズムです。
作成したMicroPythonコード
このプログラムは、Raspberry Pi Pico上でMicroPythonを使用して、タイマー割り込みを利用してコマンドラインに定期的にメッセージを出力するものです。
MicroPythonコード解説
以下は、プログラムの各部分の解説です。
import micropython
–micropython
モジュールをインポートします。これは、MicroPythonの特定の機能にアクセスするために使用されます。micropython.alloc_emergency_exception_buf(100)
– 割り込み処理中に例外を作成するためのバッファを割り当てます。これは、割り込みハンドラ内で例外が発生した場合に、それを適切に処理するために必要です。def print_message(timer):
– タイマー割り込みが発生するたびに呼び出されるコールバック関数を定義します。この関数は、コマンドラインに”Timer interrupt triggered”というメッセージを出力します。timer = Timer()
– 新しいタイマーインスタンスを作成します。timer.init(mode=Timer.PERIODIC, freq=1, callback=print_message)
– タイマーを初期化します。このメソッドには以下のパラメータがあります。mode=Timer.PERIODIC
– タイマーの動作モードを設定します。Timer.PERIODIC
は、タイマーが定期的に割り込みを発生させることを意味します。freq=1
– タイマーの周波数を設定します。この例では、freq=1
は1Hzを意味し、タイマーは1秒ごとに割り込みを発生させます。callback=print_message
– タイマー割り込みが発生するたびに呼び出される関数を設定します。この例では、print_message
関数がコールバックとして設定されています。
- 最後に、プログラムはメッセージ “タイマーを開始しました” を出力し、メインループに入ります。ただし、このプログラムではメインループは何もしません。タイマー割り込みは自動的に発生し、コールバック関数が定期的に呼び出されます。
全体のソースコード
このプログラムをRaspberry Pi Picoにアップロードし、MicroPythonを使用して実行すると、コマンドラインに1秒ごとに”Timer interrupt triggered”というメッセージが表示されます。
from machine import Timer
import micropython
# 割り込み処理中の例外を作成するための設定
micropython.alloc_emergency_exception_buf(100)
# コマンドラインに文字を出力する関数
def print_message(timer):
print("Timer interrupt triggered")
# タイマーを作成
timer = Timer()
# タイマーを初期化して、周期的にコマンドラインに文字を出力する
timer.init(mode=Timer.PERIODIC, freq=1, callback=print_message)
# メイン処理(タイマーは自動で呼ばれるので、何もする必要がない)
print("タイマーを開始しました")
実行結果
先ほどのコードを実行した結果が以下の通りです。timer.init
で設定した通り1秒間隔で割り込み処理が実行されていることが確認できました。
![](https://murasan-itlab.com/wp-content/uploads/2023/06/timer.jpg)
まとめ
Raspberry Pi PicoとMicroPythonを使用して、タイマーと割り込みを活用する方法について解説しました。割り込みによる処理は、特にモーターなどフィードバック制御で役立ちますので、ぜひ活用してみてください。
それでは、また次の記事でお会いしましょう。
コメント