ESP32 - Joystick
In deze tutorial leren we hoe u een Joystick kunt gebruiken met de ESP32. We gaan in detail leren:
- Hoe een Joystick werkt
- Hoe u een Joystick aansluit op de ESP32 en programmeert
- Hoe u de waarden van de Joystick omzet in bestuurbare waarden zoals XY-coördinaten en de richtingen omhoog/omlaag/links/rechts voor een motor

Hardware Benodigd
Of u kunt de volgende kits kopen:
| 1 | × | DIYables Sensorkit (30 sensoren/displays) | |
| 1 | × | DIYables Sensorkit (18 sensoren/displays) |
Over de Joystick Sensor
U bent waarschijnlijk wel eens een Joystick tegengekomen, bijvoorbeeld in een game controller, speelgoedbesturing of zelfs in een grote machine zoals een graafmachinebesturing.
De joystick bestaat uit twee potentiometers die haaks op elkaar staan, en een drukknop. Daarom levert hij de volgende outputs:
- Een analoge waarde (van 0 tot 4095) gerelateerd aan de horizontale positie (genoemd X-coördinaat)
- Een analoge waarde (van 0 tot 4095) gerelateerd aan de verticale positie (genoemd Y-coördinaat)
- Een digitale waarde van een drukknop (HIGH of LOW)
De combinatie van twee analoge waarden kan 2D-coördinaten creëren waarbij het midden de rustpositie van de joystick representeert. De werkelijke richting van de coördinaten is eenvoudig te bepalen als u de testcode runt (in het volgende gedeelte).
Sommige toepassingen gebruiken alle drie outputs, andere alleen een deel ervan.
Pinout
Een Joystick heeft 5 pinnen:
- GND pin: moet verbonden worden met GND (0V)
- VCC pin: moet verbonden worden met VCC (5V)
- VRX pin: geeft een analoge waarde uit die overeenkomt met de horizontale positie (X-coördinaat)
- VRY pin: geeft een analoge waarde uit die overeenkomt met de verticale positie (Y-coördinaat)
- SW pin: is de output van de drukknop in de joystick. Deze is normaal open. Als u een pull-up weerstand gebruikt op deze pin, is SW HIGH als de knop niet ingedrukt is, en LOW als hij wel ingedrukt is.

Hoe het werkt
- Wanneer u de joystick naar links of rechts beweegt, verandert de spanning op de VRX pin. Het spanningsbereik is 0 tot 5V (0V links en 5V rechts). De spanning is evenredig met de positie van de joystick ⇒ De uitlezing op de analoge pin van de ESP32 ligt tussen 0 en 4095
- Wanneer u de joystick naar boven of naar beneden beweegt, verandert de spanning op de VRY pin. Het spanningsbereik is 0 tot 5V (0V boven en 5V onder). De spanning is evenredig met de positie van de joystick ⇒ De uitlezing op de analoge pin van de ESP32 ligt tussen 0 en 4095
- Wanneer u de joystick in een willekeurige richting beweegt, veranderen de spanningen op zowel VRX als VRY volgens de projectie van de positie op elke as
- Wanneer u de joystick van boven naar beneden indrukt, wordt de interne drukknop gesloten. Als u een pull-up weerstand gebruikt op de SW pin, verandert de uitgang van SW van 5V naar 0V ⇒ De uitlezing op de digitale pin van de ESP32 gaat van HIGH naar LOW
Aansluitschema
- Hoe u ESP32 en joystick aansluit met een breadboard (experimenteerprint)

This image is created using Fritzing. Click to enlarge image
- Hoe u ESP32 en joystick aansluit met een schroefklem breakout board

Hoe te Programmeren voor Joystick
De joystick heeft twee delen: analoog (X, Y as) en digitaal (drukknop)
- Voor de analoge delen (X, Y as) hoeft u alleen de waarde van de analoge ingang te lezen met de analogRead() functie.
- Voor het digitale deel (drukknop): het is een knop. De eenvoudigste en praktischste manier is het gebruik van de ezButton library. Deze library ondersteunt ontprikkeling (debounce) en maakt gebruik van een interne pull-up weerstand. Meer info over knoppen vindt u in de ESP32 - Button tutorial. De code wordt in het volgende hoofdstuk aangeboden.
Na het uitlezen van de analoge waardes, kan het nodig zijn deze om te zetten naar bedieningselementen. Het volgende deel bevat voorbeeldcode hiervoor.
ESP32 Code
Dit gedeelte bevat de volgende voorbeeldcodes voor ESP32:
- Voorbeeldcode: leest analoge waarden van joystick
- Voorbeeldcode: leest analoge waarden en de knopstatus van joystick
- Voorbeeldcode: zet analoge waarde om naar MOVE_LEFT, MOVE_RIGHT, MOVE_UP, MOVE_DOWN commando's
- Voorbeeldcode: zet analoge waarden om in hoeken voor aansturing van twee servomotoren (bijv. in een pan-tilt camera)
Leest analoge waarden van joystick
Snelle Stappen
- Als dit de eerste keer is dat u ESP32 gebruikt, bekijk dan hoe u de omgeving instelt voor ESP32 in Arduino IDE.
- Maak de bekabeling zoals op bovenstaande afbeelding.
- Verbind de ESP32 met uw PC via een micro USB-kabel.
- Open Arduino IDE op uw PC.
- Selecteer de juiste ESP32 board (bijv. ESP32 Dev Module) en de COM-poort.
- Kopieer bovenstaande code en open deze in Arduino IDE.
- Klik op de Upload knop in Arduino IDE om de code te uploaden naar ESP32.
- Beweeg de joystick maximaal naar de rand, draai hem dan in een cirkel (met of tegen de klok in).
- Bekijk het resultaat in de Seriële Monitor.
- Terwijl u de joystick draait, kijk naar de Seriële Monitor:
- Als de X waarde 0 is, merk deze positie dan als links ⇒ de tegenovergestelde richting is rechts
- Als de Y waarde 0 is, merk deze positie dan als boven ⇒ de tegenovergestelde richting is onder
- Klik op het Libraries icoon in de linker balk van Arduino IDE.
- Zoek op "ezButton" en vind de button library van ArduinoGetStarted.com.
- Klik op Installeren om de ezButton library te installeren.
- Kopieer de bovenstaande code en open deze in Arduino IDE.
- Klik op de Upload knop om de code te uploaden naar ESP32.
- Beweeg de joystick naar links/rechts/boven/onder.
- Druk de joystick naar beneden als knop.
- Bekijk het resultaat op de Seriële Monitor.
- Kopieer bovenstaande code en open deze in Arduino IDE.
- Klik op de Upload knop om de code te uploaden naar ESP32.
- Beweeg de joystick naar links/rechts/boven/onder of in een willekeurige richting.
- Bekijk het resultaat op de Seriële Monitor.
- De ADC van de ESP32 is niet perfect nauwkeurig en moet mogelijk worden gekalibreerd voor correcte resultaten. Elke ESP32 board kan iets afwijkend zijn, waardoor u elke individuele ADC moet kalibreren.
- Kalibreren kan lastig zijn, vooral voor beginners, en levert mogelijk niet altijd perfecte resultaten op.
U zult merken dat de analoge waarde niet helemaal proportioneel is aan de joystick beweging. Dit komt niet door de joystick zelf, maar door de ADC van de ESP32. Aan het einde van deze tutorial leggen we uit waarom dit gebeurt.
Leest analoge waarden en de knopstatus van een joystick
Snelle Stappen

Zet analoge waarde om naar MOVE LEFT/RIGHT/UP/DOWN commando's
Snelle Stappen
※ Notiz:
Er kunnen momenten zijn zonder commando, met één commando of met twee commando's tegelijk (bijvoorbeeld OMHOOG en LINKS tegelijk).
Zet analoge waarden om in hoeken voor aansturing van twee servomotoren
De details zijn te vinden in de tutorial ESP32 - Joystick bestuurt Servomotor
※ Notiz:
Deze tutorial gebruikt de analogRead() functie om waarden te lezen van een ADC (Analog-to-Digital Converter) aangesloten op een joystick. De ADC van de ESP32 is geschikt voor projecten die géén hoge nauwkeurigheid vereisen. Voor projecten met precieze metingen geldt:
Voor projecten met hoge precisie kunt u overwegen een externe ADC te gebruiken (bijv. ADS1115) met de ESP32, of een Arduino die over een betrouwbaardere ADC beschikt. Wilt u de ADC van de ESP32 toch kalibreren, raadpleeg dan de ESP32 ADC Calibratie Driver
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 helpt u de stappen beter te begrijpen.