이 튜토리얼에서는 SunFounder의 ESP32 마이크로컨트롤러에 XY 조이스틱을 인터페이스하는 방법을 배우고, 이를 통해 위치를 감지하고 입력에 따라 동작을 수행할 수 있게 됩니다. 또한 조이스틱이 특정 위치로 이동했을 때 활성화되는 버저도 통합할 것입니다. 이 조합을 통해 사용자 입력에 실시간으로 반응하는 인터랙티브 프로젝트를 만들 수 있습니다.
ESP32-26-xy-joystick-main
XY 조이스틱은 X 및 Y 위치에 해당하는 두 개의 아날로그 출력과 동작을 트리거하기 위해 누를 수 있는 스위치를 제공합니다. 조이스틱의 값을 읽음으로써 버저 활성화나 화면에 값 표시와 같은 프로젝트의 다양한 요소를 제어할 수 있습니다. 과정을 완전히 이해하려면 추가 통찰을 위해 비디오를 확인하세요(비디오 00:00 부분).
하드웨어 설명
이 프로젝트의 주요 구성 요소는 ESP32 마이크로컨트롤러, XY 조이스틱, 그리고 버저입니다. ESP32는 Wi-Fi와 Bluetooth를 지원하는 다재다능한 보드로, IoT 프로젝트에 이상적입니다. XY 조이스틱은 X 및 Y 축용 두 개의 가변 저항과 추가 입력용 푸시 버튼 스위치로 구성됩니다.
joystick_schematicESP32-26-xy-joystick-schematic
조이스틱은 위치에 해당하는 아날로그 신호를 출력하며, 이는 ESP32의 아날로그 핀에서 읽힙니다. 푸시 버튼은 눌렸을 때 디지털 신호를 제공합니다. 버저는 ESP32의 디지털 출력 핀에 연결되어 조이스틱의 위치에 따라 활성화 또는 비활성화될 수 있습니다.
데이터시트 세부 정보
제조업체
SunFounder
부품 번호
XY 조이스틱 모듈
동작 전압
3.3 V – 5 V
저항 값
10 kΩ (각 축)
최대 전류
20 mA
스위치 유형
순간 푸시 버튼
크기
약 50 mm x 50 mm
ESP32와의 호환성을 위해 조이스틱에 3.3 V 전원을 공급하세요.
플로팅 입력을 방지하려면 스위치에 풀업 저항을 사용하세요.
아날로그 출력을 ESP32의 ADC 핀(X는 34, Y는 35)에 연결하세요.
잘못된 트리거를 방지하려면 스위치에 디바운스 메커니즘을 사용하세요.
전압 레벨을 모니터링하여 안전한 동작 한계 내에 유지되도록 하세요.
배선 지침
ESP32-26-xy-joystick-wiring
조이스틱을 ESP32에 배선하려면 먼저 조이스틱의 접지 핀을 ESP32의 접지 핀에 연결하세요. 다음으로 조이스틱의 VCC 핀을 ESP32의 3.3 V 핀에 연결합니다. 조이스틱에는 두 개의 아날로그 출력 핀이 있습니다: X축 출력(VRX로 표시)을 ESP32의 핀 34에 연결하고 Y축 출력(VRY로 표시)을 핀 35에 연결하세요.
스위치 출력의 경우 스위치 핀을 ESP32의 핀 33에 연결하세요. 이 핀은 버튼 누름을 디지털 입력으로 읽습니다. 간헐적인 문제를 피하기 위해 연결이 안전한지 확인하세요. 배선이 비디오(비디오 02:30 부분)와 다르다면 아날로그 및 디지털 연결에 대한 동일한 원칙을 따르면서 적절히 조정하세요.
코드 예제 및 설명
코드에서 먼저 조이스틱 핀에 대한 상수를 정의합니다. 식별자 xAxis, yAxis, btn은 각각 34, 35, 33으로 설정됩니다. 이렇게 하면 프로그램 전체에서 이러한 핀을 쉽게 참조할 수 있습니다.
#define xAxis 34
#define yAxis 35
#define btn 33
setup() 함수에서 직렬 통신을 초기화하고 버튼 핀 모드를 입력으로 설정합니다. 이렇게 하면 ESP32가 조이스틱에서 데이터를 읽고 직렬 모니터로 보낼 준비가 됩니다.
loop() 내부에서 analogRead()를 사용하여 조이스틱의 X 및 Y 축에 대한 아날로그 값을 읽고 xValue와 yValue에 저장합니다. 버튼 상태는 digitalRead()를 사용하여 읽고 btnValue에 저장합니다. 마지막으로 이러한 값을 직렬 모니터에 출력합니다.
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); // 읽기 사이 지연
}
이 루프는 값을 지속적으로 업데이트하여 조이스틱 이동 및 버튼 누름에 대한 실시간 피드백을 제공합니다. 전체 코드는 기사 아래에 로드된 전체 코드를 참조하세요.
데모 / 기대 효과
설정이 완료되고 코드가 업로드되면 직렬 모니터에 X 및 Y 값과 버튼 상태가 표시됩니다. 조이스틱을 움직이면 값이 그에 따라 변경되어 위치를 반영합니다. 버튼을 누르면 상태가 높음과 낮음 사이에서 전환됩니다.
일반적인 함정에는 잘못된 배선이 포함되며, 이는 플로팅 입력이나 조이스틱의 응답 없음으로 이어질 수 있습니다. 올바른 핀이 사용되고 스위치에 풀업 저항이 구현되었는지 확인하십시오. 이러한 동작에 대한 실용적인 시연을 보려면 비디오를 시청하십시오(비디오 13:00 지점).
826-ESP32 Tutorial 26/55- Arduino code for XY Joystick
언어: 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
}