ESP32 - Knop
De knop is een basisonderdeel en wordt veel gebruikt in diverse ESP32-projecten. Het is niet zo simpel als het lijkt (vanwege mechanische en fysieke eigenschappen). Beginners kunnen hier veel problemen mee ondervinden. Deze tutorial maakt het eenvoudig voor beginners. Laten we beginnen!
※ Notiz:
Voordat we verder gaan met de knop, willen we twee veelvoorkomende fouten benoemen die nieuwelingen vaak tegenkomen:
- Het probleem van de "floating input" (zwevende invoer):
- Symptoom: Bij het aansluiten van een knop op een ESP32 input pin, is de status van de input pin willekeurig en komt niet overeen met de knopstatus (ingedrukt of niet).
- Oorzaak: Er wordt GEEN pull-down of pull-up weerstand gebruikt op de knop pin.
- Oplossing: ⇒ Gebruik een pull-down of pull-up weerstand op de input pin. Dit wordt later verder uitgelegd in deze tutorial.
- Symptoom: De code op de ESP32 leest de knopstatus en detecteert het indrukken door statusveranderingen te monitoren (HIGH naar LOW, of LOW naar HIGH). Als de knop slechts éénmaal wordt ingedrukt, detecteert de code meerdere drukken in plaats van één.
- Oorzaak: Door mechanische en fysieke eigenschappen wordt de input pin meerdere keren snel afgewisseld tussen LOW en HIGH bij één enkele druk.
- Oplossing: ⇒ Debounce (ontkoppeling). Dit wordt uitgelegd in de ESP32 - Button - Debounce tutorial.
Het chattering-fenomeen veroorzaakt alleen problemen in bepaalde toepassingen waar het exacte aantal drukken gedetecteerd moet worden. In sommige toepassingen is dit onschadelijk.
Hardware Benodigdheden
Of u kunt de volgende kits kopen:
| 1 | × | DIYables Sensorkit (30 sensoren/displays) | |
| 1 | × | DIYables Sensorkit (18 sensoren/displays) |
Over de Knop
De drukknop, ook wel pushbutton, tactile button of momentary switch genoemd, is een schakelaar die sluit zolang deze wordt ingedrukt en opent wanneer deze wordt losgelaten. Er zijn verschillende typen drukknoppen die grofweg in twee groepen worden ingedeeld:
- PCB-montage drukknoppen (geschikt voor breadboard-montage)
- Paneelmontage drukknoppen

Knop Pinout
Een PCB-montage knop heeft gewoonlijk vier pins die intern in paren zijn verbonden.

We hoeven slechts twee van de vier pins te gebruiken, die NIET in hetzelfde interne paar verbonden zijn. Er zijn dus vier mogelijke bedradingmethodes met de knop (zie afbeelding hieronder)

Door de symmetrie worden deze vier methodes eigenlijk twee werkbare manieren. Voor de rest van deze tutorial gebruiken we twee pinnen: Pin A en Pin B die niet met elkaar verbonden zijn.
⇒ De knop ontvangt druk van de gebruiker. Om de knop stevig en stabiel op de PCB te bevestigen, zijn er vier pinnen die de druk opvangen.
Een paneelmontage knop heeft meestal twee pinnen.

De drukknopmodule bevat een ingebouwde pull-down weerstand die ervoor zorgt dat de output LOW blijft wanneer de knop niet is ingedrukt. De module heeft drie pinnen:
- GND: Sluit deze pin aan op de aarde (ground).
- VCC: Sluit deze pin aan op een 3.3V voeding.
- OUT: Sluit deze pin aan op een digitale input van de ESP32.
Met deze configuratie geeft de module LOW uit wanneer de knop los is en HIGH wanneer de knop is ingedrukt.
Hoe de Knop Werkt
- Als de knop wordt ingedrukt, is pin A verbonden met pin B.
- Als de knop NIET is ingedrukt, zijn pin A en pin B niet verbonden.

ESP32 - Knop
Een pin van de knop wordt aangesloten op een digitale inputpin van de ESP32. De andere pin wordt aangesloten op VCC of GND. Door de status van de inputpin te lezen, kan de code afleiden of de knop is ingedrukt of niet.
Inputstatus en Indrukstatus
De relatie tussen de inputpinstatus en het indrukken van de knop hangt af van hoe de knop op de ESP32 is aangesloten en hoe de ESP32 pin is ingesteld. Er zijn twee manieren om een knop met de ESP32 te gebruiken:
- Eén knop pin is verbonden met een digitale input van de ESP32, de andere pin is verbonden met VCC:
- Er MOET een pull-down weerstand worden gebruikt.
- Als de knop wordt ingedrukt, is de ESP32 pin status HIGH. Anders is de status LOW.
- Er MOET een pull-up weerstand worden gebruikt.
- Als de knop wordt ingedrukt, is de ESP32 pin status LOW. Anders is de status HIGH.
※ Notiz:
Als geen pull-down of pull-up weerstand wordt gebruikt, is de input pin status willekeurig HIGH of LOW (onstabiel, niet vast) wanneer de knop niet is ingedrukt. Dit wordt het “floating input probleem” genoemd en veroorzaakt storingen.
Om het eenvoudig te houden voor beginners, beveelt deze tutorial sterk aan een interne pull-up weerstand van de ESP32 pin te gebruiken. Er is dan geen externe weerstand nodig. Dit bespaart hardware en vereenvoudigt het bedradingdiagram.
Bedradingsdiagram tussen Knop en ESP32
- Bedradingsdiagram tussen ESP32 en PCB-montage knop

This image is created using Fritzing. Click to enlarge image
- Bedradingsdiagram tussen ESP32 en paneelmontage knop

This image is created using Fritzing. Click to enlarge image
Hoe Programmeer je een Knop
- Initialiseert de ESP32 pin als een interne pull-up input met behulp van de functie pinMode(). Bijvoorbeeld pin GPIO21:
- Leest de status van de input pin met behulp van de functie digitalRead().
※ Notiz:
Er zijn twee veelgebruikte scenario's:
- Het eerste scenario: Als de input HIGH is, doe iets. Als de input LOW is, doe iets anders.
- Het tweede scenario: Als de input van LOW naar HIGH verandert, doe iets. Als de input van HIGH naar LOW verandert, doe iets anders.
Afhankelijk van de toepassing wordt één van deze scenario's gebruikt. Bijvoorbeeld voor het aansturen van een LED met een knop:
- Als u de LED AAN wilt zetten wanneer de knop wordt ingedrukt en UIT wilt zetten wanneer de knop niet is ingedrukt, gebruikt u het eerste scenario.
- Als u de LED wilt aan- of uitzetten telkens wanneer de knop wordt ingedrukt (toggle), gebruikt u het tweede scenario.
Onderstaand voorbeeld laat zien hoe u een statusverandering van LOW naar HIGH detecteert:
ESP32 Code
Snelle Stappen
- Als u voor het eerst ESP32 gebruikt, bekijk dan hoe u de omgeving voor ESP32 instelt in Arduino IDE.
- Maak de bedrading zoals op bovenstaande afbeelding.
- Verbind de ESP32 met uw pc via een micro USB-kabel.
- Open Arduino IDE op uw pc.
- Selecteer het juiste ESP32 board (bijv. ESP32 Dev Module) en de COM-poort.
- Kopieer onderstaande code en plak deze in Arduino IDE.
- Compileer en upload de code naar het ESP32 board door op de knop Upload te klikken in Arduino IDE.

- Open de Seriële Monitor in Arduino IDE.

- Druk de knop meerdere keren in en laat los.
- Bekijk het resultaat in de Seriële Monitor. Het ziet er ongeveer zo uit:
1 staat voor HIGH, 0 voor LOW.
Regels-voor-regels Code-uitleg
De bovenstaande ESP32 code bevat regelcommentaar. Lees de opmerkingen in de code voor uitleg!
ESP32 Code Aanpassen
Laten we de code aanpassen om druk- en loslaatgebeurtenissen te detecteren.
Snelle Stappen
- Als u voor het eerst ESP32 gebruikt, bekijk dan hoe u de omgeving voor ESP32 instelt in Arduino IDE.
- Pas de code aan zoals hieronder:
- Compileer en upload de code naar het ESP32 board door op de knop Upload te klikken in Arduino IDE.

- Open de Seriële Monitor in Arduino IDE.

- Druk de knop in en laat vervolgens los.
- Bekijk het resultaat in de Seriële Monitor, het zal ongeveer zo zijn:
※ Notiz:
- De Seriële Monitor kan meerdere “ingedrukt” en “losgelaten” berichten weergeven, ook al hebt u de knop maar één keer ingedrukt en weer losgelaten. Dit is normaal gedrag van de knop en wordt het “chattering”-fenomeen genoemd. In sommige toepassingen is het nodig dit te elimineren. Meer informatie vindt u in de tutorial ESP32 - Button Debounce.
- Voor een eenvoudige aanpak, vooral bij meerdere knoppen, hebben we een bibliotheek genaamd ezButton gemaakt. U kunt hier meer over ezButton lezen.
- Voor de knopmodule gebruikt u pinMode(BUTTON_PIN, INPUT). Deze geeft LOW wanneer niet ingedrukt en HIGH wanneer 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.
Bekijk onze video-tutorial voor een visuele begeleiding bij dit project! De video biedt extra inzichten en praktische tips.
Aanvullende Kennis
- MOET: Als een sensor twee toestanden heeft: gesloten en open, heeft deze een pull-up of pull-down weerstand nodig om deze toestanden als LOW en HIGH te krijgen. Bijvoorbeeld, drukknoppen, schakelaars, magneetcontact (deursensor)...
- MOET NIET: Als een sensor twee spanningsniveaus (LOW en HIGH) rechtstreeks uitvoert, is geen pull-up of pull-down weerstand nodig. Bijvoorbeeld, bewegingssensor, touch sensor...