Python & Raspberry Pi 開発ブログ ☆彡

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

【スポンサーリンク】

割り込み:wair for edge関数(Python)の使い方

【スポンサーリンク】

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

wait for edge関数の使い方

wait for edge関数を使うと、この関数のところでイベントが来るまで、待っていてくれます。タイムアウト設定した時間経過したときと、割り込みが来た時にイベント待ちが解除されます。

import RPi.GPIO as GPIO

class CallBack:
        
    def __init__(self):
        self.pin = 4
        GPIO.setmode(GPIO.BCM)
        GPIO.setup(self.pin, GPIO.IN, GPIO.PUD_UP) # 4番pinを入力、プルアップに設定
                    
    def callback_test(self):

        while(True):
            isr = GPIO.wait_for_edge(self.pin, GPIO.FALLING, timeout=5000,  bouncetime=1000) # 立下りエッジイベント待ち
            if isr is None:
                print("5秒間割り込みなし")
            else:
                print("割り込みあり")

cb = CallBack()
cb.callback_test()

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

・pin ⇒ GPIO4番ピン
・GPIO.FALLING ⇒ 立下りエッジのイベントが発生した時
・timeout ⇒ タイムアウト時間の設定
・bouncetime = 1000 ⇒ 割り込み検知後、1000msは割り込みをマスクする(割り込みを検知しないようにする)

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

動作確認

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

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

 

ラズパイ ハードウェアに戻る
トップページに戻る