ESP32 C3 슈퍼 미니 조이스틱

ESP32 C3 슈퍼 미니 보드와 조이스틱 모듈을 연결하고 프로그래밍하는 방법을 배우세요. 이 초급자 친화적 튜토리얼은 배선에서 아날로그 값 읽기 및 제어 명령으로 변환까지 모든 것을 다룹니다.

이 ESP32 C3 슈퍼 미니 조이스틱 튜토리얼에서 배울 내용:

조이스틱 핀아웃

필요한 하드웨어

1×ESP32 C3 슈퍼 미니 아마존
1×USB 케이블 Type-C 쿠팡 | 아마존
1×조이스틱 쿠팡 | 아마존
1×브레드보드 쿠팡 | 아마존
1×점퍼 와이어 쿠팡 | 아마존
1×(선택 사항) DC 파워 잭 쿠팡 | 아마존
공개: 이 포스팅 에 제공된 일부 링크는 아마존 제휴 링크입니다. 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

조이스틱 센서 정보

조이스틱 센서는 2차원으로 위치를 감지하고 기본 제공 푸시버튼이 포함된 아날로그 입력 모듈입니다.

조이스틱 모듈의 주요 기능:

  • 서로 수직으로 배치된 2개의 내부 포텐셜미터
  • X 좌표를 아날로그 값(ESP32에서 0~4095)으로 출력
  • Y 좌표를 아날로그 값(ESP32에서 0~4095)으로 출력
  • 클릭 감지를 위한 기본 제공 푸시버튼
  • 조이스틱 위치에 따라 2D 좌표 생성
  • 중앙 위치 값은 휴식 상태를 나타냄
  • 게임 컨트롤러, RC 장난감 및 기계 제어에서 일반적으로 사용됨
  • Arduino 및 ESP32 프로젝트의 방향 입력에 완벽함
  • 간단한 아날로그 읽기 함수로 초보자 친화적

핀아웃

조이스틱 모듈에는 ESP32 C3 슈퍼 미니에 연결하기 위한 5개의 핀이 있습니다:

  • GND: 그라운드에 연결(0V)
  • VCC: 전원 공급 장치에 연결(3.3V)
  • VRX: 수평 위치(X축)에 대한 아날로그 출력
  • VRY: 수직 위치(Y축)에 대한 아날로그 출력
  • SW: 내부 푸시버튼의 디지털 출력(풀업 저항기가 있는 일반적으로 HIGH, 누르면 LOW)
조이스틱 핀아웃

작동 방식

X축 이동(좌/우):

  • 조이스틱을 좌우로 이동하면 VRX 핀의 전압이 변함
  • 전압은 0V(왼쪽)에서 3.3V(오른쪽)까지의 범위
  • ESP32 C3 슈퍼 미니는 0~4095의 아날로그 값 읽기
  • 값은 수평 엄지손가락 위치에 비례

Y축 이동(위/아래):

  • 조이스틱을 위아래로 이동하면 VRY 핀의 전압이 변함
  • 전압은 0V(위)에서 3.3V(아래)까지의 범위
  • ESP32 C3 슈퍼 미니는 0~4095의 아날로그 값 읽기
  • 값은 수직 엄지손가락 위치에 비례

대각선 이동:

  • VRX와 VRY 전압이 동시에 변함
  • 각 축은 위치 투영에 비례하여 출력
  • 모든 방향에서 부드러운 2D 좌표 생성

푸시버튼 기능:

  • 조이스틱을 눌러서 내부 버튼 활성화
  • 풀업 저항기가 있으면 SW 핀은 일반적으로 3.3V 출력
  • 버튼을 누르면 SW 핀이 0V(GND)로 당겨짐
  • ESP32는 놓으면 HIGH, 누르면 LOW로 읽음

배선도

조이스틱 모듈을 다음 배선도에 따라 ESP32 C3 슈퍼 미니에 연결합니다:

ESP32 c3 슈퍼 미니 조이스틱 배선도

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.

연결 표:

조이스틱 핀 ESP32 C3 슈퍼 미니 핀
GND GND
VCC 3.3V
VRX A1
VRY A0
SW D10

조이스틱 프로그래밍 방법

조이스틱은 ESP32 C3 슈퍼 미니에서 처리할 2개의 프로그래밍 구성 요소가 있습니다:

아날로그 축(X, Y 좌표) 읽기:

  • VRX 및 VRY 핀에 analogRead() 함수 사용
  • ESP32 C3 슈퍼 미니에서 0~4095의 값 반환
  • 각 축에 대한 단순 한 줄 읽기
int valueX = analogRead(A1); int valueY = analogRead(A0);

디지털 버튼(SW 핀) 읽기:

  • 표준 푸시버튼 입력으로 취급
  • 쉬운 디바운싱을 위해 ezButton 라이브러리 사용
  • 라이브러리는 내부 풀업 저항기를 자동으로 활성화
  • 자세한 내용은 ESP32 C3 Super Mini - 버튼 참조
  • 다음 섹션에서 제공하는 버튼 코드 예제

값을 명령으로 변환:

  • 원본 아날로그 값은 제어 애플리케이션에 대해 변환이 필요할 수 있습니다
  • 방향 명령(UP, DOWN, LEFT, RIGHT)으로 변환
  • 팬-틸트 메커니즘을 위해 서보 각도로 매핑
  • 모터 속도 값으로 스케일링
  • 예제 변환 코드가 아래에 제공됨

ESP32 C3 슈퍼 미니 코드

이 섹션은 여러 ESP32 C3 슈퍼 미니 조이스틱 예제를 제공합니다:

이러한 코드 예제가 시연하는 것:

  • 조이스틱에서 X 및 Y 아날로그 값 읽기
  • 아날로그 판독값 및 푸시버튼 상태 읽기
  • 아날로그 판독값을 방향 명령으로 변환
  • 조이스틱 위치를 서보 모터 각도로 매핑
  • 게임 및 로봇 제어를 위한 실제 응용

조이스틱에서 아날로그 값 읽기

/* * 이 ESP32 C3 Super Mini 코드는 newbiely.kr 에서 개발되었습니다 * 이 ESP32 C3 Super Mini 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/esp32-c3/esp32-c3-super-mini-joystick */ #define VRX_PIN A1 // The ESP32 C3 SuperMini pin connected to VRX pin #define VRY_PIN A0 // The ESP32 C3 SuperMini pin connected to VRY pin int valueX = 0; // to store the X-axis value int valueY = 0; // to store the Y-axis value void setup() { Serial.begin(115200); // Set the ADC attenuation to 11 dB (up to ~3.3V input) analogSetAttenuation(ADC_11db); } void loop() { // read X and Y analog values valueX = analogRead(VRX_PIN); valueY = analogRead(VRY_PIN); // print data to Serial Monitor on Arduino IDE Serial.print("x = "); Serial.print(valueX); Serial.print(", y = "); Serial.println(valueY); delay(200); }

빠른 단계

  • ESP32 C3 미니를 처음 사용하시나요? 먼저 ESP32 C3 슈퍼 미니 - 시작하기 튜토리얼을 완료하여 개발 환경을 설정하세요.
  • 구성 요소 배선: 위에 표시된 배선도를 따라 조이스틱을 ESP32 C3 슈퍼 미니에 연결합니다.
  • 보드 연결: USB Type-C 케이블을 사용하여 ESP32 C3 슈퍼 미니를 컴퓨터에 연결합니다.
  • Arduino IDE 열기: 컴퓨터에서 Arduino IDE를 시작합니다.
  • 보드 및 포트 선택: 보드 메뉴에서 ESP32 C3 슈퍼 미니를 선택하고 올바른 COM 포트를 선택합니다.
  • 코드 업로드: 위의 코드를 복사하여 Arduino IDE에 붙여넣고 업로드 버튼을 클릭합니다.
  • 조이스틱 테스트: 조이스틱의 엄지손가락을 모든 방향으로 최대한 밀어냅니다.
  • 조이스틱 회전: 엄지손가락을 완전히 원 안에서 회전시킵니다(시계 방향 또는 반시계 방향).
  • 직렬 모니터 열기: 출력을 확인하여 X 및 Y 좌표 값을 확인합니다.
  • 방향 식별: 회전 중 직렬 모니터를 보고 왼쪽/오른쪽/위/아래(X=0은 왼쪽, Y=0은 위)에 해당하는 위치를 식별합니다.
  • 전문가 팁: 향후 프로젝트에서 쉽게 참조할 수 있도록 조이스틱 베이스에 좌표 방향을 보여주는 화살표로 표시합니다.
Newbiely | Arduino IDE 2.3.8
──
File
Edit
Sketch
Tools
Help
ESP32C3 Dev Module
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'ESP32C3 Dev Module' on 'COM15')
New Line
9600 baud
X: 2048, Y: 2012 X: 3890, Y: 2015 X: 4095, Y: 2456 X: 3876, Y: 3920 X: 2034, Y: 4095 X: 245, Y: 3905 X: 0, Y: 2467 X: 212, Y: 134 X: 2048, Y: 0 X: 3845, Y: 189 X: 2056, Y: 2018
Ln 11, Col 1
ESP32C3 Dev Module on COM15
2

※ 주의:

조이스틱 이동과 아날로그 값이 완벽하게 선형적이지 않을 수 있습니다. 이는 조이스틱 자체가 아닌 ESP32 C3 슈퍼 미니의 ADC 특성 때문입니다. 이 튜토리얼의 끝에서 ADC 보정 참고 사항을 참조하세요.

조이스틱에서 아날로그 값과 버튼 상태 읽기

/* * 이 ESP32 C3 Super Mini 코드는 newbiely.kr 에서 개발되었습니다 * 이 ESP32 C3 Super Mini 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/esp32-c3/esp32-c3-super-mini-joystick */ #include <ezButton.h> #define VRX_PIN A1 // The ESP32 C3 SuperMini pin connected to VRX pin #define VRY_PIN A0 // The ESP32 C3 SuperMini pin connected to VRY pin #define SW_PIN 10 // The ESP32 C3 SuperMini pin connected to SW pin ezButton button(SW_PIN); int valueX = 0; // to store the X-axis value int valueY = 0; // to store the Y-axis value int bValue = 0; // To store value of the button void setup() { Serial.begin(115200); // Set the ADC attenuation to 11 dB (up to ~3.3V input) analogSetAttenuation(ADC_11db); button.setDebounceTime(50); // set debounce time to 50 milliseconds } void loop() { button.loop(); // MUST call the loop() function first // read X and Y analog values valueX = analogRead(VRX_PIN); valueY = analogRead(VRY_PIN); // Read the button value bValue = button.getState(); if (button.isPressed()) { Serial.println("The button is pressed"); // TODO do something here } if (button.isReleased()) { Serial.println("The button is released"); // TODO do something here } // print data to Serial Monitor on Arduino IDE Serial.print("x = "); Serial.print(valueX); Serial.print(", y = "); Serial.print(valueY); Serial.print(" : button = "); Serial.println(bValue); }

빠른 단계

  • ezButton 라이브러리 설치: Arduino IDE의 왼쪽 탐색 모음에서 라이브러리 관리자 아이콘을 클릭합니다.
  • 라이브러리 검색: 검색 상자에 "ezButton"을 입력합니다.
  • 라이브러리 찾기: ArduinoGetStarted.com의 버튼 라이브러리를 찾습니다.
  • 설치: 설치 버튼을 클릭하여 Arduino IDE에 ezButton 라이브러리를 추가합니다.
  • Search for ezButton created by ArduinoGetStarted.com and click the Install button.
Newbiely | Arduino IDE 2.3.8
──
File
Edit
Sketch
Tools
Help
ESP32C3 Dev Module
Library Manager
Type:
All
Topic:
All
ezButton by ArduinoGetStarted.com
Button library supports debounce, pressed/released events and the press counting. It is easy to use with multiple buttons. The library can be used for push-button, momentary switches, toggle switch, magnetic contact switch (door sensor)... It is designed for not only beginners but also experienced users. More info
1.0.6
INSTALL
Newbiely.ino
···
1 void setup() {
Output
Serial Monitor
Ln 1, Col 1
ESP32C3 Dev Module on COM15
1
  • 코드 업로드: 위의 코드를 Arduino IDE에 복사하고 업로드를 클릭합니다.
  • X/Y 이동 테스트: 조이스틱 엄지손가락을 왼쪽, 오른쪽, 위, 아래로 누릅니다.
  • 버튼 테스트: 조이스틱 엄지손가락을 위에서 아래로 눌러 버튼을 활성화합니다.
  • 결과 보기: 직렬 모니터를 열어 X, Y 값 및 버튼 상태 변경을 확인합니다.
  • 전문가 팁: ezButton 라이브러리는 추가 코드 없이 디바운싱을 자동으로 처리하여 깨끗한 버튼 누름 감지를 제공합니다.
Newbiely | Arduino IDE 2.3.8
──
File
Edit
Sketch
Tools
Help
ESP32C3 Dev Module
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'ESP32C3 Dev Module' on 'COM15')
New Line
9600 baud
x = 2048, y = 2012, button: RELEASED x = 3890, y = 2015, button: RELEASED x = 4095, y = 2456, button: RELEASED x = 2034, y = 4095, button: RELEASED x = 2034, y = 4095, button: PRESSED x = 245, y = 3905, button: PRESSED x = 0, y = 2467, button: RELEASED x = 212, y = 134, button: RELEASED x = 2048, y = 0, button: RELEASED x = 2056, y: 2018, button: RELEASED
Ln 11, Col 1
ESP32C3 Dev Module on COM15
2

아날로그 값을 MOVE LEFT/RIGHT/UP/DOWN 명령으로 변환

/* * 이 ESP32 C3 Super Mini 코드는 newbiely.kr 에서 개발되었습니다 * 이 ESP32 C3 Super Mini 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/esp32-c3/esp32-c3-super-mini-joystick */ #define VRX_PIN A1 // The ESP32 C3 SuperMini pin connected to VRX pin #define VRY_PIN A0 // The ESP32 C3 SuperMini pin connected to VRY pin #define LEFT_THRESHOLD 1000 #define RIGHT_THRESHOLD 3000 #define UP_THRESHOLD 1000 #define DOWN_THRESHOLD 3000 #define COMMAND_NO 0x00 #define COMMAND_LEFT 0x01 #define COMMAND_RIGHT 0x02 #define COMMAND_UP 0x04 #define COMMAND_DOWN 0x08 int valueX = 0 ; // to store the X-axis value int valueY = 0 ; // to store the Y-axis value int command = COMMAND_NO; void setup() { Serial.begin(115200); // Set the ADC attenuation to 11 dB (up to ~3.3V input) analogSetAttenuation(ADC_11db); } void loop() { // read X and Y analog values valueX = analogRead(VRX_PIN); valueY = analogRead(VRY_PIN); // converts the analog value to commands // reset commands command = COMMAND_NO; // check left/right commands if (valueX < LEFT_THRESHOLD) command = command | COMMAND_LEFT; else if (valueX > RIGHT_THRESHOLD) command = command | COMMAND_RIGHT; // check up/down commands if (valueY < UP_THRESHOLD) command = command | COMMAND_UP; else if (valueY > DOWN_THRESHOLD) command = command | COMMAND_DOWN; // NOTE: AT A TIME, THERE MAY BE NO COMMAND, ONE COMMAND OR TWO COMMANDS // print command to serial and process command if (command & COMMAND_LEFT) { Serial.println("COMMAND LEFT"); // TODO: add your task here } if (command & COMMAND_RIGHT) { Serial.println("COMMAND RIGHT"); // TODO: add your task here } if (command & COMMAND_UP) { Serial.println("COMMAND UP"); // TODO: add your task here } if (command & COMMAND_DOWN) { Serial.println("COMMAND DOWN"); // TODO: add your task here } }

빠른 단계

  • 코드 업로드: 명령 변환 코드를 Arduino IDE에 복사하고 업로드를 클릭합니다.
  • 조이스틱 이동: 엄지손가락을 다양한 방향(왼쪽, 오른쪽, 위, 아래, 대각선)으로 누릅니다.
  • 직렬 모니터 확인: 직렬 모니터를 열어 방향 명령 출력을 확인합니다.
  • 대각선 테스트: 모서리로 이동하여 여러 동시 명령(예: "UP + LEFT")을 확인합니다.
  • 전문가 팁: 코드의 임계값을 조정하여 조이스틱이 이동에 더욱 민감하거나 덜 민감하도록 만듭니다.
Newbiely | Arduino IDE 2.3.8
──
File
Edit
Sketch
Tools
Help
ESP32C3 Dev Module
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'ESP32C3 Dev Module' on 'COM15')
New Line
9600 baud
COMMAND: MOVE RIGHT COMMAND: MOVE RIGHT, MOVE DOWN COMMAND: MOVE DOWN COMMAND: MOVE DOWN, MOVE LEFT COMMAND: MOVE LEFT COMMAND: MOVE LEFT, MOVE UP COMMAND: MOVE UP COMMAND: MOVE UP, MOVE RIGHT (No command - centered) COMMAND: MOVE RIGHT
Ln 11, Col 1
ESP32C3 Dev Module on COM15
2

※ 주의:

조이스틱은 동시에 0개, 1개 또는 2개의 명령을 출력할 수 있습니다. 예를 들어 왼쪽 위 모서리로 밀면 동시에 "MOVE UP"과 "MOVE LEFT"를 모두 출력하여 게임과 로봇의 대각선 이동에 적합합니다.

아날로그 값을 각도로 변환하여 2개의 서보 모터 제어

ESP32 C3 슈퍼 미니 조이스틱으로 서보 모터를 제어하기 위한 자세한 지침은 다음 완전한 튜토리얼을 참조하세요: ESP32 C3 슈퍼 미니 - 조이스틱은 서보 모터 제어

서보 튜토리얼에서 배울 내용:

  • 조이스틱 X/Y 값을 서보 각도(0-180도)로 매핑
  • 팬-틸트 카메라 메커니즘 제어
  • 대화형 로봇 팔 제어 구축
  • 조이스틱 이동에 대한 실시간 서보 응답

※ 주의:

중요한 ADC 정확도 정보:

이 튜토리얼은 analogRead() 함수를 사용하여 센서 또는 구성 요소에 연결된 ADC(아날로그-디지털 변환기)에서 값을 읽습니다. ESP32 C3 슈퍼 미니의 ADC는 높은 정확도가 필요하지 않은 프로젝트에 적합합니다. 그러나 정밀한 측정이 필요한 프로젝트의 경우 다음을 염두에 두세요:

  • ESP32 C3 슈퍼 미니의 ADC는 완벽하게 정확하지 않으며 올바른 결과를 얻기 위해 보정이 필요할 수 있습니다. 각 ESP32 C3 슈퍼 미니 보드는 약간 다를 수 있으므로 각 개별 보드에 대해 보정이 필요합니다.
  • 보정은 특히 초보자에게는 어려울 수 있으며 항상 원하는 정확한 결과를 얻지 못할 수 있습니다.

높은 정밀도가 필요한 프로젝트의 경우 ESP32 C3 슈퍼 미니와 함께 외부 ADC(예: ADS1115)를 사용하거나 더 신뢰할 수 있는 ADC를 갖춘 Arduino Uno R4 WiFi와 같은 다른 Arduino를 사용하는 것을 고려하세요. 여전히 ESP32 C3 슈퍼 미니의 ADC를 보정하려면 ESP32 ADC 보정 드라이버를 참조하세요.

응용 및 프로젝트 아이디어

이 흥미로운 프로젝트에서 ESP32 C3 슈퍼 미니 조이스틱 설정을 사용합니다:

  • 방향 제어 기능이 있는 무선 RC 자동차 구축
  • 비디오 추적용 팬-틸트 카메라 시스템 만들기
  • Arduino 기반 게임용 게임 컨트롤러 설계
  • 직관적인 조이스틱 이동으로 로봇 팔 제어
  • 드론 비행 제어기 인터페이스 만들기
  • 전동 휠체어 조이스틱 제어 시스템 구축
  • 아케이드 스타일 게이밍 콘솔 만들기
  • 정밀 위치 제어가 있는 카메라 슬라이더 설계

비디오 튜토리얼

아래 비디오를 시청하여 이 프로젝트에 대한 시각적 안내를 받으세요.

도전 과제

이 ESP32 C3 슈퍼 미니 조이스틱 기술로 도전해 보세요:

  • 쉬움: 조이스틱 방향에 따라 켜지는 LED 표시기 추가(위/아래/좌/우용 4개 LED)
  • 쉬움: 조이스틱 X 및 Y 값을 직렬 모니터 대신 OLED 또는 LCD 화면에 표시
  • 중간: 조이스틱 이동을 실시간으로 OLED 디스플레이에 그리는 그리기 프로그램 만들기
  • 중간: 중심에서 조이스틱 거리를 모터 속도 값으로 매핑하여 속도 제어 추가
  • 고급: ESP-NOW를 사용하여 다른 ESP32를 원격으로 제어하는 무선 조이스틱 컨트롤러 구축
  • 고급: 특정 조이스틱 이동 패턴(원, 8자 등)을 감지하는 제스처 인식 구현

댓글

관련 튜토리얼