Pretraži kod

ESP32 Tutorijal 26/55 - Korištenje džojstika s Arduinom poduzimanje akcije | SunFounderov ESP32 IoT komplet

ESP32 Tutorijal 26/55 - Korištenje džojstika s Arduinom poduzimanje akcije | SunFounderov ESP32 IoT komplet

U ovom tutorijalu naučit ćemo kako povezati XY džojstik sa ESP32 mikrokontrolerom kompanije SunFounder, što će nam omogućiti da detektujemo njegov položaj i poduzmemo akciju na osnovu njegovog unosa. Također ćemo integrirati zujalicu koja se aktivira kada se džojstik pomjeri na određenu poziciju. Ova kombinacija će nam omogućiti da kreiramo interaktivne projekte koji reaguju na korisnički unos u realnom vremenu.

ESP32-26-xy-joystick-main

XY džojstik pruža dva analogna izlaza koja odgovaraju X i Y pozicijama i prekidač koji se može pritisnuti za pokretanje akcije. Čitanjem vrijednosti sa džojstika možemo kontrolisati različite elemente u našem projektu, kao što su aktiviranje zujalice ili prikazivanje vrijednosti na ekranu. Da biste u potpunosti razumjeli proces, svakako pogledajte video za dodatne uvide (u videu na 00:00).

Objašnjenje hardvera

Glavne komponente za ovaj projekt uključuju ESP32 mikrokontroler, XY džojstik i zujalicu. ESP32 je svestrana ploča koja podržava Wi-Fi i Bluetooth, što je čini idealnom za IoT projekte. XY džojstik se sastoji od dva promjenjiva otpornika za X i Y osi i tipkala za dodatni unos.

joystick_schematic
ESP32-26-xy-joystick-schematic

Džojstik daje analogne signale koji odgovaraju njegovom položaju, a koje čitaju analogni pinovi ESP32-a. Tipkalo daje digitalni signal kada je pritisnuto. Zujalica je povezana na digitalni izlazni pin na ESP32-u, što joj omogućava da se aktivira ili deaktivira na osnovu položaja džojstika.

Detalji iz tehničke dokumentacije

Proizvođač SunFounder
Broj dijela XY Joystick Module
Radni napon 3.3 V – 5 V
Vrijednost otpornika 10 kΩ (svaka osa)
Maksimalna struja 20 mA
Tip prekidača Trenutno tipkalo
Dimenzije Približno 50 mm x 50 mm

 

  • Osigurajte da džojstik bude napajan sa 3.3 V radi kompatibilnosti sa ESP32.
  • Koristite pull-up otpornike za prekidač kako biste izbjegli plutajuće ulaze.
  • Spojite analogne izlaze na ADC pinove ESP32-a (34 za X, 35 za Y).
  • Koristite mehanizam za uklanjanje treperenja (debounce) za prekidač kako biste spriječili lažno okidanje.
  • Pratite nivoe napona kako biste osigurali da ostanu unutar sigurnih radnih granica.

Upute za povezivanje

ESP32-26-xy-joystick-wiring

Da biste povezali džojstik sa ESP32, počnite spajanjem uzemljenog pina sa džojstika na uzemljeni pin na ESP32-u. Zatim spojite VCC pin džojstika na 3.3 V pin na ESP32-u. Džojstik ima dva analogna izlazna pina: spojite X-osni izlaz (označen kao VRX) na pin 34 na ESP32-u i Y-osni izlaz (označen kao VRY) na pin 35.

Za izlaz prekidača, spojite pin prekidača na pin 33 na ESP32-u. Ovaj pin će čitati pritisak tipke kao digitalni ulaz. Osigurajte da su veze sigurne kako biste izbjegli povremene probleme. Ako se vaše povezivanje razlikuje od videa (u videu na 02:30), prilagodite se u skladu s tim dok slijedite iste principe za analogne i digitalne veze.

Primjeri koda i objašnjenje

U kodu počinjemo definiranjem konstanti za pinove džojstika. Identifikatori xAxis, yAxis i btn postavljeni su na 34, 35 i 33, respektivno. Ovo olakšava referenciranje ovih pinova kroz cijeli program.

#define xAxis 34
#define yAxis 35
#define btn 33

U funkciji setup() inicijaliziramo serijsku komunikaciju i postavljamo način rada pina tipkala na ulaz. Ovo priprema ESP32 da čita podatke sa džojstika i šalje ih na serijski monitor.

void setup() {
  Serial.begin(115200);
  pinMode(btn, INPUT);  
}

Unutar loop() funkcije čitamo analogne vrijednosti za X i Y osi džojstika koristeći analogRead() i pohranjujemo ih u xValue i yValue. Stanje tipkala se čita koristeći digitalRead() i pohranjuje u btnValue. Na kraju, ispisujemo ove vrijednosti na serijski monitor.

void loop() {
  int xValue = analogRead(xAxis);
  int yValue = analogRead(yAxis); 
  int btnValue = digitalRead(btn);
  
  Serial.printf("Joystick value is %d , %d , %d \n",xValue,yValue,btnValue);
  delay(300);  // Kašnjenje između čitanja
}

Ova petlja kontinuirano ažurira vrijednosti, pružajući povratne informacije u realnom vremenu o kretanju džojstika i pritiscima na tipke. Za kompletan kod, pogledajte puni kod učitan ispod članka.

Demonstracija / Šta očekivati

Kada je postavka završena i kod učitan, serijski monitor bi trebao prikazati X i Y vrijednosti zajedno sa stanjem tipkala. Dok pomjerate džojstik, vrijednosti će se mijenjati u skladu s tim, odražavajući njegov položaj. Pritiskanje tipke će prebaciti njeno stanje između visokog i niskog nivoa.

Uobičajene zamke uključuju pogrešno povezivanje, što može dovesti do plutajućih ulaza ili izostanka reakcije džojstika. Provjerite da se koriste ispravni pinovi i da su otpornici za podizanje (pull-up) implementirani za prekidač. Pogledajte video za praktične demonstracije ovih ponašanja (u videu na 13:00).

Vremenske oznake videa

  • 00:00 Početak
  • 1:47 Uvod u XY džojstik
  • 7:32 Mjerenje vrijednosti džojstika
  • 8:40 Objašnjeno povezivanje
  • 11:06 Objašnjen Arduino kôd za džojstik s ESP32
  • 14:43 Odabir ESP32 ploče i COM porta u Arduino IDE
  • 16:24 Demonstracija jednostavne upotrebe džojstika
  • 19:20 Detekcija položaja džojstika pomoću kôda sa zujalicom
  • 21:16 Demonstracija detekcije položaja

Slike

joystick_schematic
joystick_schematic
ESP32-26-xy-joystick-schematic
ESP32-26-xy-joystick-schematic
ESP32-26-xy-joystick-wiring
ESP32-26-xy-joystick-wiring
ESP32-26-xy-joystick-main
ESP32-26-xy-joystick-main
826-ESP32 Tutorial 26/55- Arduino code for XY Joystick
Jezik: C++
// Define constants for the x and y axis and the button pins
#define xAxis 34
#define yAxis 35
#define btn 33


void setup() {
  // Initialize serial communication at 115200 bits per second:
  Serial.begin(115200);

  // Set the mode of the button pin to input
  pinMode(btn, INPUT);  
}

void loop() {
  // Read the analog value for x,y axis
  int xValue = analogRead(xAxis);
  int yValue = analogRead(yAxis); 

  // Read the digital value from the button pin
  int btnValue = digitalRead(btn);
  
  // print out the values
  Serial.printf("Joystick value is %d , %d , %d \n",xValue,yValue,btnValue);
  
  delay(300);  // Delay between reads
}

Resursi i reference

Datoteke📁

Nema dostupnih datoteka.