GPIO-pinnen Raspberry Pi – toestand pin uitlezen in Python

Marco den Teuling
0

Met de GPIO-pinnen van Raspberry Pi kun je de bijvoorbeeld knoppen en schakelaars aansluiten. Door de toestand van de gebruikte pinnen uit te lezen, houd je de knop of schakelaar in de gaten. Zo doe je dat in Python.

Je kunt op verschillende manier de toestand van pinnen in de gaten houden in Python. Lees hieronder wat je beter niet kunt doen en een manier die wel werkt.

event gpio-pinnen python

GPIO-pinnen uitlezen met een lus

Misschien wil je pinnen controleren in een while-lus. Maar het opvragen van de toestand van een pin met een while-lus heeft een zeer ernstig neven­effect: het zorgt dat de SoC (System-on-Chip) van de Raspberry Pi heet wordt en het systeem volledig belast wordt – de Raspberry Pi is alleen maar bezig met het opvragen van de toestand van de pin.

Voor de hand liggend, maar uit den boze is het om time.sleep() te gebruiken om de lus te vertragen. Als je dit doet reageert de Pi alleen met een vertraging bij het indrukken van de knop.

De verstandige oplossing is dat de Pi zelf voor het monitoren zorgt en aan het programma laat weten wanneer de toestand van de pin verandert, zoals hieronder.


Ontvang gratis meer info over Raspberry Pi en Python, schrijf je in voor de nieuwsbrief:

Ontvang elke week het laatste IT-nieuws, de handigste tips en speciale aanbiedingen.

GPIO-pinnen Raspberry Pi via event uitlezen

Om de Raspberry Pi zelf de pin te laten monitoren, moet je:

  • voor de gewenste pin een event registreren;
  • een functie beschikbaar stellen die wordt aangeroepen zodra er iets gebeurt op de pin.

Het volgende Python-voorbeeld sluit de Raspberry Pi af wanneer je op de aan-uit-knop drukt die verbonden is met pin 5. De functie buttonPress wordt daarbij aangeroepen.

import RPi.GPIO as GPIO

import time

from subprocess import call

def buttonPress(pin):

if not GPIO.input(5):

print(“Shutdown”)

call([‘shutdown’, ‘-h’,

‘now’], shell=False)

GPIO.setmode(GPIO.BOARD)

GPIO.setup(5, GPIO.IN)

GPIO.add_event_detect(

5, GPIO.BOTH,

callback=buttonPress

)

while True:

time.sleep(5)

Aanroepen van de functie – gebruiken voor aan-uit knop Raspberry Pi

Het aanroepen van de functie GPIO.add_event_detect() registreert met de para­meter GPIO.BOTH de functie buttonPress() bij de event-handler in het geval dat Raspian op pin 5 een vallend ( GPIO.FALLING ) of een stijgend ( GPIO.RISING ) spanningsniveau detecteert.

Daarbij ontvangt buttonPress() het nummer van de pin waar de spanningsverandering op werd gedetecteerd.

Je kunt dit voorbeeld­programma opslaan onder de naam pishutdown.py en vervolgens aanroepen met sudo python3 pishutdown.py. Je kunt je Raspberry Pi dan afsluiten door op de knop te drukken en op dezelfde manier weer opstarten.

Hieronder zie je nog een overzicht van de GPIO-pinnen Raspberry Pi:


Meer doen met de GPIO-pinnen Raspberry Pi

De Raspberry Pi dankt zijn succes in de hobbywereld aan zijn GPIO-aansluitingen. Met de juiste Python-bibliotheek en onze instructies lukken zelfs complexe taken.

In de inleiding Raspberry Pi GPIO pinnen: een overzicht van de aansluitingen wordt de lay-out van de GPIO-pinnen beschreven.

In deze serie komen de volgende onderwerpen aan bod:

Meer projecten voor de Raspberry Pi vind je bij Raspberry Pi projects

(Deze informatie is afkomstig uit het artikel in c’t 4/2022, pagina 134, van Mirko Dölle en Marco den Teuling)

Lees meer over Raspberry Pi en Python in c’t 11/2024

Meer over

Zelfbouw

Deel dit artikel

Marco den Teuling
Marco den TeulingHad als eerste eigen computer ooit een 16-bit systeem, waar van de 48 kilobyte toch echt niet ‘genoeg voor iedereen’ was. Sleutelt graag aan pc’s, van de hardware tot het uitpluizen van de BIOS-instellingen. Vindt ‘Software as a Service’ een onbedoeld ironische naamgeving.

Lees ook

Windows Subsystem for Linux installeren met commandline

Tijdens de ontwikkeling varieerden de tips om Windows Subsystem for Linux (2) te installeren. Nu is de commandline de handigste manier. We beschrijven...

Windows Subsystem for Linux – een kijkje in de virtuele machine

De Linux-omgevingen in Windows Subsystem for Linux (WSL), zijn anders dan met een gewone distributie zoals die op pc of een virtuele machine. Met enke...

0 Praat mee
avatar
  Abonneer  
Laat het mij weten wanneer er