2016-07-20 15 views
0

私はthisのようなWeb上のGPIO割り込みドキュメントをいくつか読みました。私に残る質問が1つあります。GPIO.add_event_detect(<PIN>, <GPIO.EDGE>, callback=<some callback function>, bouncetime=<int>)をpythonスクリプトで使用する必要があります。このスクリプトを実行するために同じスクリプトでループをwhile trueにする必要があります。コールバックルーチン?Raspberry Pi3 - Python3:GPIO.add_event_detectは "while true"ループを必要としますか?

もっと明確にしましょう。私のスクリプトは次のようになります。

だから、
import RPi.GPIO as GPIO 

    GPIO.setmode(GPIO.BCM) 
    GPIO.setup(6, GPIO.OUT) 

    def my_interrupt_routine(channel): 
     #do something here 
    GPIO.add_event_detect(6, GPIO.FALLING, callback=my_interrupt_routine, bouncetime=200) 
    try: 
     while True: 
      pass 

    except KeyboardInterrupt: 
     #do something here 

    finally: 
     GPIO.cleanup() 

このスクリプトを使って - それは、割り込みハンドラがPIN6に落ちるEDGを待つようにするwhile true:ループを持っていることが必要であるか、私はハンドラを起動すると、プログラムを終了することができます? 割り込みハンドラを使用してGPIO-Pinをポーリングする利点に関する多くの記事を読んでいるので、私はこれを求めています。そして、このwhile true:ループはピンの周りのポーリングのように私にほとんど同じように見えます。
私はJavaで開発していました。そこでは、割り込みハンドラ/リスナを定義し、世界中のどこかでイベントを処理できます。私はこれがPythonではうまくいかないと思います。

答えて

0

私はそれを試しましたが、GPIO.add_event_detect()コマンドを使用してスクリプトにwhile Trueループがあることが絶対に必要であるという結果が出ました。さもなければ、スクリプトはちょうど終了し、(私が期待したように)バックグラウンドでイベントリスナーが実行されていません。明らかに、このループにおけるシステム資源の必要性は非常に低い。
このスクリプトは、GPIOインターフェイスで発生するすべての割り込みのリスナーになるため、私は自分のRaspberry Piの起動時に起動して、常に実行させる必要があると仮定します。
誰かがPython(3)で「火をつけて忘れて」リスナを捕まえる方法を提案してくれてありがとうと思います。

関連する問題