Raspberry Pi 3 & Python 開発ブログ☆彡

Raspberry Pi 3の使い方、設定をわかりやすく解説。Raspberry Pi3 Model B(Element14版)、Raspbianを使用して開発中。

【スポンサーリンク】

割り込みの使い方(その2)

【スポンサーリンク】

以前、割り込みでコールバック関数を使う方法を紹介しました。今回は定期的に実行したい処理があり、さらに割り込みにも対応したいときにシンプルに書けるコードを紹介したいと思います。

 

 割り込みの実装方法

import RPi.GPIO as GPIO

GPIO.setmode(GPIO.BCM)
pin = 4
GPIO.setup(pin, GPIO.IN, GPIO.PUD_UP)

try:
while(True):
    isr = GPIO.wait_for_edge(pin, GPIO.FALLING, timeout=5000)     if isr is None:     print("5秒間割り込みなし")     else:     print("割り込みあり")

except KeyboardInterrupt:
    print("break")
    GPIO.cleanup()

 
上記のサンプルコードの説明をします。GPIO.wait_for_edgeメゾットで、pin番号、イベント、タイムアウト時間を設定します。それぞれの引数の意味は以下のようになります。

・pin → GPIO4番ピン
GPIO.FALLING → 立下りエッジのイベントが発生した時
・timeout →タイムアウト時間の設定

タイムアウトで設定した時間内に割り込みがあれば、else内の処理が実行されます。割り込みがなければ、if isr is None内の処理が実行されます。
 

動作確認

それでは、動作確認をしてみましょう。この例ではタイムアウトが5秒に設定されていますので、割り込みがなければ、5秒間隔で毎回、"5秒間割り込みなし"のメッセージが表示されます。GPIO4番ピンに立下りエッジ(High→Low)を入力すると、"割り込みあり"のメッセージが表示されます。

 

割り込みはよく使う機能ですので、使い方をマスターしておくと役に立ちます。