Raspberry Pi – Interrupts gebruiken met GPIO pinnen (Python)
In dit voorbeeld maken we gebruikt van interrupts op de GPIO pinnen van de Raspberry Pi, zodra een pin HOOG of LAAG gemaakt wordt kun je een functie aanroepen.
Wat heb je nodig?
1) Python RPi.GPIO bibliotheek
Sluit een drukknop aan met weerstanden volgens onderstaand schema, gebruik als GPIO pin: 22
(Ps. de weerstanden heb je nodig voor een pull-down op de ingang, anders is de ingang “floating”.)
Voorbeeld schakelaar uitlezen
Hieronder vind je een python script welke een functie uitvoert zodra je de drukknop indrukt, de status wordt geprint naar de console.
Maak een bestand aan, bijvoorbeeld /usr/src/knopint.py (evt onder root, en vergeet niet chmod te gebruiken om het bestand uit te kunnen voeren), voeg deze inhoud daar in toe:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
#!/bin/python # importeer de GPIO bibliotheek. import RPi.GPIO as GPIO # Importeer de time biblotheek voor tijdfuncties. from time import sleep # Zet de pinmode op Broadcom SOC. GPIO.setmode(GPIO.BCM) # Zet waarschuwingen uit. GPIO.setwarnings(False) print "Druk op de knop..." # Deze functie wordt uitgevoerd als er op de knop gedrukt is. def gedrukt(pin): print "Er is gedrukt!, interrupt op pin:", pin # Deze functie is een oneindige loop en houd het script draaiend. def loop(): try: raw_input() # Wanneer er op CTRL+C gedrukt wordt. except KeyboardInterrupt: # GPIO netjes afsluiten GPIO.cleanup() # Zet de GPIO pin als ingang. GPIO.setup(22, GPIO.IN) # Gebruik een interrupt, wanneer actief run subroutinne 'gedrukt' GPIO.add_event_detect(22, GPIO.RISING, callback=gedrukt, bouncetime=200) loop() |
Run het script met: sudo python /usr/src/knopint.py , druk een paar keer op de schakelaar, dit is de output:
Druk op CTRL+C om het script te stoppen!
Voorbeeld RESET knop
Hieronder vind je een python script welke de Raspberry Pi reset met sudo shutdown -r now zodra je de drukknop indrukt
Maak een bestand aan, bijvoorbeeld /usr/src/reset.py (evt onder root, en vergeet niet chmod te gebruiken om het bestand uit te kunnen voeren), voeg deze inhoud daar in toe:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
#!/bin/python # importeer de GPIO bibliotheek. import RPi.GPIO as GPIO # Importeer de time biblotheek voor tijdfuncties. from time import sleep # Importeer bibliotheek voor systeemfuncties. import os # Zet de pinmode op Broadcom SOC. GPIO.setmode(GPIO.BCM) # Zet waarschuwingen uit. GPIO.setwarnings(False) # Deze functie wordt uitgevoerd als er op de knop gedrukt is. def gedrukt(pin): # Herstart het systeem. os.system("sudo shutdown -r now") # Een wachttijd om CPU gebruik te verminderen. sleep(1) # Deze functie is een oneindige loop en houd het script draaiend. def loop(): try: raw_input() # Wanneer er op CTRL+C gedrukt wordt. except KeyboardInterrupt: # GPIO netjes afsluiten GPIO.cleanup() # Zet de GPIO pin als ingang. GPIO.setup(22, GPIO.IN) # Gebruik een interrupt, wanneer actief run subroutinne 'gedrukt' GPIO.add_event_detect(22, GPIO.RISING, callback=gedrukt, bouncetime=200) loop() |
Run het script met: sudo python /usr/src/reset.py , druk op de schakelaar, dit is de output: