Tutorial Penggunaan OLED dengan Arduino Uno, Arduino Mega, dan ESP32

1. Pendahuluan

OLED (Organic Light Emitting Diode) adalah display modern yang sangat populer digunakan bersama board mikrokontroler seperti Arduino Uno, Arduino Mega, dan ESP32. Dibandingkan LCD karakter 16×2, OLED menawarkan tampilan lebih tajam, kontras tinggi, fleksibel menampilkan teks maupun grafik, serta konsumsi daya yang rendah.

OLED yang umum dipakai oleh maker adalah modul 0.96 inch I2C dengan driver SSD1306. Modul ini praktis karena hanya memerlukan dua pin data (SDA & SCL), sehingga sangat menghemat penggunaan pin pada board mikrokontroler.


2. Spesifikasi OLED 0.96″ SSD1306

  • Resolusi: 128 x 64 piksel
  • Ukuran: 0.96 inch (tersedia juga 1.3 inch)
  • Tegangan kerja: 3.3V – 5V (khusus ESP32 wajib 3.3V)
  • Interface: I2C (alamat default: 0x3C atau 0x3D)
  • Warna tampilan: Monokrom (putih, biru, atau kuning-biru)

3. Perbedaan Pinout di Setiap Board

🔹 Arduino Uno

  • SDA → A4
  • SCL → A5
  • Catatan: Arduino Uno berbasis ATmega328, memiliki RAM terbatas (2KB). Jadi tampilan animasi kompleks bisa terasa lambat.

🔹 Arduino Mega

  • SDA → Pin 20
  • SCL → Pin 21
  • Catatan: Dengan RAM lebih besar (8KB), Mega lebih stabil menangani buffer OLED. Cocok untuk project dengan banyak sensor + tampilan grafik.

🔹 ESP32

  • SDA → Pin 21 (default)
  • SCL → Pin 22 (default)
  • Catatan: Pin I2C di ESP32 bisa diubah lewat software (Wire.begin(SDA, SCL)), jadi lebih fleksibel. ESP32 jauh lebih cepat menampilkan grafik karena clock speed tinggi dan RAM besar.

4. Tips Khusus Penggunaan OLED

  1. Alamat I2C berbeda → gunakan I2C Scanner jika OLED tidak muncul. Umumnya 0x3C, ada juga yang 0x3D.
  2. Hati-hati tegangan → meskipun banyak modul mendukung 5V, beberapa hanya stabil di 3.3V. Untuk ESP32 jangan hubungkan ke 5V.
  3. Library yang tepat → gunakan Adafruit SSD1306 dan Adafruit GFX. Pastikan versi terbaru agar kompatibel dengan semua board.
  4. RAM terbatas di Arduino Uno → hindari penggunaan bitmap terlalu besar.
  5. Efek burn-in → jika tampilan statis terlalu lama, bisa terjadi shadow. Gunakan fungsi clearDisplay() atau tampilkan data bergerak.

5. Alat & Bahan

  • Board Arduino Uno / Arduino Mega / ESP32
  • Modul OLED SSD1306 I2C
  • Kabel jumper
  • Breadboard (opsional)
  • Kabel USB

6. Instalasi Library

  • Buka Arduino IDE → Sketch → Include Library → Manage Libraries.
  • Cari dan install:
    • Adafruit SSD1306
    • Adafruit GFX Library

7. Contoh Program menggunakan arduino uno


Wiring (Arduino UNO ↔ OLED I2C)

  • VCC → 5V
  • GND → GND
  • SDA → SDA
  • SCL → SCL
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_ADDR 0x3C

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

void setup() {
  Serial.begin(9600);

  if(!display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR)) {
    Serial.println(F("OLED gagal diinisialisasi!"));
    for(;;);
  }

  display.clearDisplay();

  // Tampilkan teks di tengah
  display.setTextSize(1);
  display.setTextColor(SSD1306_WHITE);
  display.setCursor(0, 28);  
  display.println(F("temins menjual perlengkapan arduino"));
  display.display();

  delay(1000);

  // Mulai scroll ke kiri, full layar (baris 0x00 - 0x0F)
  display.startscrollleft(0x00, 0x0F);

  // Kalau mau scroll kanan ganti:
  // display.startscrollright(0x00, 0x0F);
}

void loop() {
  // kosong, scroll otomatis jalan di hardware
}

Contoh Program menggunakan ESP32

Wiring ESP32 ↔ OLED SSD1306 (I2C)

  • VCC → 3.3V
  • GND → GND
  • SDA → GPIO21 (default I2C SDA di ESP32)
  • SCL → GPIO22 (default I2C SCL di ESP32)
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_ADDR 0x3C

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

void setup() {
  Serial.begin(115200);

  // Inisialisasi I2C (ESP32 default SDA=21, SCL=22)
  Wire.begin(21, 22);

  if(!display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR)) {
    Serial.println(F("OLED gagal diinisialisasi!"));
    for(;;);
  }

  display.clearDisplay();

  // Teks
  display.setTextSize(1);
  display.setTextColor(SSD1306_WHITE);
  display.setCursor(0, 28);  
  display.println(F("temins menjual perlengkapan arduino"));
  display.display();

  delay(1000);

  // Scroll kiri otomatis
  display.startscrollleft(0x00, 0x0F);
}

void loop() {
  // kosong, scroll jalan otomatis
}

Contoh Program menggunakan arduino mega

Pin I2C Arduino Mega 2560

  • SDA → pin 20(atau bisa pakai pin SDA)
  • SCL → pin 21 (atau bisa pakai pin SCL)
  • VCC → 5V
  • GND → GND

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_ADDR 0x3C

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

void setup() {
  Serial.begin(9600);

  if(!display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR)) {
    Serial.println(F("OLED gagal diinisialisasi!"));
    for(;;);
  }

  display.clearDisplay();

  // Tampilkan teks
  display.setTextSize(1);
  display.setTextColor(SSD1306_WHITE);
  display.setCursor(0, 28);
  display.println(F("temins menjual perlengkapan arduino"));
  display.display();

  delay(1000);

  // Scroll kiri otomatis
  display.startscrollleft(0x00, 0x0F);
}

void loop() {
  // Tidak perlu apa2, scroll otomatis
}

8. Hasil yang Diharapkan

  • OLED menyala dengan tampilan teks atau grafik.
  • Jika wiring benar dan library terinstal, data tampil sesuai program.
  • Di Arduino Uno tampilan mungkin lebih lambat, di Mega lebih stabil, sedangkan di ESP32 lebih cepat dan halus.

9. Kesimpulan

OLED adalah display kecil dengan kualitas tinggi yang sangat cocok untuk project mikrokontroler. Perbedaan utama terletak pada pin SDA/SCL di setiap board:

  • Uno: A4 & A5
  • Mega: 20 & 21
  • ESP32: 21 & 22 (bisa diubah)

Dengan memahami perbedaan ini, kamu bisa menghubungkan OLED ke berbagai board tanpa kebingungan lagi. OLED sangat ideal untuk membuat jam digital, dashboard IoT, monitoring sensor, maupun tampilan status robot.

Leave a Reply

Your email address will not be published. Required fields are marked *