
ESP32 OLED Display with Arduino IDE
Pada project ke 5 ini, kita akan membuat Display menggunakan layar OLED SSD1306 0,96 inci dengan ESP32 tentunya dengan Arduino IDE. kita bisa mebuat teks, mengatur font yang berbeda, gambar bitmap dll. sebagai contoh hasil outputnya nanti kita akan menampilkan kata "Hello World!"
Persiapan
Pada panduan ini kita akan menggunakan layar OLED SSD 1306, dengan layar monowarna berukungan 0,96 inch, dan dengan jumlah bit 128x64 px. Perangkat yang akan kita pakai cukup sederhana, hanya ESP32 dan Layar OLED SS1306 dilengkapi dengan Jumper sebagai menghubung pin ESP32 dan Layar OLED Model yang kita gunakan menggunakan protokol komunikasi I2C.
Pin OLED
Karena layar OLED menggunakan protokol komunikasi I2C, pengkabelan menjadi sangat sederhana. Anda dapat menggunakan tabel berikut sebagai referensi.
Skema
Untuk lebih jelasnya hubungan antar pin ESP32 dan Layar OLED dapat kita lihat pada gambar berikut :
Librari
Untuk mengontrol Layar OLED 1306 ini kita membutuhkan setidaknya ada 2 librari, yaitu Adafruit_SSD1306 dan Adafruit_GFX .
Lakukan instalasi kedua librari tersebut jika belum terinstal pada Arduino IDE, Ikuti cara barikut :
1 . Buka Arduino IDE, klik pada Menu Sketch > Include Library > Manage Libraries
2. setelah jendela Manage Libraries terbuka, ketikan pada kolom pencarian "SSD 1306"
3. Selanjutnya kita cari lagi pada kotak pencarian Adafruit GFX
4. Sekarang Arduino IDE sudah siap digunakan
Kode
Langkah selanjutnya kita akan mengkompile Kode Program yang akan kita gunakan. kita buat Sketch baru, kemudian pastekan saja kode program dibawah ini :
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
void setup() {
Serial.begin(115200);
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3D for 128x64
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
delay(2000);
display.clearDisplay();
display.setTextSize(3);
display.setTextColor(WHITE);
display.setCursor(0, 10);
// Display static text
display.println("Hello,");
display.println("World!!");
display.display();
}
void loop() {
}
Display "Hello World!!"
Unggah kode ke papan ESP32 Anda. Jangan lupa untuk memilih board kanan dan port COM di menu Tools.
Anda akan mendapatkan serangkaian animasi berbeda di OLED seperti yang ditunjukkan dalam video pendek berikut.
PWM With Adruino IDE
Selanjutnya kita akan melakukan percobaan cara bagaimana menghasilkan sinyal PWM dengan ESP32 menggunakan Arduino IDE, dimana dengan pengontrol PWM pada ESP32 kita akan menboba meredupkan LED
Peralatan
- ESP32 DOIT DEVKIT V1
- LED 3x5mm
- Resistor 3x330 ohm
- Breadboard
- Kabel Jumper
Pengontrol PWM LED ESP32
Pada ESP32 memiliki 16 saluran yang dapat difungsikanuntuk menghasilkan sinyal PWM dengan konfigurasi dan propertis yang berbeda satu sama lainnya. saluran tersebut dapat anda pilih dari saluran 0 sampai dengan 16. anda bisa mengatur frekuensi ataupun resolusi dari nilai 1 sampai 16 bit dengan kode berikut ini
ledcAttachPin(GPIO, channel)
kita bisa menentukan GPIO mana yang akan kita munculkan sinyalnya. Sedangkan untuk mengontrol kecerahan LED kita dapat menggunakan kode ini :
ledcWrite(channel, dutycycle)
Skema rangkaian
Untuk lebih jelasnya, kita akan coba melakukan percobaan. Kita langsung saja melakukan percobaan dengan menggunakan 3 LED, pada 3 saluran berbeda, yakni GPIO 5, 16 dan 17. Pertama kita rangkai terlebih dahulu komponen yang dibutuhkan seperti yang di tunjukan pada gambar berikut :
dimana, masing masing kaki Anoda pada LED dihubungkan secara seri menggunakan resitor 330 ohm ke pin GPIO5 (D5), GPIO 16(TX2) dan GPIO17(RX17), dan Kaki katoda LED dihubungkan ke Ground (GND).
Upload kode
Setelah itu kita hubungkan ESP32 dengan laptop, jalankan Arduino IDE, buat sketch baru, dan kopi paste kode berikut :
// 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);
}
}
Simulasi
Selanjutnya setelah Kode terupload ke ESP, maka LED akan Meredup secara bergantian sesuai dengan pengaturan sinyal pada masing masing saluran (pin) pada kode yang telah kita buat. hasilnya dapat kita lihat seperti ditunujkan oleh video berikut:
Demikian percobaan pada project kali ini, semoga dapat bermanfaat.