ESP32 PWM dengan Arduino IDE

tuotorial ini belajar cara menghasilkan sinyal PWM dengan ESP32 menggunakan Arduino IDE. Kami akan menjelaskan dua metode berbeda: menggunakan analogWrite dan menggunakan LEDC API. Sebagai contoh, kita akan membuat rangkaian sederhana untuk meredupkan LED.
Mengonttol nyala LED menggunakan PWM pada ESP32
ESP32 dilengkapi dengan pengontrol LED PWM yang memiliki 6 hingga 16 saluran independen (tergantung pada model ESP32) yang dapat dikonfigurasi untuk menghasilkan sinyal PWM dengan berbagai karakteristik.
Terdapat beberapa fungsi yang dapat digunakan untuk menghasilkan sinyal PWM dan mencapai hasil yang sama. Anda dapat menggunakan fungsi analogWrite (seperti pada papan Arduino) atau menggunakan fungsi LEDC.
analogWrite
Fungsi paling dasar adalah analogWrite, yang menerima dua argumen: GPIO tempat Anda ingin menghasilkan sinyal PWM dan nilai duty cycle (berkisar dari 0 hingga 255).
void analogWrite(uint8_t pin, int value);
sebagi contoh
void analogWrite(2, 180);
Mengatur Frekuensi dan Resolusi
Anda dapat mengatur resolusi dan frekuensi sinyal PWM pada pin yang dipilih menggunakan fungsi analogWriteResolution
dan analogWriteFrequency
.
Untuk mengatur resolusi:
void analogWriteResolution(uint8_t pin, uint8_t resolution);
Untuk mengatur frekuensi:
void analogWriteFrequency(uint8_t pin, uint32_t freq);
Fungsi LEDC
Sebagai alternatif, Anda dapat menggunakan API LEDC Arduino-ESP32. Pertama, Anda perlu mengatur pin LEDC. Anda bisa menggunakan fungsi ledcAttach
atau ledcAttachChannel
.
ledcAttach
Fungsi ledcAttach
digunakan untuk mengatur pin LEDC dengan frekuensi dan resolusi tertentu. Saluran LEDC akan dipilih secara otomatis.
bool ledcAttach(uint8_t pin, uint32_t freq, uint8_t resolution);
Fungsi ini akan mengembalikan nilai true jika konfigurasi berhasil. Jika nilai false dikembalikan, berarti terjadi kesalahan dan saluran LEDC tidak berhasil dikonfigurasi.
ledcAttachChannel
Jika Anda lebih memilih untuk mengatur saluran LEDC secara manual, Anda dapat menggunakan fungsi ledcAttachChannel
sebagai gantinya.
bool ledcAttachChannel(uint8_t pin, uint32_t freq, uint8_t resolution, uint8_t channel);
Fungsi ini akan mengembalikan nilai true jika konfigurasi berhasil. Jika nilai false dikembalikan, berarti terjadi kesalahan dan saluran LEDC tidak berhasil dikonfigurasi.
ledcWrite
Setelah mengatur pin LEDC menggunakan salah satu dari dua fungsi sebelumnya, Anda dapat menggunakan fungsi ledcWrite
untuk mengatur duty cycle sinyal PWM.
void ledcWrite(uint8_t pin, uint32_t duty);
Fungsi ini akan mengembalikan nilai true jika pengaturan duty cycle berhasil. Jika nilai false dikembalikan, berarti terjadi kesalahan dan duty cycle tidak berhasil diatur.
Untuk informasi lebih lanjut dan semua fungsi dari pengontrol PWM LEDC, silakan cek dokumentasi resmi.
Meredupkan LED dengan ESP32
Untuk menunjukkan cara menghasilkan sinyal PWM dengan ESP32, kami akan membuat dua contoh sederhana yang meredupkan kecerahan LED (meningkatkan dan menurunkan kecerahan seiring waktu). Kami akan memberikan contoh menggunakan analogWrite
dan yang lainnya menggunakan fungsi LEDC.
Skematik Sambungkan LED ke ESP32 Anda seperti yang ditunjukkan dalam diagram skematik berikut. LED harus dihubungkan ke GPIO 16.
Contoh PWM ESP32 menggunakan analogWrite – Kode
Buka Arduino IDE Anda dan salin kode berikut. Contoh ini akan meningkatkan dan menurunkan kecerahan LED seiring waktu menggunakan fungsi analogWrite
.
const int ledPin = 16; // 16 corresponds to GPIO 16
void setup() {
// set the LED as an output
pinMode(ledPin, OUTPUT);
}
void loop(){
// increase the LED brightness
for(int dutyCycle = 0; dutyCycle <= 255; dutyCycle++){
// changing the LED brightness with PWM
analogWrite(ledPin, dutyCycle);
delay(15);
}
// decrease the LED brightness
for(int dutyCycle = 255; dutyCycle >= 0; dutyCycle--){
// changing the LED brightness with PWM
analogWrite(ledPin, dutyCycle);
delay(15);
}
}
const int ledPin = 16; // 16 corresponds to GPIO 16
Di dalam fungsi setup()
, Anda perlu mengonfigurasi LED sebagai output menggunakan fungsi pinMode()
.
pinMode(ledPin, OUTPUT);
Di dalam fungsi loop()
, Anda dapat mengubah siklus tugas (duty cycle) antara 0 dan 255 untuk meningkatkan dan mengurangi kecerahan LED. Dengan cara ini, Anda mengatur berapa banyak waktu LED dalam keadaan menyala pada setiap siklus PWM, yang pada gilirannya mengontrol kecerahan LED.
// increase the LED brightness
for(int dutyCycle = 0; dutyCycle <= 255; dutyCycle++){
// changing the LED brightness with PWM
analogWrite(ledPin, dutyCycle);
delay(15);
}
Perhatikan penggunaan fungsi analogWrite()
untuk mengatur siklus tugas (duty cycle). Anda hanya perlu memberikan dua argumen: pin LED dan nilai siklus tugas yang diinginkan.
analogWrite(ledPin, dutyCycle);
Akhirnya, kita mengubah siklus tugas antara 255 dan 0 untuk mengurangi kecerahan LED.
// decrease the LED brightness
for(int dutyCycle = 255; dutyCycle >= 0; dutyCycle--){
// changing the LED brightness with PWM
analogWrite(ledPin, dutyCycle);
delay(15);
}
Uji Coba Contoh
Unggah kode ke ESP32 Anda. Pastikan Anda telah memilih board dan port COM yang benar. Periksa rangkaian Anda. LED seharusnya dapat meredup dan menyala dengan kecerahan yang meningkat dan menurun seiring waktu.