Raspberry Pi GPIO in Python

Inleiding

In sheet 15 van de presentatie wordt verwezen naar verschillende scripts in python. Tijdens de presentatie zijn die scripts uitgevoerd. Hieronder staan alle scripts waar naar verwezen wordt.

In Python is de layout belangrijk. Let er bij overtypen daarom op dat verschillende regels met 1 of 2 tabs beginnen. Knippen en plakken werkt waarschijnlijk beter.

Kijk voor het gebruik van de module RPi.GPIO ook naar deze voorbeelden (engelstalig).

De nederlandstalige wikipedia pagina over Python geeft een kort en eenvoudig overzicht over de belangrijkste componenten van Python.

Knipperen van een led

blink.py: knipperen van een led door herhaald led aan en uit te schakelen
import RPi.GPIO as GPIO
import time
# blinking function
def blink(pin):
	GPIO.output(pin,GPIO.HIGH)
	time.sleep(0.2)
	GPIO.output(pin,GPIO.LOW)
	time.sleep(0.8)
	return
# to use Raspberry Pi board pin numbers
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
# set up GPIO output channel
GPIO.setup(26, GPIO.OUT)
# blink pen 26 = GPIO7 50 times
for i in range(0,50):
	blink(26)
GPIO.cleanup()

Uitlezen van een schakelaar (simpel)

switch.py: uitlezen van een schakelaar door voortdurend de status op te vragen.
import RPi.GPIO as GPIO
import time
# controleer de schakelaar
def check(pin):
        print str (GPIO.input(pin))
        time.sleep(0.2)
        return
# to use Raspberry Pi board pin numbers
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
# set up GPIO input channel
GPIO.setup(24, GPIO.IN)
# check GPIO8 50 keer
for i in range(0,50):
        check(24)
GPIO.cleanup()

Uitlezen van een schakelaar (slim)

switch2.py: uitlezen van een schakelaar door te wachten op een statusverandering.
import RPi.GPIO as GPIO
import time
# controleer de schakelaar
def check(pin):
        GPIO.wait_for_edge(pin, GPIO.BOTH)
        print str (GPIO.input(pin))
        return
# to use Raspberry Pi board pin numbers
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
# set up GPIO input channel
GPIO.setup(24, GPIO.IN)
# check GPIO8 50 times
for i in range(0,50):
        check(24)
GPIO.cleanup()

Knipperen van een led, methode 2

blink_pwm.py: knipperen van een led door gebruik te maken van pulsbreedtemodulatie (pulse width modulation pwm)
import RPi.GPIO as GPIO
import time
# to use Raspberry Pi board pin numbers
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
# set up GPIO output channel
GPIO.setup(26, GPIO.OUT)
# ga pin 26 aansturen met een frequentie van 1 Hz
p = GPIO.PWM(26, 1)

# ga die pin aansturen met een duty cycle van 50%
p.start(50)
# en doe dat gedurende 4 seconden
time.sleep(4)

# verander de duty cycle naar 1%
p.ChangeDutyCycle(1)
input('Press return to stop:')
p.stop()
GPIO.cleanup()

Dimmen van een led

demo_pwm.py: pulsebreedtemodulatie is perfect geschikt om een lampje te dimmen of een motor langzaam te laten draaien
import time
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setup(26, GPIO.OUT)

p = GPIO.PWM(26, 50)  # channel=26 frequency=50Hz
p.start(0)
try:
    while 1:
        for dc in range(0, 101, 5):
            p.ChangeDutyCycle(dc)
            time.sleep(0.1)
        for dc in range(100, -1, -5):
            p.ChangeDutyCycle(dc)
            time.sleep(0.1)
except KeyboardInterrupt:
    pass
p.stop()
GPIO.cleanup()