Dalam artikel kali ini, kita akan belajar mengenai cara untuk men-generate sinyal PWM dengan ESP32 menggunakan Arduino IDE. Contohnya, kita akan membuat rangkaian sederhana untuk menyalakan LED menggunakan LED PWN controller dari ESP32. Kita juga akan belajar cara untuk mendapatkan sinyal PWM yang sama dengan GPIO yang berbeda dalam waktu yang bersamaan.

Untuk lanjut dengan artikel ini, kamu harus menginstall ESP32 add-on di Arduino IDE. Jika kamu belum, kamu bisa mengikuti artikel di bawah ini.
- Installing the ESP32 Board in Arduino IDE (Windows instructions)
- Installing the ESP32 Board in Arduino IDE (Mac and Linux instructions)
Kami juga merekomendasikan untuk melihat beberapa artikel lain di bawah ini:
Part yang dibutuhkan
Untuk mengikuti artikel ini, kamu membutuhkan alat alat di bawah ini :
- ESP32 DOIT DEVKIT V1 Board – read best ESP32 development boards
- 3x 5mm LED
- 3x 330 Ohm resistor
- Breadboard
- Jumper wires
Kamu dapat membeli alat tersebut di cnc store bandung yahhhh…
ESP32 LED PWM Controller
ESP32 memiliki LED PWM controller dengan 16 independen Channel yang dapat dikonfigurasikan untuk menghasilkan sinyal PWM.
Berikut adalah step step untuk menyalakan LED dengan PWM menggunakan Arduino IDE :
1. Pertama, kamu perlu untuk memilih channel PWM. Terdapat 16 channel dari 0 sampai 15.
2. Lalu, kamu perlu untuk men-set sinyal frekuensi PWM. Untuk LED, gunakan frekuensi 5000 Hz.
3. kamu juga perlu untuk men-set sinyal resolusi duty cycle : kamu bisa gunakan resolusi dari 1 ke 16 bit. Kita akan menggunakan resolusi 8-bit, artinya kamu akan dapat mengontrol kecerahan LED menggunakan nilai 0 – 255.
4. lalu, kamu perlu untuk menentukan GPIO atau signal GPIO yang akan ditampilkan. Untuk hal tersebut kamu dapat menggunakan fungsi ini :
ledcAttachPin(GPIO, channel)
fungsi ini menerima dua argument. Pertama adalah GPIO yang akan menampilkan sinyal output, dan yang kedua adalah channel yang akan menghasilkan sinyal nya.
5. Finally, untuk mengontol kecerahan LED menggunakan PWM, kamu bisa menggunakan fungsi di bawah ini:
ledcWrite(channel, dutycycle)
fungsi ini diterima sebagai argument dari channel yang menghasilkan sinyal PWM, dan duty cycle.
Dimming LED
Mari kita lihat contoh bagaimana cara menggunakan ESP32 LED PWM Controller menggunakan Arduino IDE
Skematik
Hubungkan LED ke ESP32 sesuai dengan diagram skematik di bawah ini. LED dihubungkan ke GPIO 16.

(Skematic ini menggunakan Versi ESP32 DevKit V1 Modul dengan 30 GPIO, jika kamu menggunakan model yang lain, silahkan cek pinout board nya.)
Note: kamu bisa gunakan pin manapun sesuai yang kamu inginkan selama itu berfungsi sebagai output. Semua pin output dapat digunakan sebagai pin PWM. Untuk informasi lebih lanjut mengenai ESP32 GPIO, silahkan baca artikel kami tentang ESP32 pinout.
Code
Buka Arduino IDE dan copy kode di bawah ini.
// nilai dari pin LED const int ledPin = 16; // 16 mengacu ke GPIO16 // setting PWM properties const int freq = 5000; const int ledChannel = 0; const int resolution = 8; void setup(){ // Konfigurasi fungsi LED PWM ledcSetup(ledChannel, freq, resolution); // hubungkan channel ke GPIO untuk bisa di kontrol ledcAttachPin(ledPin, ledChannel); } void loop(){ // menaikkan nilai brightness dari LED for(int dutyCycle = 0; dutyCycle <= 255; dutyCycle++){ // ubah LED brightness dengan PWM ledcWrite(ledChannel, dutyCycle); delay(15); } // menurunkan LED brightness for(int dutyCycle = 255; dutyCycle >= 0; dutyCycle--){ // ubah LED brightness dengan PWM ledcWrite(ledChannel, dutyCycle); delay(15); } }
Kita mulai dengan menentukan Pin yang dipasangi LED. Dalam kasus ini, LED terpasang di GPIO 16.
const int ledPin = 16; // 16 mengacu ke GPIO16
Lalu, kita set properties dari sinyal PWM. Kita tentukan frekuensi di 5000Hz, pilih channel 0 untuk meng-generate sinyal dan set resolusi ke 8 bits. Kita dapat men set nilai nilai di atas sesuai dengan yang kita inginkan.
const int freq = 5000; const int ledChannel = 0; const int resolution = 8;
dalam setup(), kita perlu untuk menentukan PWM LED dengan properties yang telah kita tentukan sebelumnya menggunakan fungsi ledcSetup() yang diterima sebagai argument, ledChannel, frequency dan resolusi menggunakan fungsi
ledcSetup(ledChannel, freq, resolution);
Selanjutnya kita perlu untuk memilih GPIO yang akan menerima sinyal. Untuk hal tersebut kita akan menggunakan fungsi ledcAttachPin() yang berfungsi sebagai argument dari GPIO yang akan menerima dan menghasilkan sinyal. Di contoh ini, kita akan menerima sinyal di ledPin GPIO, yang mengacu ke GPIO 16. Channel yang menghasilkan channel yaitu ledChannel, yang mengacu ke channel 0.
ledcAttachPin(ledPin, ledChannel);
di loop, kita akan melakukan variasi dari duty cycle antara 0 dan 255 untuk menaikkan kecerahan LED.
for(int dutyCycle = 0; dutyCycle <= 255; dutyCycle++){ // changing the LED brightness with PWM ledcWrite(ledChannel, dutyCycle); delay(15); }
Untuk menurunkan kecerahan LED, kita bisa set antara 255 ke 0.
for(int dutyCycle = 255; dutyCycle >= 0; dutyCycle--){ // changing the LED brightness with PWM ledcWrite(ledChannel, dutyCycle); delay(15); }
Untuk men set kecerahan dari LED, kita juga bisa menggunakan fungsi ledcWrite() yang diterima sebagai argument channel yang menghasilkan sinyal dan duty cycle.
ledcWrite(ledChannel, dutyCycle);
karena kita menggunakan resolusi 8-bit, duty cycle dapat di control menggunakan nilai dari 0 sampai 255. Hal yang perlu diperhatikan di fungsi ledcWrite() , kita gunakan channel yang menghasilkan sinyal dan bukan GPIO.
Testing the Example
Upload kode nya ke ESP32. Pastikan kita pilih board dan COM yang sesuai. Pastikan kembali rangkaian kita memiliki LED yang bisa di set kecerahannya.

Cara mendapatkan sinyal yang sama dengan menggunakan GPIO berbeda
Kita bisa mendapatkan sinyal yang sama dari channel yang sama dengan GPIO yang berbeda.
Untuk melakukannya, kita hanya butuh untuk menghubungkan GPIO itu ke channel yang sama dengan fungsi setup().
Mari kita melakukan modifikasi contoh sebelumnya menggunakan 3 LED dim menggunakan sinyal PWM yang sama dari channel yang sama.
Skematik
Tambahkan LED ke rangkaian dengan menggunakan skematik diagram di bawah ini.

(skematik ini menggunakan versi ESP32 DEVKIT V1- jika kamu menggunakan versi yang lain, tolong cek dulu pinout board nya yah..)
Kode Program
Copy kode di bawah ini ke Arduino .
// nomor pin LED yang digunakan const int ledPin = 16; // 16 mengacu ke GPIO16 const int ledPin2 = 17; // 17 mengacu ke GPIO17 const int ledPin3 = 5; // 5 mengacu ke GPIO5 // setting properties PWM const int freq = 5000; const int ledChannel = 0; const int resolution = 8; void setup(){ // konfigurasi LED PWM ledcSetup(ledChannel, freq, resolution); // hubungkan channel ke GPIO untuk di kontrol ledcAttachPin(ledPin, ledChannel); ledcAttachPin(ledPin2, ledChannel); ledcAttachPin(ledPin3, ledChannel); } void loop(){ // menaikan kecerahan LED for(int dutyCycle = 0; dutyCycle <= 255; dutyCycle++){ // merubah kecerahan LED dengan PWM ledcWrite(ledChannel, dutyCycle); delay(15); } // menurunkan kecerahan LED for(int dutyCycle = 255; dutyCycle >= 0; dutyCycle--){ // merubah kecerahan LED dengan PWM ledcWrite(ledChannel, dutyCycle); delay(15); } }
Kode diatas merupakan kode yang sama dengan yang sebelumnya, tapi hanya ditambahkan beberapa modifikasi. Kita tentukan 2 variabel untuk 2 LED yang baru yang mengacu ke GPIO 17 dan GPIO 5.
const int ledPin2 = 17; // 17 mengacu ke GPIO17
const int ledPin3 = 5; // 5 mengacu ke GPIO5
lalu, dalam setup(), kita tambahkan beberapa baris untuk meng-assign kedua GPIO to channel 0. Itu artinya kita akan mendapat sinyal yang sama, yang akan dihasilkan di channel 0, di kedua GPIO tersebut
const int ledPin3 = 5; // 5 mengacu ke GPIO5
ledcAttachPin(ledPin3, ledChannel);
Testing the Project
Upload sketch yang baru ke ESP32. Pastikan kamu memilih Board dan COM port yang sesuai dengan yang kamu gunakan. Sekarang lihat di rangkaian :

Semua GPIO mengeluarkan sinyal PWM yang sama. Jadi ketiga LED akan menaikkan dan menurunkan kecerahan nya secara bersamaan, menghasilkan efek sinkronisasi.

Kesimpulan
Kesimpulan nya, dari artikel ini kita belajar cara menggunakan LED PWM controller dari ESP32 dengan menggunakan Arduino IDE untuk merubah kecerahan LED. Konsep tersebut dapat juga digunakan untuk mengontrol perangkat lain dengan menggunakan settingan yagn tepat dari PWM.
Bisa di sertakan Sket skema!?