You are here

ESP32: PWMを利用したLEDの明るさ制御

ESP32のPWM機能を利用して、LEDの明るさを制御してみましょう。
使用するボードはESP32-DEVC-HOMEです。
http://www.microfan.jp/esp32/esp32-devc-home

現時点では、ESP32用のArduinoでは、analogWrite()関数がないため、LEDの明るさを調整しようと思っても、手軽な手段がなく途方に暮れてしまいますね。

ここでは、現状ではanalogWrite()に代わって使えるLEDC Driver機能を利用した例を示します。
https://github.com/espressif/arduino-esp32/blob/master/cores/esp32/esp32...

ESP32のLEDC Driver機能で利用できるPWMを使って、LEDにかける電圧のデューティー比を変えます。

#define LED1 16
#define LED2 17

#define SW1 0
#define SW2 32
#define SW3 33
#define SW4 34
#define SW5 35

#define LEDC_CHANNEL_0     0
#define LEDC_CHANNEL_1     1

#define LEDC_TIMER_8_BIT  8

#define LEDC_BASE_FREQ     5000

void setup()
{
  pinMode(SW1, INPUT) ;
  pinMode(SW2, INPUT) ;
  pinMode(SW3, INPUT) ;
  pinMode(SW4, INPUT) ;
  
  // LEDのPWM制御の初期化
  ledcSetup(LEDC_CHANNEL_0, LEDC_BASE_FREQ, LEDC_TIMER_8_BIT) ; // 8ビット精度で制御
  ledcAttachPin(LED1, LEDC_CHANNEL_0) ; // CH0をLED1に
  ledcSetup(LEDC_CHANNEL_1, LEDC_BASE_FREQ, LEDC_TIMER_8_BIT) ; // 8ビット精度で制御
  ledcAttachPin(LED2, LEDC_CHANNEL_1) ; // CH1をLED2に
}

int led1 = 250 ;
int led2 = 250 ;

void loop()
{
  if (!digitalRead(SW1))
    led1 -= 5 ;
  if (!digitalRead(SW2))
    led1 += 5 ;
  if (!digitalRead(SW3))
    led2 -= 5 ;
  if (!digitalRead(SW4))
    led2 += 5 ;

  if (led1 >= 250)
    led1 = 250 ;
  if (led1 < 0)
    led1 = 0 ;
  if (led2 >= 250)
    led2 = 250 ;
  if (led2 < 0)
    led2 = 0 ;
    
  ledcWrite(LEDC_CHANNEL_0, led1) ;
  ledcWrite(LEDC_CHANNEL_1, led2) ;

  delay(100) ;
}

SW1を押すとLED1が暗くなり、SW2を押すとLED1が明るくなります。
SW3を押すとLED2が暗くなり、SW4を押すとLED2が明るくなります。


使用パーツ


開発ソフト: 
チップファミリー: 
MCUチップ: