본문 바로가기
ESP32/ESP32

아두이노에서 ESP32 PWM 알아보기

by 빈이쥬 2024. 9. 27.

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