LED Fade dengan PWM ESP32
Mengubah kecerahan LED secara halus dari 0 ke maksimum, dan dari maksimum ke 0. Kita mengendalikan PWM dengan analogWrite() seperti di Arduino; sintaks yang sama bekerja tanpa masalah di ESP32 Arduino Core 3.0+. Definisi pin + pinMode + analogWrite sudah cukup.

Video
Skema rangkaian

Kode sumber
1// ─────────────────────────────────────────
2// BlueGrays · bluegrays.com
3// LED Fade dengan PWM ESP32
4// ─────────────────────────────────────────
5// Memakai PWM analogWrite() untuk menaikkan kecerahan LED perlahan dari 0
6// ke 255, lalu menurunkannya perlahan kembali ke 0.
7//
8// Pin:
9// GPIO 5 -> LED biru (dengan resistor 330 ohm)
10// GND -> Kaki pendek LED (katode)
11
12const int LED_PIN = 5; // Output PWM
13
14void setup() {
15 pinMode(LED_PIN, OUTPUT);
16}
17
18void loop() {
19 // Menerang perlahan
20 for (int brightness = 0; brightness <= 255; brightness++) {
21 analogWrite(LED_PIN, brightness);
22 delay(8); // 8 ms per langkah, ~2 s total
23 }
24 // Meredup perlahan
25 for (int brightness = 255; brightness >= 0; brightness--) {
26 analogWrite(LED_PIN, brightness);
27 delay(8);
28 }
29}
30
FAQ
Apakah `analogWrite` benar-benar bekerja di ESP32?
Ya, analogWrite() didukung di ESP32 Arduino Core 3.x maupun beberapa versi 2.x, dan memakai hardware LEDC. Cek dukungannya untuk versi core yang kamu pakai; ledcSetup dan ledcAttachPin tidak diperlukan di semua versi 2.x.
Pin mana yang mendukung PWM?
Hampir semua pin GPIO ESP32 yang bisa berfungsi sebagai output bisa menghasilkan PWM. Pin GPIO 34–39 tidak bisa menghasilkan PWM karena hanya input.
Perubahan kecerahannya tidak terlihat linear; kenapa?
Mata merasakan kecerahan secara logaritmik; perubahan pada nilai rendah lebih terasa. Jika kamu mengubah nilainya dengan tabel gamma, transisinya terlihat lebih alami.
Bisakah aku mengubah frekuensi PWM?
Bisa, kamu bisa mengatur frekuensi dan resolusi dengan analogWriteFrequency() atau fungsi LEDC. Frekuensi tinggi, seperti 5 kHz, sepenuhnya menghilangkan kedipan di LED.
