Komponen · 4 mnt baca

Cara Memakai Layar OLED (SSD1306): Teks, Bentuk, dan Grafik dengan Arduino

Bagaimana cara memakai layar OLED I2C 0,96 inci (SSD1306)? Pengkabelan dan alamat I2C (0x3C), library Adafruit SSD1306 dan GFX, menggambar teks, bentuk, nilai sensor, dan bitmap, serta kode ESP32 dan MicroPython di Pico.

Meskipun ukurannya hampir tidak lebih besar dari ujung jari, layar OLED 0,96 inci menampilkan gambar 128×64 piksel yang tajam dan merupakan salah satu layar paling populer untuk proyek Arduino. Berbeda dengan LCD karakter, layar ini bisa menggambar bukan hanya huruf, tetapi juga garis, lingkaran, ikon, grafik, bahkan game kecil. Layar ini ideal untuk jam tangan pintar, stasiun cuaca, remote, dan alat ukur portabel. Hampir semua layar ini memakai chip driver bernama SSD1306 dan cukup dihubungkan dengan dua kabel data (I2C).

Layar OLED I2C 0,96 inci SSD1306
Layar OLED I2C 0,96 inci: 128×64 piksel, driver SSD1306, dan hanya 4 pin (GND, VCC, SCL, SDA).

Apa itu OLED, dan apa bedanya dengan LCD?

Pada layar OLED (Organic Light Emitting Diode), setiap piksel menghasilkan cahayanya sendiri; tidak ada lampu latar. Itulah sebabnya area hitam benar-benar hitam, kontrasnya sangat tinggi, layarnya terlihat tajam dari segala sudut, dan dayanya sangat kecil ketika sebagian besar gambar berwarna gelap. Resolusi 128×64 pikselnya memungkinkan grafik, ikon, dan gambar yang tidak bisa ditampilkan LCD berbasis karakter.

FiturOLED 0,96 inciOLED 0,91 inciLCD 16x2
Resolusi128×64 piksel128×32 piksel16×2 karakter
Grafik dan ikonYaYaTidak (hanya karakter)
Lampu latarTidak perluTidak perluPerlu
KoneksiI2C (ada juga versi SPI)I2C4 kabel dengan modul I2C
Di bawah sinar matahariSulit dibacaSulit dibacaLebih mudah dibaca

Spesifikasi

FiturNilai
Chip driverSSD1306
Layar0,96 inci 128×64 (versi 0,91 inci 128×32)
WarnaMonokrom: putih, biru, atau kuning di atas dan biru di bawah
Catu daya3,3–5 V (ada regulator di board)
ArusSekitar 10–25 mA (tergantung berapa banyak piksel yang menyala)
Alamat I2C0x3C (0x3D di beberapa model)
PinGND, VCC, SCL, SDA

Pengkabelan layar OLED

Pin OLEDArduino UnoESP32Raspberry Pi Pico
GNDGNDGNDGND
VCC5V atau 3.3V3V33V3
SCLA5GPIO 22GP5
SDAA4GPIO 21GP4
Di sebagian modul OLED urutan pinnya VCC, GND, sedangkan di modul lain GND, VCC. Selalu baca label di board sebelum menghubungkannya; membalik daya akan langsung merusak layar.

Pada model dua warna, 16 baris teratas layar menyala kuning dan sisanya biru; warna ini tidak bisa diubah lewat software, jadi bagian atas akan terlihat bagus kalau didesain seperti bilah judul. Kalau kamu tidak yakin alamat layarnya, pakai sketch scanner I2C dari Cara Memakai Layar LCD I2C.

Menginstal library

  1. Buka Library Manager di Arduino IDE lalu cari Adafruit SSD1306.
  2. Ketika ditanya soal dependensi selama instalasi, pilih Install all supaya Adafruit GFX dan Adafruit BusIO ikut terinstal.
  3. Kalau mau, buka File > Examples > Adafruit SSD1306 > ssd1306_128x64_i2c dan coba dengan alamat layar diatur ke 0x3C.

Program pertama: menulis teks di layar

C++ (Arduino IDE)
1#include <Wire.h>
2#include <Adafruit_GFX.h>
3#include <Adafruit_SSD1306.h>
4
5Adafruit_SSD1306 display(128, 64, &Wire, -1);   // genişlik, yükseklik, I2C, reset pini yok / width, height, I2C, no reset pin
6
7void setup() {
8  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {   // I2C adresi / I2C address
9    for (;;);                                         // ekran bulunamadı / display not found
10  }
11  display.clearDisplay();
12  display.setTextColor(SSD1306_WHITE);
13  display.setTextSize(2);                   // 2 kat büyük / double size
14  display.setCursor(0, 0);
15  display.println(F("BlueGrays"));
16  display.setTextSize(1);
17  display.setCursor(0, 24);
18  display.println(F("OLED 128x64 hazir!"));
19  display.display();                        // tamponu ekrana gönder / push the buffer to the screen
20}
21
22void loop() {
23}
Library ini menggambar semuanya lebih dulu ke buffer di memori; untuk melihatnya di layar, kamu perlu memanggil display.display(). Lupa memanggil perintah ini adalah penyebab paling umum “layar kosong”. Di Uno, menaruh teks tetap di dalam F("...") juga menghemat RAM.

Menggambar bentuk: fungsi Adafruit GFX

FungsiYang digambar
drawPixel(x, y, warna)Satu piksel
drawLine(x0, y0, x1, y1, warna)Garis
drawRect / fillRect(x, y, lebar, tinggi, warna)Persegi panjang atau persegi panjang terisi
drawCircle / fillCircle(x, y, jari-jari, warna)Lingkaran atau lingkaran terisi
drawRoundRect(x, y, lebar, tinggi, sudut, warna)Persegi panjang dengan sudut membulat
drawTriangle(x0, y0, x1, y1, x2, y2, warna)Segitiga
drawBitmap(x, y, larik, lebar, tinggi, warna)Gambar siap pakai (bitmap)

Sudut kiri atas layar adalah (0, 0) dan sudut kanan bawah adalah (127, 63). Untuk warna, kamu memakai SSD1306_WHITE (menyala), SSD1306_BLACK (mati), atau SSD1306_INVERSE (membalik).

Menampilkan nilai sensor: termometer langsung

Kekuatan OLED adalah menampilkan hasil pengukuran dengan angka besar dan grafik. Kode di bawah menulis suhu yang dibaca dari DHT11 dengan font besar dan menampilkan kelembapan sebagai grafik batang di bawahnya. Untuk pengkabelan sensornya, lihat Sensor Suhu dan Kelembapan DHT11.

C++ (Arduino IDE)
1#include <Wire.h>
2#include <Adafruit_GFX.h>
3#include <Adafruit_SSD1306.h>
4#include <DHT.h>
5
6Adafruit_SSD1306 display(128, 64, &Wire, -1);
7DHT dht(2, DHT11);
8
9void setup() {
10  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
11  display.setTextColor(SSD1306_WHITE);
12  dht.begin();
13}
14
15void loop() {
16  float t = dht.readTemperature();
17  float h = dht.readHumidity();
18  display.clearDisplay();
19  display.setTextSize(1);
20  display.setCursor(0, 0);
21  display.print(F("Sicaklik / Temp"));
22  display.setTextSize(3);
23  display.setCursor(0, 16);
24  display.print(t, 1);
25  display.print(F("C"));
26  display.drawRect(0, 52, 128, 10, SSD1306_WHITE);                    // nem çubuğu çerçevesi / humidity bar frame
27  display.fillRect(2, 54, (int)(h / 100.0 * 124), 6, SSD1306_WHITE);  // nem oranı kadar dolu / filled by humidity
28  display.display();
29  delay(2000);
30}

Menggambar ikonmu sendiri: bitmap

Untuk menampilkan logo atau ikon, gambarnya diubah menjadi larik byte: setiap bit adalah satu piksel. Alat konversi seperti image2cpp langsung mengubah gambar hitam-putih menjadi larik Arduino. Ikon kecil juga bisa kamu tulis secara manual; larik 8×8 di bawah menggambar hati:

C++ (Arduino IDE)
1const unsigned char PROGMEM heart[] = {
2  0b01100110,
3  0b11111111,
4  0b11111111,
5  0b11111111,
6  0b01111110,
7  0b00111100,
8  0b00011000,
9  0b00000000
10};
11
12// setup() ya da loop() içinde / inside setup() or loop()
13display.drawBitmap(60, 28, heart, 8, 8, SSD1306_WHITE);
14display.display();

OLED dengan ESP32 dan Raspberry Pi Pico

Kode dan library Arduino yang sama berjalan di ESP32; pin I2C-nya adalah GPIO 21 (SDA) dan 22 (SCL). Karena memori ESP32 berlimpah, animasi dan grafik yang diperbarui cepat jauh lebih mulus. Di Pico dengan MicroPython, cukup salin file driver ssd1306.py (dari micropython-lib) ke Pico:

MicroPython
1from machine import Pin, I2C
2import ssd1306                                 # ssd1306.py Pico'da olmalı / must be on the Pico
3
4i2c = I2C(0, sda=Pin(4), scl=Pin(5), freq=400000)
5oled = ssd1306.SSD1306_I2C(128, 64, i2c)       # adres varsayılan 0x3C / default address 0x3C
6
7oled.fill(0)                                   # ekranı temizle / clear the screen
8oled.text("BlueGrays", 0, 0)
9oled.text("Pico + OLED", 0, 16)
10oled.rect(0, 40, 128, 20, 1)                   # çerçeve / frame
11oled.fill_rect(2, 42, 80, 16, 1)               # dolu çubuk / filled bar
12oled.show()                                    # ekrana gönder / push to the screen

Umur layar dan burn-in

Piksel OLED kehilangan kecerahan seiring pemakaian. Kalau gambar yang sama terus berada di layar tanpa berubah selama berbulan-bulan, bayangan samar bisa terbentuk di piksel yang sering menyala. Untuk mencegahnya, matikan layar ketika tidak dipakai (display.ssd1306_command(SSD1306_DISPLAYOFF)), turunkan kecerahannya (display.dim(true)), geser konten statis beberapa piksel sesekali, atau pakai sensor PIR untuk menyalakan layar hanya ketika ada orang di dekatnya.

Ide proyek dengan layar OLED

  • Stasiun cuaca mini: tampilkan suhu, kelembapan, dan tekanan udara dengan ikon.
  • Game saku: mainkan game seperti Pong atau T-Rex runner dengan tombol atau joystick.
  • Penampil cuaca: tampilkan cuaca yang kamu ambil dari internet dengan ESP32, lengkap dengan ikon.
  • Layar sensor parkir: tampilkan jarak yang diukur HC-SR04 sebagai angka dan batang.
  • Plotter sinyal: gambar nilai analogRead sebagai grafik bergulir di layar.
  • Jam meja: satukan waktu dari internet, tanggal, dan cuaca hari ini di satu layar.

Kesalahan umum dan cara mengatasinya

  • Layar tetap kosong: display.display() tidak dipanggil, alamatnya salah (0x3D, bukan 0x3C), atau SDA dan SCL tertukar.
  • “SSD1306 allocation failed”: RAM Uno habis; buffer layar 128×64 memakan 1 KB. Tulis teks dengan F(), pindahkan larik besar ke PROGMEM, atau pakai library U8g2 yang hemat RAM.
  • Gambarnya kacau atau hanya tampil setengah: layar 128×32 dideklarasikan sebagai 128×64 (atau sebaliknya); pakai ukuran yang benar di kode.
  • Gambarnya terbalik: putar 180 derajat dengan display.setRotation(2).
  • Memasang VCC dan GND terbalik: ini merusak layar secara permanen; baca label pin sebelum menghubungkan.
  • Macet secara acak: kabel I2C yang panjang dan longgar; buat kabel tetap pendek dan turunkan kecepatan I2C jika perlu.

Layar OLED adalah cara termurah untuk memberi proyekmu tampilan profesional. Kalau kamu hanya perlu menampilkan angka, display 7-segmen adalah pilihan yang bagus, dan untuk teks yang harus terbaca di bawah sinar matahari, LCD I2C. Di aplikasi BlueGrays kamu akan menemukan game Pong dan T-Rex di OLED, penampil cuaca ESP32, sensor parkir, dan pencatat suhu, lengkap dengan skema rangkaian dan kode.

Pertanyaan umum

Alamat layar OLED-ku 0x3C atau 0x3D?

Sebagian besar modul OLED 128×64 memakai alamat 0x3C; beberapa menjadi 0x3D dengan pengaturan resistor di bagian belakang board. Kalau di bagian belakang tertulis “0x78”, itu notasi 8-bit dan sama dengan 0x3C di kode. Supaya yakin, jalankan sketch scanner I2C.

Apakah layar OLED bisa bekerja di 5 V?

Sebagian besar modul SSD1306 punya regulator di board, jadi bisa diberi daya dari 3,3 V atau 5 V dan dihubungkan langsung ke Arduino Uno. Di ESP32 dan Pico, memberi daya modul dari pin 3V3 juga membuat jalur I2C tetap di 3,3 V.

Kenapa muncul error “SSD1306 allocation failed”?

Library ingin mencadangkan frame buffer 1 KB untuk layar 128×64; kalau RAM 2 KB di Arduino Uno sudah terisi variabel lain, tidak ada tempat untuk buffer itu. Tulis teks tetap dengan makro F(), pindahkan larik besar ke PROGMEM, atau pakai library U8g2 yang menggambar halaman demi halaman.

Bisakah layar OLED menampilkan huruf beraksen atau karakter khusus?

Font bawaan Adafruit GFX tidak berisi huruf seperti ş, ğ, atau é. Library U8g2 bisa menampilkannya dengan dukungan UTF-8 dan font dengan set karakter yang besar; dengan Adafruit GFX kamu perlu membuat font kustom atau menggambar hurufnya sebagai bitmap.

Apakah ada layar OLED berwarna?

Layar SSD1306 monokrom; bahkan pada model dua warna, warnanya tetap. Untuk gambar berwarna, pakai OLED berwarna dengan driver SSD1331 atau SSD1351, atau layar TFT berwarna seperti ST7789 dan ILI9341.

Bisakah aku menghubungkan dua layar OLED ke satu Arduino?

Bisa. Kalau kamu mengubah alamat salah satu layar menjadi 0x3D dengan memindahkan resistor di bagian belakang, keduanya bisa berbagi bus I2C yang sama. Kalau alamatnya tidak bisa diubah, kamu bisa memakai bus I2C kedua di ESP32 dan Pico, atau menambahkan multiplexer I2C seperti TCA9548A.

Lihat semua proyek
Game Bola Pemukul - SSD1306
#86Menengah
Premium

Game Bola Pemukul - SSD1306

Satu bola, dua pemukul, dan kamu: kamu bermain tenis meja, salah satu video game paling awal, di layar OLED kecil. Dua tombol menggerakkan pemukulmu di kanan ke atas dan ke bawah, sementara komputer m

4.5(47)
65
OLED T-Rex Run: Game Dinosaurus Arduino
#87Mahir
Premium

OLED T-Rex Run: Game Dinosaurus Arduino

Game dinosaurus yang muncul ketika internetmu putus, sekarang ada di mejamu: dinosaurus berlari di layar OLED kecil, kaktus datang menghampiri, dan kamu melompat dengan satu tombol. Skormu naik secara

4.7(33)
53
HTTPClient + API Cuaca ESP32 (dengan Layar OLED SSD1306)
#134Mahir
Premium

HTTPClient + API Cuaca ESP32 (dengan Layar OLED SSD1306)

Di proyek ini, kita memakai ESP32 untuk melakukan panggilan REST API ke API cuaca (wttr.in) lewat internet dengan HTTPClient.h. Berbeda dengan versi LCD I2C sebelumnya, di sini kita memakai layar OLED SSD1306 (128×64), yang memungkinkan font besar, ikon vektor, dan tampilan visual yang kaya di satu layar. Tujuh ikon vektor untuk kondisi cuaca (cerah, berawan sebagian, berawan, hujan, salju, badai, berkabut) digambar ketika program berjalan (tanpa file bitmap).

4.3(10)
19
Deep Sleep ESP32: Hemat Baterai (OLED + Penghitung RTC RAM)
#135Mahir
Premium

Deep Sleep ESP32: Hemat Baterai (OLED + Penghitung RTC RAM)

Mode Deep Sleep ESP32 menurunkan konsumsi arus hingga ~10 µA dengan mematikan CPU dan sebagian besar periferal, sehingga sangat penting untuk perangkat IoT bertenaga baterai. Di proyek ini, kita memakai tiga sumber bangun yang berbeda: timer (15 detik), pin eksternal (EXT0, tombol GPIO 33), dan sentuhan (T0/GPIO 4). Variabel yang ditandai RTC_DATA_ATTR dipertahankan selama deep sleep; penghitung boot, penghitung bangun karena timer, dan penghitung bangun karena tombol terus dilacak.

4.3(10)
16
Penghitung Rakaat Salat ESP32 (HC-SR04 + OLED SSD1306 + 2 Tombol)
#136Mahir
Premium

Penghitung Rakaat Salat ESP32 (HC-SR04 + OLED SSD1306 + 2 Tombol)

Kadang lupa sudah berapa rakaat ketika salat? Proyek ini membuat penghitung rakaat yang diletakkan di samping sajadah dan menghitung sujudmu ketika kamu mendekatkan tangan. Sensor ultrasonik HC-SR04 mendeteksi tangan yang mendekat, OLED SSD1306 menampilkan jumlah rakaat, dan dua tombol memilih 2, 3, atau 4 rakaat serta mereset hitungan. State machine dengan jeda debounce 2,5 detik dan algoritma "tangan menjauh" mencegah sujud yang sama terhitung dua kali.

4.8(11)
14
Lampu Pencampur Warna ESP32 (3 Potensiometer + LED RGB + OLED)
#138Mahir
Premium

Lampu Pencampur Warna ESP32 (3 Potensiometer + LED RGB + OLED)

Lampu pencampur warna pintar: campur warna apa pun dengan memutar tiga potensiometer di ESP32! Ketika potensiometer merah, hijau, dan biru diputar, LED RGB katoda bersama berubah warna secara real-time. OLED SSD1306 menampilkan nilai setiap warna dalam rentang 0–255, bar pengisi, dan kode warna web HEX (seperti #FF8040). Studio warna mini yang mengajarkan teori warna RGB, pembacaan ADC, pengaturan kecerahan dengan PWM, dan desain layar I2C sekaligus.

4.7(6)
10
Lampu Pintar ESP32 (PIR + LDR + Relay + OLED)
#141Mahir
Premium

Lampu Pintar ESP32 (PIR + LDR + Relay + OLED)

Ubah lorong, kamar mandi, atau gudangmu menjadi lampu pintar dengan ESP32! Dengan sensor gerak PIR, sensor cahaya LDR, dan modul relay, kita membuat skenario klasik "lampu menyala ketika ada gerakan dalam gelap"; jika sudah terang, gerakan TIDAK menyalakan lampu, jadi energi hemat di siang hari. Lampu menyala 30 detik; jika gerakan berlanjut, timer diulang. OLED SSD1306 menampilkan status dengan font besar (NYALA / SIANG / MENUNGGU) dan hitung mundur.

4.3(6)
11
Pencatat Data Suhu ESP32 (DHT22 + RTC DS1307 + microSD + OLED)
#144Mahir
Premium

Pencatat Data Suhu ESP32 (DHT22 + RTC DS1307 + microSD + OLED)

Buat pencatat suhu bercap waktu dengan ESP32! Baca suhu/kelembapan DHT22 setiap menit, ambil waktu sebenarnya dari RTC DS1307, dan catat ke kartu microSD sebagai CSV. OLED menampilkan suhu langsung (font besar), kelembapan, cap waktu, dan penghitung catatan. File /temp_log.csv bisa dibuka di Excel, Google Sheets, atau Python pandas; cocok untuk rumah kaca, suhu kamar, data laboratorium, penyimpanan makanan, atau sarang lebah.

4.7(7)
12