Raspberry Pi - Knop
Deze tutorial legt uit hoe u een Raspberry Pi gebruikt met een knop. In detail leert u:
- Hoe u de knop aansluit op de Raspberry Pi
- Hoe u de Raspberry Pi programmeert om de status van de knop te lezen
- Hoe u de Raspberry Pi programmeert om druk- en loslaat-events van de knop te detecteren
- Hoe u het probleem van "floating input" voorkomt bij gebruik van een knop met Raspberry Pi
- Hoe u het "chattering"-probleem voorkomt bij gebruik van een knop met Raspberry Pi
De knop wordt ook wel pushbutton, tactiele knop of momentary switch genoemd. Het is een fundamenteel onderdeel dat in veel Raspberry Pi projecten wordt gebruikt. Het is eenvoudig te gebruiken, maar kan voor beginners verwarrend zijn vanwege mechanische en fysieke aspecten en het gebruik ervan. Deze tutorial vereenvoudigt het voor beginners.
Hardware Vereist
Of u kunt de volgende kits kopen:
| 1 | × | DIYables Sensorkit (30 sensoren/displays) | |
| 1 | × | DIYables Sensorkit (18 sensoren/displays) |
Over de Knop
Bij het gebruik van een knop lopen beginners vaak tegen twee veelvoorkomende problemen aan:
1. Floating input probleem:
- Symptoom: De waarde die wordt gelezen vanaf de input pin komt niet overeen met de staat van het indrukken van de knop.
- Oorzaak: Er wordt geen pull-up of pull-down weerstand gebruikt op de input pin.
- Oplossing: Gebruik een pull-up of pull-down weerstand; dit wordt behandeld in deze tutorial.
2. Chattering fenomeen:
- Symptoom: De Raspberry Pi code detecteert meerdere knopdrukken terwijl u de knop slechts één keer indrukt.
- Oorzaak: Mechanische en fysieke eigenschappen zorgen ervoor dat de status van de knop (of schakelaar) snel wisselt tussen LOW en HIGH meerdere keren.
- Oplossing: Om dit probleem op te lossen behandelt de tutorial Raspberry Pi - Knop - Debounce het gebruik van debounce technieken.
Voor toepassingen waarbij precieze drukdetectie vereist is, is dit een belangrijke overweging.
De Knop Pinout
Er zijn diverse soorten drukknoppen, die globaal in twee groepen kunnen worden ingedeeld:
- PCB-montage drukknop (geschikt voor montage op een breadboard)
- Paneel-montage drukknop

Een PCB-montage knop heeft meestal vier pinnen.

Deze pinnen zijn intern in paren met elkaar verbonden. Er hoeven daarom maar twee van de vier pinnen te worden gebruikt die onderling niet verbonden zijn.
Er zijn vier manieren om de knop aan te sluiten, waarvan er twee symmetrisch zijn (zie afbeelding).

? Waarom gebruiken we maar twee van de vier pinnen bij een knop?
⇒ Om ervoor te zorgen dat de knop stevig op het PCB (printed circuit board) blijft zitten en druk kan weerstaan.
Een paneel-montage drukknop heeft meestal twee pinnen.

De drukknopmodule bevat een ingebouwde pull-down weerstand, waardoor de uitgang LOW blijft als de knop niet is ingedrukt. De module heeft drie pinnen:
- GND: Verbind deze pin met aarde (ground).
- VCC: Verbind deze pin met een 3.3V voedingsspanning.
- OUT: Verbind deze pin met een digitale input op uw Raspberry Pi.
Met deze configuratie geeft de module LOW wanneer de knop niet is ingedrukt en HIGH wanneer de knop wel is ingedrukt.
Hoe Het Werkt
- Wanneer de knop niet ingedrukt is, zijn pin A en pin B niet verbonden.
- Wanneer de knop wel ingedrukt is, worden pin A en pin B met elkaar verbonden.

Raspberry Pi - Knop
Een pin van de knop wordt verbonden met VCC of GND. De andere pin van dezelfde knop wordt verbonden met een pin van de Raspberry Pi. Door de status te controleren van een Raspberry Pi pin die als input is ingesteld, kunnen we bepalen of een knop is ingedrukt.
Knopstatus en Drukstatus
De verbinding tussen de knop en Raspberry Pi, evenals de configuratie van de Raspberry Pi pin, bepalen de relatie tussen de knopstatus en de drukstatus.
Er zijn twee manieren om een knop te gebruiken met Raspberry Pi:
- Verbind een pin van de knop met VCC en de andere pin met een Raspberry Pi pin met een pull-down weerstand.
- Wanneer de knop wordt ingedrukt, is de Raspberry Pi pin HIGH. Anders is deze LOW.
- Er kan gebruik worden gemaakt van een interne of externe weerstand. De interne weerstand is ingebouwd in de Raspberry Pi en kan via code worden ingesteld.
- Wanneer de knop wordt ingedrukt, is de Raspberry Pi pin LOW. Anders is deze HIGH.
- Er kan gebruik worden gemaakt van een interne of externe weerstand. De interne weerstand is ingebouwd in de Raspberry Pi en kan via code worden ingesteld.
※ Notiz:
Wanneer geen pull-down of pull-up weerstand wordt gebruikt, komt de input pin in een “floating” toestand als de knop niet is ingedrukt. Dit betekent dat de status zowel HIGH als LOW kan zijn (onstabiel), wat leidt tot incorrecte detectie.
- Slechtste praktijk: initialiseer de Raspberry Pi pin als input zonder pull-up of pull-down weerstand (GPIO.setup(BUTTON_PIN, GPIO.IN, pull_up_down=GPIO.PUD_OFF)) en gebruik geen externe weerstand.
- Beste praktijk: initialiseer de Raspberry Pi pin als interne pull-up input (GPIO.setup(BUTTON_PIN, GPIO.IN, pull_up_down=GPIO.PUD_UP)). Er is dan geen externe weerstand nodig.
Voor het gemak van beginners gebruikt deze tutorial de meest eenvoudige aanpak: de Raspberry Pi pin instellen als interne pull-up input zonder externe weerstand. U hoeft zich geen zorgen te maken over de aansluiting van pull-up/pull-down weerstanden. Het enige wat nodig is, is de juiste code in Raspberry Pi.
Aansluitschema
- Aansluitschema tussen Raspberry Pi en PCB-montage knop

This image is created using Fritzing. Click to enlarge image
- Aansluitschema tussen Raspberry Pi en paneel-montage knop

This image is created using Fritzing. Click to enlarge image
Om uw bekabelingsopstelling te vereenvoudigen en te organiseren, raden we het gebruik van een Schroevenklemaansluiting-shield voor Raspberry Pi aan. Deze shield zorgt voor veiligere en beter beheerbare verbindingen, zoals hieronder weergegeven:

Hoe te Programmeren voor Knop
- Gebruik de functie GPIO.setup() om de Raspberry Pi pin te initialiseren als interne pull-up input. Bijvoorbeeld pin 16:
- Gebruik de functie GPIO.input() om de status van de Raspberry Pi pin te lezen.
※ Notiz:
Er zijn twee veelvoorkomende gebruikscases:
- De eerste: als de inputstatus HIGH is, voer dan een actie uit. Als de inputstatus LOW is, voer dan de tegenovergestelde actie uit.
- De tweede: als de inputstatus wisselt van LOW naar HIGH (of van HIGH naar LOW), onderneem dan een actie.
Afhankelijk van de toepassing kiest u een van deze twee. Bijvoorbeeld, bij het gebruik van een knop om een LED te bedienen:
- Als u wilt dat de LED AAN is wanneer de knop is ingedrukt en UIT wanneer de knop niet is ingedrukt, dan gebruikt u de eerste gebruiksvariant.
- Als u wilt dat de LED wisselt tussen AAN en UIT bij elke druk op de knop, dan gebruikt u de tweede gebruiksvariant.
Raspberry Pi Code – Status van de knop uitlezen
Snelle Stappen
- Zorg dat u Raspbian of een ander compatibel besturingssysteem geïnstalleerd heeft op uw Raspberry Pi.
- Zorg dat uw Raspberry Pi verbonden is met hetzelfde lokale netwerk als uw pc.
- Zorg dat uw Raspberry Pi verbonden is met internet als u libraries moet installeren.
- Als dit de eerste keer is dat u een Raspberry Pi gebruikt, zie hoe de Raspberry Pi in te stellen
- Verbind uw pc met Raspberry Pi via SSH met de ingebouwde SSH-client op Linux en macOS, of via PuTTY op Windows. Zie hoe uw pc verbinden met Raspberry Pi via SSH.
- Controleer of u de RPi.GPIO library geïnstalleerd heeft. Zo niet, installeer deze met het volgende commando:
- Maak een Python scriptbestand button.py en voeg de volgende code toe:
- Sla het bestand op en voer het Python script uit met het volgende commando in de terminal:
- Druk meerdere keren op de knop en laat hem weer los.
- Bekijk de uitvoer in de Serial Monitor.
1 betekent HIGH, 0 betekent LOW.
Het script draait in een oneindige lus totdat u Ctrl + C indrukt in de terminal.
Code Uitleg
Bekijk de regel-voor-regel uitleg in de commentaren bij de broncode!
Raspberry Pi Code – Detecteren van knopdruk events
Snelle Stappen
- Maak een Python scriptbestand button_pressed.py en voeg de volgende code toe:
- Sla het bestand op en voer het Python script uit met het volgende commando in de terminal:
- Houd de knop een moment ingedrukt.
- Bekijk de uitvoer in de Serial Monitor.
Het script draait in een oneindige lus totdat u Ctrl + C indrukt in de terminal.
Code Uitleg
Bekijk de regel-voor-regel uitleg in de commentaren bij de broncode!
※ Notiz:
- Ook als u de knop maar één keer indrukt en loslaat, kan de uitvoer in de terminal meerdere druk- en loslaat-events weergeven. Dit is het verwachte gedrag van de knop. Dit fenomeen wordt “chattering” genoemd. Meer informatie hierover vindt u in de tutorial Raspberry Pi - Knop Debounce.
- Als u de knopmodule gebruikt, stel dan de pin in op inputmodus met GPIO.setup(BUTTON_PIN, GPIO.IN, pull_up_down=GPIO.PUD_OFF). Met deze configuratie geeft de module LOW uit wanneer de knop niet is ingedrukt, en HIGH wanneer de knop wel is ingedrukt.
Video Tutorial
We overwegen het maken van videotutorials. Als u videotutorials belangrijk vindt, abonneer u dan op ons YouTube-kanaal om ons te motiveren de video's te maken.
Daag uzelf uit
- Wanneer de knop is ingedrukt, moet de LED worden ingeschakeld.
- Wanneer de knop niet is ingedrukt, moet de LED worden uitgeschakeld.
- Elke keer dat de knop wordt ingedrukt, moet de LED schakelen tussen AAN en UIT.
Extra Kennis
Wanneer moet u wel en niet een pull-down/pull-up weerstand gebruiken op een input pin?
- Als een sensor een gesloten of open toestand heeft, is een pull-up of pull-down weerstand nodig om deze toestanden te definiëren als LOW en HIGH. Voorbeelden van dergelijke sensoren zijn pushbuttons, schakelaars en magneetcontactschakelaars (deursensor).
- Als een sensor twee gedefinieerde spanningsniveaus heeft (LOW en HIGH), is een pull-up of pull-down weerstand NIET noodzakelijk. Voorbeelden hiervan zijn bewegingssensoren en touch-sensoren.