KUNJUNGI KAMI

KUNJUNGI KITA DI BUKALAPAK, TOKOPEDIA DAN SHOPEE

Menghasilkan Sinyal PWM dengan ESP32 Menggunakan Arduino IDE

Dalam tutorial ini, kami akan menunjukkan kepada Anda cara menghasilkan sinyal PWM dengan ESP32 menggunakan Arduino IDE. Sebagai contoh, kami akan membangun rangkaian sederhana yang memudarkan LED menggunakan pengendali PWM LED di ESP32. Kami juga akan menunjukkan kepada Anda bagaimana Anda dapat mendapatkan sinyal PWM yang sama pada pin GPIO yang berbeda pada saat yang bersamaan.


Sebelum melanjutkan dengan tutorial ini, Anda harus sudah menginstal add-on ESP32 di Arduino IDE Anda. Ikuti salah satu tutorial berikut untuk menginstal ESP32 di Arduino IDE, jika Anda belum melakukannya.


Bagian yang Diperlukan

Untuk mengikuti tutorial ini, Anda memerlukan komponen-komponen berikut:

Anda dapat menggunakan tautan-tautan sebelumnya atau pergi langsung ke tokopedia.com/cncstorebandung untuk menemukan semua komponen yang Anda butuhkan untuk proyek Anda dengan harga terbaik!


Kontroler PWM LED ESP32

ESP32 memiliki kontroler PWM LED dengan 16 saluran independen yang dapat dikonfigurasi untuk menghasilkan sinyal PWM dengan properti yang berbeda.

Berikut adalah langkah-langkah yang harus Anda ikuti untuk memudarkan LED dengan PWM menggunakan Arduino IDE:

1. Pertama, Anda perlu memilih saluran PWM. Terdapat 16 saluran dari 0 hingga 15.

2. Kemudian, Anda perlu mengatur frekuensi sinyal PWM. Untuk LED, frekuensi 5000 Hz sudah cukup baik digunakan.

3. Anda juga perlu mengatur resolusi siklus tugas sinyal: Anda memiliki resolusi dari 1 hingga 16 bit. Kami akan menggunakan resolusi 8 bit, yang berarti Anda dapat mengendalikan kecerahan LED menggunakan nilai dari 0 hingga 255.

4. Selanjutnya, Anda perlu menentukan pada pin GPIO atau beberapa GPIO mana sinyal akan muncul. Untuk itu, Anda akan menggunakan fungsi berikut:

ledcAttachPin(GPIO, channel)
5.Terakhir, untuk mengontrol kecerahan LED menggunakan PWM, Anda menggunakan fungsi berikut:
ledcWrite(channel, dutycycle)
Fungsi ini menerima sebagai argumen saluran yang menghasilkan sinyal PWM dan siklus tugas.

Pengendalian Kecerahan LED
Mari kita lihat contoh sederhana untuk melihat bagaimana menggunakan pengontrol PWM LED ESP32 menggunakan Arduino IDE.

Skema
Sambungkan sebuah LED ke ESP32 Anda seperti pada diagram skema berikut. LED harus terhubung ke GPIO 16.



Catatan: Anda dapat menggunakan pin apa pun yang Anda inginkan, selama itu dapat berfungsi sebagai output. Semua pin yang dapat berfungsi sebagai output dapat digunakan sebagai pin PWM. Untuk informasi lebih lanjut tentang GPIO ESP32, baca: Referensi Pinout ESP32: Pin GPIO mana yang sebaiknya Anda gunakan?

Kode

Buka Arduino IDE Anda dan salin kode berikut.
 // the number of the LED pin
const int ledPin = 16;  // 16 corresponds to GPIO16

// setting PWM properties
const int freq = 5000;
const int ledChannel = 0;
const int resolution = 8;
 
void setup(){
  // configure LED PWM functionalitites
  ledcSetup(ledChannel, freq, resolution);
  
  // attach the channel to the GPIO to be controlled
  ledcAttachPin(ledPin, ledChannel);
}
 
void loop(){
  // increase the LED brightness
  for(int dutyCycle = 0; dutyCycle <= 255; dutyCycle++){   
    // changing the LED brightness with PWM
    ledcWrite(ledChannel, dutyCycle);
    delay(15);
  }

  // decrease the LED brightness
  for(int dutyCycle = 255; dutyCycle >= 0; dutyCycle--){
    // changing the LED brightness with PWM
    ledcWrite(ledChannel, dutyCycle);   
    delay(15);
  }
}
Anda memulai dengan mendefinisikan pin tempat LED terpasang. Dalam hal ini, LED terpasang pada GPIO 16.
const int ledPin = 16;  // 16 corresponds to GPIO16
Di dalam fungsi setup(), Anda perlu mengonfigurasi PWM LED dengan properti yang telah Anda tentukan sebelumnya menggunakan fungsi ledcSetup() yang menerima sebagai argumen ledChannel, frekuensi, dan resolusi, seperti berikut:
ledcSetup(ledChannel, freq, resolution);
Selanjutnya, Anda perlu memilih GPIO tempat Anda akan mendapatkan sinyal tersebut. Gunakan fungsi ledcAttachPin() yang menerima sebagai argumen GPIO tempat Anda ingin mendapatkan sinyal, dan saluran yang menghasilkan sinyal. Dalam contoh ini, kami akan mendapatkan sinyal pada GPIO ledPin, yang sesuai dengan GPIO 16. Saluran yang menghasilkan sinyal adalah ledChannel, yang sesuai dengan saluran 0.
 ledcAttachPin(ledPin, ledChannel);
Di dalam loop, Anda akan mengubah siklus tugas antara 0 dan 255 untuk meningkatkan kecerahan LED.
 for(int dutyCycle = 0; dutyCycle <= 255; dutyCycle++){
    // changing the LED brightness with PWM
    ledcWrite(ledChannel, dutyCycle);
    delay(15); 
}
Untuk mengatur kecerahan LED, Anda hanya perlu menggunakan fungsi ledcWrite() yang menerima sebagai argumen saluran yang menghasilkan sinyal, dan siklus tugas.
 ledcWrite(ledChannel, dutyCycle);
}
Karena kita menggunakan resolusi 8 bit, siklus tugas akan dikendalikan menggunakan nilai dari 0 hingga 255. Perhatikan bahwa dalam fungsi ledcWrite(), kita menggunakan saluran yang menghasilkan sinyal, dan bukan GPIO.

Pengujian Contoh

Unggah kode ke ESP32 Anda. Pastikan Anda telah memilih papan dan port COM yang benar. Lihat sirkuit Anda. Anda seharusnya memiliki LED pengatur cahaya yang meningkat dan mengurangi kecerahan.


Mendapatkan Sinyal yang Sama pada GPIO yang Berbeda

Anda dapat mendapatkan sinyal yang sama dari saluran yang sama pada berbagai GPIO yang berbeda. Untuk mencapainya, Anda hanya perlu menghubungkan GPIO tersebut ke saluran yang sama pada fungsi setup().

Mari modifikasi contoh sebelumnya untuk meredupkan 3 LED menggunakan sinyal PWM yang sama dari saluran yang sama.

Skema

Tambahkan dua LED tambahan ke sirkuit Anda dengan mengikuti diagram skematik berikut:




(Diagram skematik ini menggunakan versi modul ESP32 DEVKIT V1 dengan 30 GPIO - jika Anda menggunakan model lain, harap periksa pinout untuk papan yang Anda gunakan.)

Kode

Salin kode berikut ke Arduino IDE Anda.
 // the number of the LED pin
const int ledPin = 16;  // 16 corresponds to GPIO16
const int ledPin2 = 17; // 17 corresponds to GPIO17
const int ledPin3 = 5;  // 5 corresponds to GPIO5

// setting PWM properties
const int freq = 5000;
const int ledChannel = 0;
const int resolution = 8;
 
void setup(){
  // configure LED PWM functionalitites
  ledcSetup(ledChannel, freq, resolution);
  
  // attach the channel to the GPIO to be controlled
  ledcAttachPin(ledPin, ledChannel);
  ledcAttachPin(ledPin2, ledChannel);
  ledcAttachPin(ledPin3, ledChannel);
}
 
void loop(){
  // increase the LED brightness
  for(int dutyCycle = 0; dutyCycle <= 255; dutyCycle++){   
    // changing the LED brightness with PWM
    ledcWrite(ledChannel, dutyCycle);
    delay(15);
  }

  // decrease the LED brightness
  for(int dutyCycle = 255; dutyCycle >= 0; dutyCycle--){
    // changing the LED brightness with PWM
    ledcWrite(ledChannel, dutyCycle);   
    delay(15);
  }
}
}
Ini adalah kode yang sama dengan yang sebelumnya tetapi dengan beberapa modifikasi. Kami telah mendefinisikan dua variabel tambahan untuk dua LED baru, yang mengacu pada GPIO 17 dan GPIO 5.
const int ledPin2 = 17; // 17 corresponds to GPIO17 
const int ledPin3 = 5;  // 5 corresponds to GPIO5
Kemudian, dalam fungsi setup(), kami telah menambahkan baris-baris berikut untuk mengaitkan kedua GPIO dengan saluran 0. Ini berarti bahwa kita akan mendapatkan sinyal yang sama, yang dihasilkan pada saluran 0, pada kedua GPIO tersebut. 

Menguji Proyek

Unggah sketsa yang baru ke ESP32 Anda. Pastikan Anda telah memilih papan dan port COM yang benar. Sekarang, perhatikan sirkuit Anda:



Semua GPIO mengeluarkan sinyal PWM yang sama. Jadi, ketiga LED meningkat dan berkurang kecerahannya secara bersamaan, menghasilkan efek yang disinkronkan.



Penutup

Secara ringkas, dalam pos ini Anda telah mempelajari cara menggunakan pengontrol PWM LED ESP32 dengan Arduino IDE untuk mengatur kecerahan LED. Konsep yang dipelajari dapat digunakan untuk mengendalikan output lain dengan PWM dengan mengatur properti sinyal yang tepat.