OLED Ekran (SSD1306) Kullanımı: Arduino ile Yazı, Şekil ve Grafik
0,96 inç I2C OLED ekran (SSD1306) nasıl kullanılır? Bağlantı ve I2C adresi (0x3C), Adafruit SSD1306 ve GFX kütüphaneleri, yazı, şekil, sensör değeri ve bitmap çizme, ESP32 ve Pico MicroPython kodu.
0,96 inçlik OLED ekran, parmak ucu kadar küçük olmasına rağmen 128×64 piksellik keskin bir görüntü sunan, Arduino projelerinin en sevilen ekranlarından biridir. Karakter LCD'lerin aksine yalnızca harf değil; çizgi, daire, simge, grafik ve hatta küçük oyunlar çizebilirsin. Akıllı saatler, hava istasyonları, kumandalar ve taşınabilir ölçüm cihazları için idealdir. Bu ekranların neredeyse hepsi SSD1306 adlı sürücü yongayla çalışır ve yalnızca iki veri kablosuyla (I2C) bağlanır.

OLED nedir, LCD'den farkı ne?
OLED (Organic Light Emitting Diode) ekranlarda her piksel kendi ışığını üretir; arkada bir aydınlatma yoktur. Bu yüzden siyah alanlar gerçekten siyahtır, kontrast çok yüksektir, ekran her açıdan net görünür ve görüntünün çoğu karanlıkken çok az enerji harcar. 128×64 piksel, karakter tabanlı LCD'lerin yapamadığı grafikleri, ikonları ve çizimleri mümkün kılar.
| Özellik | 0,96" OLED | 0,91" OLED | 16x2 LCD |
|---|---|---|---|
| Çözünürlük | 128×64 piksel | 128×32 piksel | 16×2 karakter |
| Grafik ve simge | Var | Var | Yok (yalnızca karakter) |
| Arka ışık | Gerekmez | Gerekmez | Gerekir |
| Bağlantı | I2C (SPI'lı sürümleri de var) | I2C | I2C modülüyle 4 kablo |
| Güneş altında | Zor okunur | Zor okunur | Daha iyi okunur |
Teknik özellikler
| Özellik | Değer |
|---|---|
| Sürücü yonga | SSD1306 |
| Ekran | 0,96" 128×64 (0,91" sürümü 128×32) |
| Renk | Tek renk: beyaz, mavi ya da üst kısmı sarı, alt kısmı mavi |
| Besleme | 3,3–5 V (kart üzerinde regülatör vardır) |
| Akım | Yaklaşık 10–25 mA (yanan piksel sayısına göre) |
| I2C adresi | 0x3C (bazı modellerde 0x3D) |
| Pinler | GND, VCC, SCL, SDA |
OLED ekran bağlantısı
| OLED pini | Arduino Uno | ESP32 | Raspberry Pi Pico |
|---|---|---|---|
| GND | GND | GND | GND |
| VCC | 5V ya da 3.3V | 3V3 | 3V3 |
| SCL | A5 | GPIO 22 | GP5 |
| SDA | A4 | GPIO 21 | GP4 |
Çift renkli modellerde ekranın üstteki 16 satırı sarı, kalanı mavi yanar; bu renkler yazılımla değiştirilemez, bu yüzden üst kısmı başlık çubuğu gibi tasarlamak iyi görünür. Ekranın adresinden emin değilsen I2C LCD Ekran Kullanımı yazısındaki I2C tarayıcı kodunu kullanabilirsin.
Kütüphaneleri kurmak
- Arduino IDE'de Kütüphane Yöneticisi'ni aç ve Adafruit SSD1306 ara.
- Kütüphaneyi kurarken bağımlılıkları sorduğunda Install all seç; böylece Adafruit GFX ve Adafruit BusIO da kurulur.
- İstersen Dosya > Örnekler > Adafruit SSD1306 > ssd1306_128x64_i2c örneğini aç ve ekran adresini 0x3C yaparak dene.
İlk program: ekrana yazı yazmak
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}Şekil çizmek: Adafruit GFX fonksiyonları
| Fonksiyon | Ne çizer? |
|---|---|
| drawPixel(x, y, renk) | Tek bir piksel |
| drawLine(x0, y0, x1, y1, renk) | Çizgi |
| drawRect / fillRect(x, y, genişlik, yükseklik, renk) | Dikdörtgen ya da dolu dikdörtgen |
| drawCircle / fillCircle(x, y, yarıçap, renk) | Daire ya da dolu daire |
| drawRoundRect(x, y, genişlik, yükseklik, köşe, renk) | Köşeleri yuvarlatılmış dikdörtgen |
| drawTriangle(x0, y0, x1, y1, x2, y2, renk) | Üçgen |
| drawBitmap(x, y, dizi, genişlik, yükseklik, renk) | Hazır bir resim (bitmap) |
Ekranın sol üst köşesi (0, 0), sağ alt köşesi ise (127, 63) noktasıdır. Renk olarak SSD1306_WHITE (yak), SSD1306_BLACK (söndür) ya da SSD1306_INVERSE (tersine çevir) kullanılır.
Sensör değeri göstermek: canlı termometre
OLED'in gücü, ölçümleri büyük rakamlar ve grafiklerle göstermesidir. Aşağıdaki kod DHT11'den okunan sıcaklığı büyük punto ile yazar, nemi de altta bir çubuk grafikle gösterir. Sensörün bağlantısı için DHT11 Sıcaklık ve Nem Sensörü yazısına bakabilirsin.
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}Kendi simgeni çizmek: bitmap
Logo ya da simge göstermek için resmi bir bayt dizisine çevirirsin: her bit bir pikseldir. image2cpp gibi çevrim araçları siyah-beyaz bir resmi doğrudan Arduino dizisine dönüştürür. Küçük simgeleri elle de yazabilirsin; aşağıdaki 8×8'lik dizi bir kalp çizer:
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();ESP32 ve Raspberry Pi Pico ile OLED
ESP32'de aynı Arduino kodu ve kütüphaneler çalışır; I2C pinleri GPIO 21 (SDA) ve 22 (SCL)'dir. ESP32'nin belleği bol olduğu için animasyonlar ve hızlı yenilenen grafikler çok daha akıcıdır. Pico'da MicroPython için ssd1306.py sürücü dosyasını (micropython-lib) Pico'ya kopyalaman yeterlidir:
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 screenEkran ömrü ve iz kalması (burn-in)
OLED piksellerinin parlaklığı kullandıkça azalır. Aynı görüntü aylarca hiç değişmeden ekranda kalırsa sık yanan piksellerde soluk bir iz oluşabilir. Bunu önlemek için kullanılmadığında ekranı kapat (display.ssd1306_command(SSD1306_DISPLAYOFF)), parlaklığı düşür (display.dim(true)), sabit içeriği ara sıra birkaç piksel kaydır ya da bir PIR sensörüyle ekranı yalnızca yanında biri varken aç.
OLED ekran ile proje fikirleri
- Mini hava istasyonu: Sıcaklık, nem ve basıncı simgelerle göster.
- Cep oyunları: Pong ya da T-Rex koşucusu gibi oyunları butonlar ya da bir joystick ile oyna.
- Hava durumu ekranı: ESP32 ile internetten aldığın hava durumunu ikonlarla göster.
- Park sensörü göstergesi: HC-SR04 ile ölçülen mesafeyi rakam ve çubuk olarak göster.
- Sinyal çizici: analogRead değerlerini ekranda kayan bir grafik olarak çiz.
- Masa saati: İnternet saatini, tarihi ve günün hava durumunu tek ekranda topla.
Sık yapılan hatalar ve çözümleri
- Ekran bomboş: display.display() çağrılmamış, adres yanlış (0x3C yerine 0x3D) ya da SDA ile SCL yer değiştirmiş.
- "SSD1306 allocation failed": Uno'nun RAM'i yetmiyor; 128×64 ekranın tamponu 1 KB yer kaplar. Metinleri F() ile yaz, büyük dizileri PROGMEM'e taşı ya da az RAM harcayan U8g2 kütüphanesini kullan.
- Görüntü bozuk ya da yarım: 128×32 bir ekran 128×64 olarak tanımlanmış (ya da tersi); kodda doğru boyutu yaz.
- Görüntü ters duruyor: display.setRotation(2) ile 180 derece çevir.
- VCC ve GND'yi ters bağlamak: Ekranı kalıcı olarak bozar; bağlamadan önce pin yazılarını oku.
- Rastgele donmalar: Uzun ve gevşek I2C kabloları; kabloları kısa tut ve gerekirse I2C hızını düşür.
OLED ekran, projene profesyonel bir görünüm kazandırmanın en ucuz yoludur. Yalnızca sayı göstereceksen 7 segment display, güneş altında okunacak metinler için I2C LCD de iyi seçeneklerdir. BlueGrays uygulamasında OLED ile Pong ve T-Rex oyunları, ESP32 hava durumu, park sensörü ve sıcaklık kaydedici projelerini devre şemaları ve kodlarıyla bulabilirsin.
Sıkça sorulan sorular
OLED ekranımın adresi 0x3C mi 0x3D mi?
128×64 OLED modüllerin çoğu 0x3C adresini kullanır; bazıları kartın arkasındaki bir direnç ayarıyla 0x3D olur. Kartın arkasında "0x78" yazıyorsa bu 8 bitlik gösterimdir ve kodda 0x3C'ye karşılık gelir. Emin olmak için I2C tarayıcı kodunu çalıştır.
OLED ekran 5 V ile çalışır mı?
Çoğu SSD1306 modülünün üzerinde regülatör olduğu için 3,3 V ya da 5 V ile beslenebilir ve Arduino Uno'ya doğrudan bağlanabilir. ESP32 ve Pico'da modülü 3V3 pininden beslemek, I2C hatlarının da 3,3 V'ta kalmasını sağlar.
"SSD1306 allocation failed" hatası neden çıkar?
Kütüphane 128×64 ekran için 1 KB'lık bir görüntü tamponu ayırmak ister; Arduino Uno'nun toplam 2 KB RAM'i başka değişkenlerle dolmuşsa bu yer bulunamaz. Sabit metinleri F() makrosuyla yaz, büyük dizileri PROGMEM'e taşı ya da sayfa sayfa çizen U8g2 kütüphanesini kullan.
OLED ekranda Türkçe karakter yazılabilir mi?
Adafruit GFX'in varsayılan yazı tipinde ş, ğ ve ı gibi harfler yoktur. U8g2 kütüphanesi UTF-8 desteği ve geniş karakter setli yazı tipleriyle bu harfleri gösterebilir; Adafruit GFX ile ise özel bir yazı tipi oluşturman ya da harfleri bitmap olarak çizmen gerekir.
Renkli OLED ekran var mı?
SSD1306 ekranlar tek renklidir; çift renkli modellerde bile renkler sabittir. Renkli görüntü için SSD1331 ya da SSD1351 sürücülü renkli OLED'ler veya ST7789 ve ILI9341 gibi renkli TFT ekranlar kullanılır.
Aynı Arduino'ya iki OLED ekran bağlanabilir mi?
Evet. Bir ekranın adresini kartın arkasındaki direnci taşıyarak 0x3D yaparsan iki ekran aynı I2C hattını paylaşabilir. Adres değiştirilemiyorsa ESP32 ve Pico'da ikinci bir I2C hattı kullanabilir ya da TCA9548A gibi bir I2C çoklayıcı ekleyebilirsin.
Bu yazıdan sonra yapabileceğin projeler
Tüm projeleri gör
Pong Oyunu - SSD1306
Arduino ve SSD1306 OLED ekran kullanılarak hazırlanmış; topun hareketlerini anlık olarak takip edip yörüngesine göre tepki veren otonom yapay zeka (CPU) rakibiyle donatılmış ve ses efektleriyle zengin

OLED T-Rex Run: Arduino Dinazor Oyunu 🦖
Efsanevi "İnternet Yok" dinozor oyununu donanıma taşıdık! Arduino, OLED ekran (SH1106/SSD1306) ve TM1637 skor göstergesi kullanarak geliştirdiğimiz bu projeyle retro oyun heyecanını fiziksel bir mini

ESP32 HTTPClient + Hava Durumu API (SSD1306 OLED Ekranlı)
Bu projede ESP32 ile internet üzerinden hava durumu API'sine (wttr.in) `HTTPClient.h` kullanarak REST API çağrısı yapıyoruz. Bir önceki I2C LCD versiyonundan farklı olarak burada SSD1306 OLED (128×64) ekran kullanıyoruz — büyük font, vector ikonlar ve tek ekranda zengin görsel sunum mümkün oluyor. Hava durumu için 7 farklı vector ikon (güneşli, parçalı bulutlu, bulutlu, yağmurlu, karlı, fırtınalı, sisli) runtime'da çiziliyor (bitmap dosyası gerektirmez). Sıcaklık 3x büyük fontla ortada, hava dur

ESP32 Deep Sleep — Pil Tasarrufu (OLED + RTC RAM Sayaç)
ESP32'nin Deep Sleep modu, CPU ve çoğu çevre birimini kapatarak akım tüketimini ~10µA seviyesine düşürür ve pille çalışan IoT cihazları için kritik öneme sahiptir. Bu projede üç farklı uyandırma kaynağını kullanıyoruz: zamanlayıcı (timer, 15sn), harici pin (EXT0 — buton GPIO 33) ve touch (T0/GPIO 4). `RTC_DATA_ATTR` ile işaretlenen değişkenler deep sleep boyunca korunur — boot sayacı, timer wake sayacı ve buton wake sayacı kalıcı olarak izlenir. SSD1306 OLED ekranda her uyanışta wake reason, say

ESP32 Namaz Rekat Sayacı (HC-SR04 + SSD1306 OLED + 2 Buton)
Namaz kılarken kaç rekat olduğunuzu bazen unutuyor musunuz? Bu proje, seccadenin yanına konulan ve elinizi yaklaştırdığınızda secdeleri sayan bir rekat sayacı yapıyor. HC-SR04 ultrasonik mesafe sensörü el yaklaşımını algılar, SSD1306 OLED ekran rekat sayısını gösterir, iki buton ile 2/3/4 rekat seçimi ve sıfırlama yapabilirsiniz. Akıllı state machine ile yanlış tetiklenmeleri engelleyen 2.5 saniye debounce ve "el ayrılma" algoritması var — aynı secde iki kez sayılmaz. Bu proje BlueGrays topluluğ

ESP32 Renk Mikser Lambası (3 Pot + RGB LED + OLED)
ESP32 ile 3 potansiyometre çevirerek istediğin rengi karıştıran akıllı bir renk mikser lambası! Kırmızı, yeşil ve mavi potansiyometreleri çevirdikçe ortak katot RGB LED anlık olarak renk değiştirir. SSD1306 OLED ekranda her renk için 0-255 aralığında değer, görsel dolgu barları ve HEX web renk kodu (#FF8040 gibi) canlı olarak gösterilir. Mini bir profesyonel renk stüdyosu — RGB renk teorisi, ADC analog okuma, PWM ile parlaklık kontrolü ve I2C ekran tasarımını tek projede öğretir. Grafik tasarımc

ESP32 Akıllı Aydınlatma (PIR + LDR + Röle + OLED)
ESP32, PIR hareket sensörü, LDR ışık sensörü ve röle modülü ile evinin koridorunu, tuvaletini veya kilerini akıllı aydınlatmaya dönüştürüyoruz. Klasik "karanlıkta hareket algılanınca ışık yansın" senaryosunu inşa ediyoruz — ortam aydınlıksa hareket olsa bile ışık yanmaz, böylece gündüz gereksiz yere yanmaz ve enerji tasarrufu sağlanır. Işık 30 saniye yanık kalır; hareket devam ederse timer otomatik sıfırlanır ve süre uzar. SSD1306 OLED ekranda büyük fontlarla durum (AÇIK / GÜNDÜZ / BEKLE), geri

ESP32 Sıcaklık Loglayıcı (DHT22 + DS1307 RTC + microSD + OLED)
ESP32 ile zamanlı sıcaklık ve nem kayıt sistemi kur! Bu projede DHT22 sensörü ile her 10 saniyede sıcaklık/nem okuyup DS1307 RTC modülünden aldığın gerçek zaman etiketiyle microSD karta CSV formatında kaydediyoruz. OLED ekranda büyük font ile son sıcaklık değeri, nem yüzdesi, timestamp ve toplam kayıt sayısı canlı gösterilir. SD kart üzerindeki `/temp_log.csv` dosyası Excel/Google Sheets/Python pandas ile açılıp analiz edilebilir — sera monitörü, ev/oda sıcaklık takibi, laboratuvar veri toplama,
Diğer yazılar
Küçük ama keskin OLED ekranı Arduino'ya bağlamayı, yazı ve şekil çizmeyi, sensör değerlerini çubuk grafikle göstermeyi, kendi simgelerini eklemeyi ve ekranın ömrünü uzatmayı öğren.

