ESP32 C3 Super Mini 로터리 인코더
로터리 인코더를 ESP32 C3 Super Mini와 함께 사용하여 회전 방향 및 위치를 감지하는 방법을 배웁니다. 이 초보자 친화적인 튜토리얼은 배선부터 인터럽트 기반 기법을 사용한 코딩까지 모든 것을 다룹니다.
이 가이드에서 배우게 될 내용:
- 로터리 인코더가 무엇인지 그리고 가변저항과 어떻게 다른지
- 증분 인코더가 어떻게 작동하고 회전을 감지하는지
- 로터리 인코더를 ESP32 C3 Super Mini에 연결하는 방법
- ESP32 C3 Super Mini를 프로그래밍하여 인코더 방향 및 위치를 읽는 방법
- 더 효율적인 인코더 읽기를 위해 인터럽트를 사용하는 방법
- 로터리 인코더 프로젝트의 실제 응용

필요한 하드웨어
| 1 | × | ESP32 C3 Super Mini | 아마존 | |
| 1 | × | USB 케이블 타입-A to 타입-C (USB-A PC용) | 쿠팡 | 아마존 | |
| 1 | × | USB 케이블 타입-C to 타입-C (USB-C PC용) | 아마존 | |
| 1 | × | 로터리 엔코더 (Rotary Encoder) | 쿠팡 | 아마존 | |
| 1 | × | 브레드보드 | 쿠팡 | 아마존 | |
| 1 | × | 점퍼케이블 | 쿠팡 | 아마존 |
로터리 인코더 소개
로터리 인코더는 회전 운동을 전기 신호로 변환하여 방향 및 회전량을 결정하는 위치 센서입니다.
로터리 인코더의 주요 유형:
- 증분 인코더: 펄스 신호를 사용하여 상대적 위치 변화를 측정합니다 - 회전 추적에 완벽합니다
- 절대 인코더: 전원이 꺼진 경우에도 위치 데이터를 유지하는 고유한 위치 코드를 제공합니다
로터리 인코더가 초보자에게 좋은 이유:
- 몇 개의 핀만으로 사용하기 쉬움
- 회전 방향 및 버튼 누름 감지 제공
- 기계적 제한 없이 지속적으로 회전 가능
- ESP32 C3 Super Mini 프로젝트에서 인터럽트와 함께 잘 작동
이 튜토리얼은 Arduino 및 ESP32 프로젝트에 가장 일반적인 유형인 증분 로터리 인코더를 중점적으로 다룹니다.
로터리 인코더 모듈 핀아웃

로터리 인코더 모듈에는 ESP32 C3 Super Mini에 연결할 5개의 핀이 있습니다:
- CLK pin (Output A): 회전을 신호하는 기본 펄스 출력 - 감지 클릭당 완전한 사이클 하나를 출력합니다 (LOW → HIGH → LOW)
- DT pin (Output B): CLK보다 90도 뒤떨어진 2차 펄스 출력으로 회전 방향 (시계 방향 또는 반시계 방향)을 결정합니다
- SW pin: 푸시 버튼 연결 - 정상적으로 개방된 상태, 누르지 않으면 HIGH를 읽고 누르면 LOW를 읽습니다 (풀업 저항 필요)
- VCC pin (+): 전원 공급 연결 - 3.3V 또는 5V에 연결
- GND pin: 접지 연결 - GND (0V)에 연결
로터리 인코더 vs 가변저항
로터리 인코더를 가변저항과 혼동할 수 있지만 용도가 다릅니다.
주요 차이점:
- 회전 범위: 로터리 인코더는 360° 지속적으로 회전하고 가변저항은 제한된 회전 (일반적으로 270°)을 가집니다
- 출력 유형: 인코더는 디지털 펄스를 출력하고 가변저항은 아날로그 전압을 출력합니다
- 위치 추적: 인코더는 상대적 움직임 (얼마나 회전했는지)을 추적하고 가변저항은 절대 위치를 추적합니다
- 최고의 사용: 인코더는 회전량 및 방향 추적에 탁월합니다. 가변저항은 정확한 위치 값이 필요할 때 더 좋습니다
- 현대식 설계: 로터리 인코더는 향상된 기능을 가진 가변저항의 디지털 진화입니다
로터리 인코더 작동 원리

내부 메커니즘:
- 내부의 슬로트 디스크가 핀 C (공통 그라운드)에 연결됩니다
- 핀 A와 B는 손잡이가 회전할 때 공통 그라운드와 접촉합니다
- A와 B 사이의 접촉 순서가 회전 방향을 결정합니다
- 이는 90도 위상이 벗어난 두 펄스 신호 (직교 인코딩)를 생성합니다
회전 방향 감지:
- 시계 방향 회전: 핀 A가 핀 B보다 먼저 접지와 접촉합니다
- 반시계 방향 회전: 핀 B가 핀 A보다 먼저 접지와 접촉합니다
- 핀 A가 변경될 때 핀 B의 상태를 모니터링함으로써 ESP32 C3 Super Mini가 회전 방향을 결정합니다

방향 감지 로직:
핀 A가 LOW에서 HIGH로 변경될 때:
- 핀 B가 HIGH이면: 손잡이가 반시계 방향으로 회전했습니다
- 핀 B가 LOW이면: 손잡이가 시계 방향으로 회전했습니다
※ 주의:
핀 A와 B는 CLK 및 DT 핀에 연결됩니다. 제조사에 따라 순서가 다를 수 있습니다. 아래 코드는 DIYables 로터리 인코더로 테스트되었습니다.
로터리 인코더 프로그래밍 방법
기본 ESP32 C3 Super Mini 인코더 읽기 프로세스:
- ESP32는 CLK 핀의 신호를 지속적으로 읽습니다
- CLK 상태가 LOW에서 HIGH로 변경되면 ESP32는 즉시 DT 핀 상태를 읽습니다
- DT 핀이 HIGH이면: 반시계 방향 회전 감지됨 → 카운터를 1 증가
- DT 핀이 LOW이면: 시계 방향 회전 감지됨 → 카운터를 1 감소
- 이 방법은 방향과 총 회전량을 모두 추적합니다
배선 다이어그램
이 다이어그램은 로터리 인코더를 ESP32 C3 Super Mini 보드에 연결하는 방법을 보여줍니다.

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.
연결 테이블:
| Rotary Encoder Pin | ESP32 C3 Super Mini Pin |
|---|---|
| CLK | D7 |
| DT | D6 |
| SW | D5 |
| VCC | 3.3V |
| GND | GND |
ESP32 C3 Super Mini 코드 – 로터리 인코더
이 ESP32 C3 Super Mini 코드는 기본 로터리 인코더 기능을 보여줍니다:
이 코드가 하는 일:
- 회전 방향 감지 (시계 방향 또는 반시계 방향)
- 감지를 추적하여 회전 클릭 계산
- 시계 방향으로 회전할 때 카운터 증가
- 반시계 방향으로 회전할 때 카운터 감소
- 인코더 손잡이의 버튼 누름 감지
참고: 이 코드는 신뢰할 수 있는 버튼 누름 감지를 위해 버튼 디바운싱을 단순화하는 ezButton 라이브러리를 사용합니다.
빠른 단계
- ESP32 C3 Mini가 처음이신가요? 개발 환경을 설정하려면 먼저 우리의 ESP32 C3 슈퍼 미니 - 시작하기 튜토리얼을 완료합니다.
- 라이브러리 설치: Arduino IDE Library Manager를 통해 ezButton 라이브러리를 추가합니다
- 코드 열기: 위의 코드를 복사하여 Arduino IDE에 붙여넣기
- 업로드: Upload 버튼을 클릭하여 코드를 ESP32 C3 Super Mini에 전송합니다
- 회전 테스트: 인코더 손잡이를 시계 방향으로 몇 번 회전한 다음 반시계 방향으로 회전
- 버튼 테스트: 인코더 손잡이를 아래로 누릅니다
- 결과 확인: Serial Monitor (115200 baud)를 열어 회전 방향 및 카운트를 확인합니다
- 프로 팁: 회전할 때 느끼는 각 "클릭"을 감지라고 부릅니다 - 인코더는 감지당 완전한 펄스 하나를 출력합니다
Serial Monitor 출력:
코드 설명
각 섹션이 어떻게 작동하는지 이해하려면 위의 코드에서 자세한 라인별 주석을 검토합니다.
ESP32 C3 Super Mini 코드 – 인터럽트가 있는 로터리 인코더
이전 코드의 폴링 방법은 지속적으로 핀 상태를 확인하여 ESP32 C3 Super Mini 처리 능력을 낭비하고 느린 코드 실행 중에 회전 카운트를 놓칠 수 있습니다.
로터리 인코더에 인터럽트를 사용하는 이유:
- 지속적인 폴링을 제거 - ESP32 리소스 확보
- 다른 작업 중에도 인코더 펄스를 놓치지 않음
- 실제 프로젝트에 더 효율적이고 신뢰할 수 있음
- ESP32 C3 Super Mini를 다중 작업이 효과적으로 수행되도록 함
아래 코드는 하드웨어 인터럽트를 사용하여 로터리 인코더 방향 및 위치를 효율적으로 읽습니다:
손잡이를 회전할 때 Serial Monitor는 이전 예제와 동일한 회전 정보를 표시하지만 성능이 향상되었습니다.
※ 주의:
- 인터럽트 하나면 충분합니다: 많은 튜토리얼은 하나의 인코더에 두 개의 인터럽트를 사용하지만 이는 리소스를 낭비합니다 - 단일 인터럽트가 완벽하게 작동합니다
- volatile 키워드 사용: 인터럽트에서 사용되는 전역 변수를 항상 volatile로 선언하여 예상치 못한 동작을 방지합니다
- 인터럽트를 단순하게 유지: 인터럽트 함수 내 코드를 최소화합니다 - 인터럽트에서 Serial.print() 또는 Serial.println()을 사용하지 않도록 합니다
- 빠른 실행: 최고의 성능을 위해 인터럽트 코드가 최대한 빠르게 실행되어야 합니다
ESP32 C3 Super Mini 로터리 인코더 응용
로터리 인코더는 ESP32 C3 Super Mini에 대해 많은 흥미로운 프로젝트 가능성을 열어줍니다.
인기 있는 로터리 인코더 프로젝트 아이디어:
- 인코더 회전으로 서보 모터 위치를 정확하게 제어합니다
- 인코더 손잡이를 회전하여 LED 밝기를 부드럽게 조정합니다
- 로봇 공학 프로젝트를 위해 스텝퍼 모터 속도를 조절합니다
- 오디오 시스템을 위한 디지털 볼륨 제어를 만듭니다
- OLED 디스플레이에 대한 메뉴 네비게이션 시스템을 구축합니다
- 로터리 온도 조정을 사용하여 스마트 온도 조절기를 설계합니다
- 로터리 제어 RGB LED 색상 선택기를 만듭니다
비디오 튜토리얼
아래 비디오에서 이 프로젝트의 시각적 안내를 확인하세요.
도전 과제
이 ESP32 C3 Super Mini 로터리 인코더 프로젝트를 향상시켜 기술을 테스트합니다.
다음 도전을 시도하세요:
- 쉬움: 인코더 버튼을 누를 때 깜박이는 LED 추가
- 쉬움: Serial Monitor 대신 7세그먼트 디스플레이에 카운터 값 표시
- 중간: 인코더를 사용하여 서보 모터 각도 제어 (카운터를 0-180도로 매핑)
- 중간: PWM을 사용하여 로터리 제어 LED 밝기 조정기 만들기
- 고급: 인코더 네비게이션 및 선택이 있는 LCD에서 메뉴 시스템 구축