#110Новичок

Плавное затухание светодиода с PWM на ESP32

Плавное изменение яркости светодиода от 0 до максимума и от максимума до 0. PWM управляется через analogWrite(), как в Arduino, — тот же синтаксис без проблем работает в ESP32 Arduino Core 3.0+. Достаточно определения пина, pinMode и analogWrite.

4.8(36)
54 собрано
Плавное затухание светодиода с PWM на ESP32
Вместо того чтобы резко включать и выключать свет, ты медленно разжигаешь и гасишь его, как утреннее солнце. Светодиод, подключённый к ESP32, примерно за две секунды разгорается от темноты до полной яркости, затем так же мягко гаснет, и это «дышащее» свечение не прекращается. Базовая техника ночников и декоративной подсветки.

Видео

Схема

Плавное затухание светодиода с PWM на ESP32 - Circuit

Исходный код

C++ (Arduino IDE)
1// ─────────────────────────────────────────
2//   BlueGrays · bluegrays.com
3//   Плавное затухание светодиода с PWM на ESP32
4// ─────────────────────────────────────────
5// С помощью PWM через analogWrite() плавно поднимает яркость светодиода от
6// 0 до 255, затем плавно опускает обратно до 0.
7//
8// Пины:
9//   GPIO 5 -> Синий светодиод (с резистором 330 ohm)
10//   GND    -> Короткая ножка светодиода (катод)
11
12const int LED_PIN = 5;   // Выход PWM
13
14void setup() {
15  pinMode(LED_PIN, OUTPUT);
16}
17
18void loop() {
19  // Разгорание
20  for (int brightness = 0; brightness <= 255; brightness++) {
21    analogWrite(LED_PIN, brightness);
22    delay(8);   // 8 мс на шаг, всего ~2 с
23  }
24  // Затухание
25  for (int brightness = 255; brightness >= 0; brightness--) {
26    analogWrite(LED_PIN, brightness);
27    delay(8);
28  }
29}
30

Частые вопросы

Действительно ли `analogWrite` работает на ESP32?

Да, analogWrite() поддерживается в ESP32 Arduino Core 3.x, а также в некоторых версиях 2.x и использует аппаратный блок LEDC. Проверь поддержку в своей версии ядра; ledcSetup и ledcAttachPin нужны не во всех версиях 2.x.

Какие пины поддерживают PWM?

Почти все пины GPIO ESP32, которые могут быть выходами, умеют генерировать PWM. GPIO 34–39 работают только на вход, поэтому PWM на них нет.

Яркость меняется нелинейно — почему?

Глаз воспринимает яркость логарифмически; изменения на малых значениях заметнее. Если преобразовать значения по гамма-таблице, переход будет выглядеть естественнее.

Можно ли изменить частоту PWM?

Да, частоту и разрешение можно настроить функциями analogWriteFrequency() или LEDC. Высокая частота, например 5 kHz, полностью убирает мерцание светодиода.