2016-07-20 9 views
0

Ich lese einige GPIO-Interrupt-Dokumentation im Internet wie this und es gibt eine Frage für mich: Benötigt GPIO.add_event_detect(<PIN>, <GPIO.EDGE>, callback=<some callback function>, bouncetime=<int>) in einem Python-Skript, um eine while true Schleife im selben Skript zu haben, um dieses Skript "endlos" zu laufen Rückrufroutine?Raspberry Pi3 - Python3: Benötigt GPIO.add_event_detect eine "while true" Schleife?

Machen wir es klarer. Mein Skript soll wie folgt aussehen:

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() 

Also mit diesem Skript - ist es notwendig, die while true: Schleife zu haben, die Interrupt-Handler für die falling EDG auf Pin6 warten lassen oder kann ich aktiviere nur den Handler und das Programm beenden ? Ich frage das, weil ich viele Artikel über den Vorteil der Verwendung von Interrupt-Handler im Vergleich zum Abrufen des GPIO-Pin gelesen habe. Und diese while true: Schleife sieht mir ziemlich ähnlich wie das Umfragen auf Pins.
Ich habe früher in Java entwickelt. Dort definieren Sie den Interrupt-Handler/Listener und irgendwo am anderen Ende der Welt können Sie dann das Ereignis behandeln. Ich nehme an, das wird in Python nicht funktionieren, oder?

Antwort

0

Ich habe es ausprobiert und das Ergebnis ist, dass es unbedingt notwendig ist, eine while True Schleife in einem Skript mit dem GPIO.add_event_detect() Befehl zu haben. Ansonsten endet das Skript einfach und im Hintergrund läuft kein Ereignis-Listener (wie ich es erwartet hatte). Offensichtlich ist der Bedarf an Systemressourcen in dieser Schleife sehr gering.
Dieses Skript wird mein Listener für jeden Interrupt sein, der auf der GPIO-Schnittstelle passiert, und daher nehme ich an, dass ich es während des Startens meines Raspberry Pi starten und es die ganze Zeit laufen lassen muss.
Würde mich freuen, wenn jemand einen Vorschlag hat, wie man in Python "feuert und vergisst" und Hörer auffängt (3).

Verwandte Themen