ESP32 with OLED Display and PWM

Kirana Shely Sefiana
4 min readMar 9, 2022

--

Hello, Readers! Welcome back for the fifth project for ESP32. Di artikel kali ini saya akan mencoba display eksternal dengan OLED dan melakukan pengendalian PWM (pulse width modulation) pada microcontroller kesayangan kita ini.

OLED Display

Display sangat berguna untuk menampilkan output seperti teks, bentuk, atau bitmap images. Display ada berbagai macam jenis, ada LCD, TFT, atau OLED yang akan dijelaskan pada artikel ini.

Prerequisites

Untuk melakukan percobaan ini dibutuhkan komponen berikut,

  1. ESP32
  2. Micro USB cable
  3. Breadboard
  4. Male-to-Male jumper
  5. OLED (pada percobaan ini ukuran 128x64 pixels dengan 4 pin)

Pastikan pin OLED sudah terpasang dan tersolder. Kebetulan OLED yang saya beli dari toko belum tersolder jadi harus saya solder kan sendiri.

Jika sudah mulailah untuk merangkai komponennya. Berikut ini adalah skema rangkaian untuk percobaan ini.

Skema rangkaian untuk OLED

Setelah komponen dirangkai, bukalah Arduino IDE untuk membuat kode programnya. Namun, sebelum itu kita perlu men-install library baru agar project ini bisa berjalan. Pilihlah menu Sketch>Include Library>Manage Library. Kemudian pada kolom search ketik lah SSD1306 dan install Adafruit SSD1306. Selain itu anda juga harus men-install library GFX.

Testing OLED Display

Dari library yang sudah di-install, akan ada contoh-contoh kode program di Arudino. Pililah menu File>Examples>Adafruit SSD1306> ssd1306_128x64_i2c. Jika kode program sudah muncul, sambungkan ESP32 ke laptop/pc lalu compile dan upload kode. Jangan lupa untuk menekan tombol Boot pada ESP32.

Jika sudah seharusnya display OLED akan mulai menampilkan gambar-gambar. Jika belum mungkin anda bisa mengubah kode bagian OLED Reset dan if(!display begin..) menjadi seperti di bawah ini,

#define OLED_RESET -1
..
..
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {..
..

Seharusnya dengan kode ini OLED bisa berhasil menyala. Bentuk-bentuk display untuk OLED ini ada berbagai macam. Saya juga mencoba menuliskan text, gambar, bitmap images, text yang bergerak, dll. Anda bisa melihat refensi tersebut di RandomNerdTutorial yang saya cantumkan di akhir artikel ini. Berikut hasil percobaan OLED Display saya kali ini.

Rangkaian OLED yang berhasil menyala

PWM Controlling

ESP32 ternyata mempunyai LED PWM controller dengan 16 independent channel yang bisa mengkonfigurasi sinyal PWM.

Prerequisites

Untuk percobaan ini komponen yang dibutuhkan adalah,

  1. ESP32
  2. Micro USB cable
  3. Breadboard
  4. Male-to-Male jumper
  5. LED
  6. Resistor 330 ohm

Untuk percobaan PWM ini saya akan melakukan dua percobaan. Pertama dengan satu lampu LED dan yang kedua akan digunakan tiga buah LED. Skema rangkaian untuk percobaan pertama adalah sebagai berikut,

Skema rangkaian percobaan PWM (sumber : randomnerdtutorial)

rangkailah semua komponen menjadi seperti ini. Kemudian pada Arduino IDE masukanlah kode program yang tertera pada referensi. Berikut ini saya cantumkan kode program untuk percobaan ini.

// 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);
}
}

Jika sudah, seperti biasa compile dan upload kode ini ke ESP32. Jangan lupa untuk menekan tombol Boot. Seharusnya LED akan menyala terang-redup-terang-redup.

Untuk percobaan kedua, kita akan menambah komponen lampu dan resistor untuk mencoba PWM dengan GPIO lebih dari satu. Berikut skema rangkaian untuk percobaan ini,

Skema rangkaian percobaan PWM lebih dari satu GPIO (sumber : randomnerdtutorial)

Kemudian untuk kode program nya hampir sama. Kita hanya perlu menambah keterangan pin GPIO tambahan. Kode program untuk percobaan ini tertera di referensi atau anda bisa melihatnya di bawah ini.

// 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);
}
}

Lalu seperti biasa compile dan upload kode ini ke ESP32. Jangan lupa untuk menekan tombol Boot pada ESP32. Jika sudah seharusnya ketiga LED akan menyala terang-redup-terang seperti percobaan sebelumnya. Berikut hasil percobaan PWM.

Sekian untuk project kali ini. Semoga bermanfaat!

References :

--

--

Kirana Shely Sefiana
0 Followers

Information System & Technology Student