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

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

【スポンサーリンク】

割り込み(コールバック関数)の使い方

【スポンサーリンク】

今日はRaspberry Piで割り込み(コールバック関数)を使う方法を紹介します。Raspberry PiにはGPIOピンの立ち上がり、立ち下がりエッジを検出した時に、指定の関数(コールバック関数)を呼び出すしくみがあります。これにより、割り込みと同じようにイベント待ちで処理が実行できるようになります。それでは、Pythonコードの記載方法を紹介したいと思います。

 割り込み(コールバック関数)の実装方法

import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
pin = 4

def callBackTest(channel):
    print("callback")

GPIO.setup(pin, GPIO.IN, GPIO.PUD_UP)
GPIO.add_event_detect(pin, GPIO.FALLING, callback=callBackTest, bouncetime=300)

while(True):
    time.sleep(1)

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

 
上記のサンプルコードの説明をします。まず、GPIO.add_event_detectメゾットで、pin番号やイベント、コールバック関数名を定義します。それぞれの引数の意味は以下のようになります。

・pin → GPIO4番ピン
・GPIO.FALLING → 立下りエッジのイベントが発生した時
・callback=callBackTest → callBackTestという名前のコールバック関数が呼ばれる
・bouncetime=300 → 割り込み検知後、300msは割り込みをマスクする(割り込みを検知しないようにする)設定です。(スイッチのON、OFFでチャタリングが発生する時に、マスク時間を設定し、何度も割り込みが発生することを防ぐことができます。)
 

動作確認

それでは、コールバック関数が呼ばれるか確認してみましょう。GPIO4番ピンに立下りエッジ(High→Low)を入力すると、callBackTest関数が呼ばれ、"callback”とコンソールに表示されます。(このコールバック関数はスレッドで実行されます。)

 

設定できるイベント

設定できるイベントは以下のようになります。下記以外は設定できないようです。

・GPIO.FALLING → 立ち下がりエッジ
・GPIO.RISING → 立ち上エッジ
・GPIO.BOTH → 両エッジ

 

そもそもコールバック関数とは?

コールバック関数とは、関数ポインタを使用して、呼び出される関数のことを言います。C言語をバリバリやっていた人でないとイメージできないと思います。割り込みのイベントが発生した時に、呼ばれる関数くらいに覚えておけばよいでしょう。

 

少し長くなりましたが、これでイベント待ちで処理を実行することができるようになりました。便利ですね。