ESP32 로터리 엔코더 LED

이 튜토리얼에서는 로타리 엔코더의 출력 값에 따라 LED의 밝기를 제어하도록 ESP32를 프로그래밍하는 방법을 배울 것입니다.

준비물

1×38-pin ESP32 ESP-WROOM-32 Dev Module - Narrow 쿠팡 | 아마존
1×(또는) 38-pin ESP32 ESP-WROOM-32 Dev Module - Wide 쿠팡 | 아마존
1×(또는) 30-pin ESP32 ESP-WROOM-32 Dev Module - Wide 아마존
1×(또는) ESP32 Uno-form board 아마존
1×(또는) ESP32 S3 Uno-form board 아마존
1×USB 케이블 타입-A to 타입-C (USB-A PC용) 쿠팡 | 아마존
1×USB 케이블 타입-C to 타입-C (USB-C PC용) 아마존
1×로터리 엔코더 (Rotary Encoder) 쿠팡 | 아마존
1×LED 쿠팡 | 아마존
1×LED Module 아마존
1×220Ω Resistor 아마존
1×브레드보드 쿠팡 | 아마존
1×점퍼케이블 쿠팡 | 아마존
1×(추천) ESP32용 스크루 터미널 확장 보드 쿠팡 | 아마존
1×(추천) Breakout Expansion Board for ESP32 쿠팡 | 아마존
1×(추천) ESP32용 전원 분배기 쿠팡 | 아마존
공개: 이 포스팅 에 제공된 일부 링크는 아마존 제휴 링크입니다. 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

LED와 로터리 엔코더에 대하여

LED 및 로터리 엔코더, 그리고 그 핀아웃, 기능, 프로그래밍에 익숙하지 않으신가요? 아래에서 이 주제에 관한 종합적인 튜토리얼을 탐색해보세요:

선연결

ESP32 로터리 엔코더 LED 연결 배선도

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

ESP32 및 다른 구성 요소에 전원을 공급하는 방법에 대해 잘 알지 못하는 경우, 다음 튜토리얼에서 안내를 찾을 수 있습니다: ESP32 전원 공급 방법.

ESP32 코드

/* * 이 ESP32 코드는 newbiely.kr 에서 개발되었습니다 * 이 ESP32 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/esp32/esp32-rotary-encoder-led */ #include <ESP32Servo.h> #define CLK_PIN 25 // ESP32 핀 GPIO25가 로터리 인코더의 CLK 핀에 연결됨 #define DT_PIN 26 // ESP32 핀 GPIO26가 로터리 인코더의 DT 핀에 연결됨 #define SW_PIN 27 // ESP32 핀 GPIO27가 로터리 인코더의 SW 핀에 연결됨 #define LED_PIN 22 // ESP32 핀 GPIO22가 LED에 연결됨 #define DIRECTION_CW 0 // 시계 방향 #define DIRECTION_CCW 1 // 반시계 방향 int counter = 0; int direction = DIRECTION_CW; int CLK_state; int prev_CLK_state; int brightness = 125; // 중간 값 void setup() { Serial.begin(9600); // 인코더 핀을 입력으로 설정 pinMode(CLK_PIN, INPUT); pinMode(DT_PIN, INPUT); // 로터리 인코더의 CLK 핀의 초기 상태를 읽음 prev_CLK_state = digitalRead(CLK_PIN); pinMode(LED_PIN, OUTPUT); } void loop() { // 로터리 인코더의 CLK 핀의 현재 상태를 읽음 CLK_state = digitalRead(CLK_PIN); // CLK의 상태가 변경되면, 펄스 발생 // 이중 계산을 피하기 위해 상승 에지(LOW에서 HIGH로)에만 반응 if (CLK_state != prev_CLK_state && CLK_state == HIGH) { // DT 상태가 HIGH일 경우 // 인코더가 반시계 방향으로 회전 => 카운터 감소 if (digitalRead(DT_PIN) == HIGH) { direction = DIRECTION_CCW; counter--; brightness -= 10; // 이 값을 변경할 수 있음 } else { // 인코더가 시계 방향으로 회전 => 카운터 증가 direction = DIRECTION_CW; counter++; brightness += 10; // 이 값을 변경할 수 있음 } if (brightness < 0) brightness = 0; else if (brightness > 255) brightness = 255; // 카운터에 따라 LED의 밝기를 설정 analogWrite(LED_PIN, brightness); Serial.print("COUNTER: "); Serial.print(counter); Serial.print(" | BRIGHTNESS: "); Serial.println(brightness); } // 마지막 CLK 상태 저장 prev_CLK_state = CLK_state; }

사용 방법

ESP32를 처음 사용하는 경우, ESP32 - 소프트웨어 설치을 참조하세요.

  • 위 이미지와 같이 배선을 하세요.
  • ESP32 보드를 마이크로 USB 케이블을 이용해 PC에 연결하세요.
  • PC에서 Arduino IDE를 엽니다.
  • 올바른 ESP32 보드(예: ESP32 Dev Module)와 COM 포트를 선택하세요.
  • ESP32를 USB 케이블을 통해 PC에 연결하세요.
  • Arduino IDE를 열고, 올바른 보드와 포트를 선택하세요.
  • 위의 코드를 복사하고 Arduino IDE로 엽니다.
  • Arduino IDE에서 Upload 버튼을 클릭하여 ESP32에 코드를 업로드하세요.
  • 시리얼 모니터를 엽니다.
  • 로터리 인코더를 돌립니다.
  • LED의 밝기를 확인하세요.
  • 시리얼 모니터에서 결과를 확인하세요.
Newbiely | Arduino IDE 2.3.8
──
File
Edit
Sketch
Tools
Help
ESP32 Dev Module
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'ESP32 Dev Module' on 'COM15')
New Line
9600 baud
COUNTER: 1 | BRIGHTNESS: 135 COUNTER: 2 | BRIGHTNESS: 145 COUNTER: 3 | BRIGHTNESS: 155 COUNTER: 4 | BRIGHTNESS: 165 COUNTER: 5 | BRIGHTNESS: 175 COUNTER: 6 | BRIGHTNESS: 185 COUNTER: 7 | BRIGHTNESS: 195
Ln 11, Col 1
ESP32 Dev Module on COM15
2

코드 설명

소스 코드의 주석 라인에 있는 줄별 설명을 읽어보세요!

동영상

비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.