Arduino IDE를 사용하여 ESP32로 PWM 신호를 생성하는 방법을 알아보겠습니다.
두 가지 다른 방법을 설명하겠습니다.
1. analogWrite 사용하기
2. LEDC API 사용하기
해당 글은 아두이노IDE에서 보드매니저 ESP32 3.X이상과 호환 됩니다.
필요한 부품
- ESP32 DevKit
- LED
- 220옴 저항
- 브래드보드
- 점퍼 와이어
ESP32 LED PWM
ESP32에는 6~16개의 독립된 채널(ESP32 모델에 따라 다름)을 갖춘 LED PWM 컨트롤러가 있어 다양한 속성의 PWM 신호를 생성하도록 구성할 수 있습니다.
1. analogWrite
analogWrite는 PWM 신호를 생성할 GPIO와 듀티 사이클 값(0~255)을 인수로 받습니다.
void analogWrite(uint8_t pin, int value);
void analogWrite(2, 180);
주파수 및 해상도 설정
선택한 핀의 PWM 신호의 해상도와 주파수를 다음을 사용하여 설정할 수 있습니다.
해상도 설정하기
void analogWriteResolution(uint8_t pin, uint8_t resolution);
주파수 설정하기
void analogWriteFrequency(uint8_t pin, uint32_t freq);
2.LEDC 기능
LEDC API를 사용할 수 있습니다. 먼저 LEDC 핀을 설정해야 합니다.
ledcAttach
주파수와 해상도로 LEDC 핀을 설정합니다. LEDC 채널은 자동으로 선택됩니다.
bool ledcAttach(uint8_t pin, uint32_t freq, uint8_t resolution);
이 함수는 다음을 반환합니다. TRUE 성공, FALSE가 반환되면 오류가 발생하고 LEDC 채널이 구성되지 않았습니다.
ledcAttachChannel
LEDC 채널을 수동으로 설정하려면 다음을 사용할 수 있습니다
bool ledcAttachChannel(uint8_t pin, uint32_t freq, uint8_t resolution, uint8_t channel);
이 함수는 다음을 반환합니다. TRUE 성공, FALSE가 반환되면 오류가 발생하고 LEDC 채널이 구성되지 않았습니다.
ledcWrite
이전 두 기능 중 하나를 사용하여 LEDC 핀을 설정한 후 다음을 사용합니다. PWM 신호의 듀티 사이클을 설정하는 기능입니다.
void ledcWrite(uint8_t pin, uint32_t duty);
회로
analogWrite를 사용한 ESP32 PWM 예제
이 예제는 시간이 지남에 따라서 LED 밝기가 증가 및 감소 합니다.
const int LEDPIN = 16; // 16 corresponds to GPIO 16
void setup() {
pinMode(LEDPIN, OUTPUT); //led 핀 설정
}
void loop(){
//pwm 증가
for(int pwm = 0; pwm <= 255; pwm++){
analogWrite(LEDPIN, pwm);
delay(10);
}
// pwm 감소
for(int pwm = 255; pwm >= 0; pwm--){
analogWrite(LEDPIN, pwm);
delay(10);
}
}
LEDC API를 사용한 ESP32 PWM 예제
const int LEDPIN = 16; // 16 corresponds to GPIO16
// setting PWM properties
const int freq = 5000; //주파수
const int resolution = 8; //분해능
void setup(){
ledcAttach(LEDPIN, freq, resolution); // configure LED PWM
// 채널을 수동으로 설정하기 위해서는 아래의 함수를 사용합니다.
//ledcAttachChannel(LEDPIN, freq, resolution, 0);
}
void loop(){
// LED 밝기 증가
for(int pwm = 0; pwm <= 255; pwm++){
ledcWrite(LEDPIN, pwm);
delay(10);
}
// LED 밝기 감소
for(int dutyCycle = 255; dutyCycle >= 0; dutyCycle--){
ledcWrite(LEDPIN, pwm);
delay(10);
}
}
이 글에서는 Arduino IDE와 함께 ESP32의 LED PWM 컨트롤러를 사용하여 LED를 어둡게 하는 방법을 배웠습니다
'ESP32 > ESP32' 카테고리의 다른 글
ESP32 Timer 구현하기 - millis()함수 사용하기 (4) | 2024.10.16 |
---|---|
ESP32 ADC - 아날로그 값 읽기 (0) | 2024.10.16 |
ESP32 버튼,LED 제어하기 (0) | 2024.10.15 |
ESP32 PinMap (0) | 2024.09.26 |
아두이노 IDE에 ESP32 사용환경 설치하기 (0) | 2021.07.19 |