Arduino ile SSD1306 OLED Ekran Kullanımı (I2C) — Devre ve Örnek Kod

Koza Akademi
Koza Akademi
4 dk okuma
28 izlenme
Arduino ile SSD1306 OLED Ekran Kullanımı (I2C) — Devre ve Örnek Kod

Arduino ile SSD1306 OLED Ekran Kullanımı (I2C) — Devre ve Örnek Kod

Küçük projelerde seri monitöre bağlı kalmadan veri göstermek büyük rahatlık. 0.96” SSD1306 OLED ekranlar hem ucuz hem de çok az pinle çalıştığı için Arduino projelerinde sık tercih ediliyor. Bu yazıda, I2C üzerinden SSD1306 OLED’i bağlayıp kütüphane ile yazı/şekil çizdiren örnek bir devre ve kod paylaşacağım.

Kullanılan Malzemeler

  • Arduino Uno / Nano (benzerleri de olur)

  • 0.96” OLED ekran (SSD1306, I2C, genelde 128x64)

  • Breadboard + jumper kablo

  • (Opsiyonel) 1 adet buton (ekran mod değişimi için)


1) OLED SSD1306 I2C Pinleri ve Devre Bağlantısı

SSD1306 I2C OLED’lerde genellikle 4 pin olur:

  • VCC: Besleme (5V veya 3.3V; modüle göre değişebilir)

  • GND: Toprak

  • SCL: I2C saat hattı

  • SDA: I2C veri hattı

Arduino Uno / Nano için bağlantı (I2C)

OLED Pin Arduino Uno/Nano
VCC 5V (bazı modüller 3.3V ister, etiketine bak)
GND GND
SCL A5
SDA A4

Not: Arduino Uno’da I2C pinleri A4 (SDA) ve A5 (SCL)’dir. Bazı Uno kartlarında ayrıca “SDA/SCL” yazan ayrı pinler de bulunur, aynı hatta bağlıdır.


2) Kütüphane Kurulumu (Adafruit SSD1306)

Arduino IDE’de:

  1. Tools → Manage Libraries…

  2. Şunları aratıp yükle:

    • Adafruit SSD1306

    • Adafruit GFX Library

  3. (Gerekirse) Adafruit BusIO otomatik gelir, gelmezse onu da yükle.

Bu kombinasyon en yaygın ve en sorunsuz çözümlerden biri.


3) I2C Adresini Kontrol Etme (0x3C / 0x3D)

SSD1306 OLED’ler çoğunlukla 0x3C adresiyle gelir; bazen 0x3D olur. Eğer ekran gelmiyorsa adres uyuşmazlığı çok olasıdır.

İstersen I2C tarayıcı kodu ile adresi bulabilirsin (kısa örnek):

 
#include <Wire.h>

void setup() {
Wire.begin();
Serial.begin(9600);
Serial.println("I2C taraniyor...");
for (byte addr = 1; addr < 127; addr++) {
Wire.beginTransmission(addr);
if (Wire.endTransmission() == 0) {
Serial.print("Bulunan adres: 0x");
Serial.println(addr, HEX);
}
}
}

void loop() {}
 

4) Örnek Proje: Başlık + Sensör Gibi Değer Gösterimi + Basit Çizimler

Aşağıdaki kod:

  • Ekranı başlatır

  • Üstte başlık basar

  • Ortada sayacı (örnek veri) gösterir

  • Alt kısımda basit bir “bar” (doluluk çubuğu) çizer

 

Arduino Kodu (SSD1306 128x64)

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

// Ekran boyutları
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64

// Reset pini (bazı modüllerde yoktur; -1 kullanılabilir)
#define OLED_RESET -1

// I2C adresi (genelde 0x3C)
#define OLED_ADDR 0x3C

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

unsigned long lastUpdate = 0;
int counter = 0;

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

  // OLED başlat
  if (!display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR)) {
    Serial.println("OLED baslatilamadi! Adres/bağlanti kontrol edin.");
    while (true) { }
  }

  display.clearDisplay();
  display.setTextColor(SSD1306_WHITE);
  display.setTextSize(1);

  // Açılış ekranı
  display.setCursor(0, 0);
  display.println("SSD1306 OLED Demo");
  display.println("----------------");
  display.println("Baslatiliyor...");
  display.display();
  delay(1200);
}

void loop() {
  // Her 300 ms'de bir güncelle
  if (millis() - lastUpdate > 300) {
    lastUpdate = millis();
    counter++;

    // 0-100 arası örnek "değer"
    int value = counter % 101;

    // Ekranı temizle
    display.clearDisplay();

    // Başlık
    display.setTextSize(1);
    display.setCursor(0, 0);
    display.println("Arduino + SSD1306");

    // Büyük değer
    display.setTextSize(2);
    display.setCursor(0, 18);
    display.print("Deger: ");
    display.println(value);

    // Bar çizimi
    // Çerçeve
    int barX = 0, barY = 52, barW = 128, barH = 10;
    display.drawRect(barX, barY, barW, barH, SSD1306_WHITE);

    // Doluluk
    int fillW = map(value, 0, 100, 0, barW - 2);
    display.fillRect(barX + 1, barY + 1, fillW, barH - 2, SSD1306_WHITE);

    // Ekrana bas
    display.display();
  }
}

 

5) Sık Karşılaşılan Sorunlar ve Çözümler

Ekran hiç açılmıyor / bembeyaz / tamamen siyah

  • I2C adresi yanlış olabilir (0x3C yerine 0x3D).

  • SDA/SCL ters bağlanmış olabilir.

  • Modül 3.3V isterken 5V vermiş olabilirsin (modüle göre değişir).

  • “Reset” pini gerekmiyorsa -1 doğru; bazı ekranlarda farklı olabilir.

Yazılar taşmış / kesiliyor

  • setTextSize(2) ile yazı büyüyünce 128x64 alana sığmayabilir.

  • Daha kompakt yerleşim veya setTextSize(1) kullan.

Hızlı Paylaş

Yorumlar

0

Henüz kimse bir şey yazmamış.
İlk yorumu siz yapmak ister misiniz?

Fikrinizi Paylaşın

Düşünceleriniz bizim için değerli. E-posta adresiniz yayınlanmayacaktır.

Koza Akademi
Yazar

Koza Akademi

Teknoloji, yazılım ve tasarım dünyasından en güncel gelişmeleri paylaşıyorum.

Bültene Katılın