Bu rehberimizde ESP32 MicroPython, gömülü sistem projelerinde bilgi görselleştirmenin en şık yollarından biri olan 0.96 inç SSD1306 OLED ekranı, MicroPython platformu kullanarak hem ESP8266 hem de ESP32 mikrodenetleyicileriyle nasıl kontrol edeceğimizi inceliyoruz. Uygulama kapsamında ekranı donanımsal olarak yapılandıracak, “Hello World!” mesajı yazdıracak ve pikselleri tek tek kontrol etmemizi sağlayan gelişmiş çizim kütüphane fonksiyonlarını detaylandıracağız.
Ön Gereksinimler ve Yazılım Ortamı
Bu çalışmadaki adımları doğrudan uygulayabilmek için ESP32 veya ESP8266 kartınızda güncel MicroPython belleniminin (firmware) kurulu olması gerekir. Ayrıca Python betiklerinizi karta yükleyebilmek için bir geliştirme ortamı (IDE) kullanmalısınız. Bu amaçla Thonny IDE veya uPyCraft IDE yazılımlarını tercih edebilirsiniz:
Thonny IDE Kaynakları
uPyCraft IDE Kaynakları
0.96 İnç SSD1306 OLED Ekran Modülü
Projemizde 128×64 piksel çözünürlüğe sahip, düşük güç tüketimi ve yüksek kontrast sunan, I2C seri haberleşme protokolü ile çalışan standart SSD1306 denetleyicili OLED ekranı kullanacağız. Daha önce farklı platformlarda OLED ekran kullanımı üzerine hazırladığımız popüler rehberlere de göz atabilirsiniz:
- NodeMCU ESP8266 ile Wi-Fi Üzerinden OLED Mesaj Uygulaması
- Arduino I2C Protokolü ile OLED Ekran Sürücü Rehberi

Gerekli Donanım Malzemeleri
- 0.96″ SSD1306 OLED I2C Ekran Modülü
- ESP32 veya ESP8266 Geliştirme Kartı
- Breadboard (Devre Tahtası)
- Bağlantı Kabloları (Jumper)
Donanım Bağlantı Şemaları
1. Seçenek: ESP32 ve OLED Bağlantısı
ESP32 geliştirme kartını kullanıyorsanız devrenizi bu şemaya göre kurun:

ESP32 kartlarındaki pinlerin alternatif donanımsal işlevlerini ve kısıtlamalarını detaylıca öğrenmek isterseniz hazırladığımız ESP32 Pin Referans Kılavuzu başlığımızı inceleyebilirsiniz.
2. Seçenek: ESP8266 ve OLED Bağlantısı
Eğer ESP8266 NodeMCU kartı kullanıyorsanız donanım bağlantılarını bu şemaya göre tamamlayın:

SSD1306 OLED Sürücü Kütüphanesinin Yüklenmesi
MicroPython çekirdeği varsayılan olarak SSD1306 ekran sürücüsünü yerleşik olarak barındırmaz. Bu nedenle, hazırlayacağımız kodların ekranı sürebilmesi için öncelikle sürücü kütüphanesini kartımızın dosya sistemine kaydetmemiz gerekir.
Kullandığınız geliştirme editörüne göre aşağıdaki adımları sırasıyla uygulayın:
uPyCraft IDE ile Kütüphane Yükleme Aşamaları
uPyCraft arayüzünde hızlı erişim çubuğundaki New File simgesine tıklayarak yeni bir dosya açın:

Resmi Adafruit deposundan alınan güncel ssd1306.py kütüphane kodlarını kopyalayarak bu boş sekmeye yapıştırın.
Ardından Save butonuna basın:

Açılan pencerede dosya adını harfi harfine küçük harflerle ssd1306.py olarak yazın ve onaylayın:

Son olarak, bu kütüphaneyi kartın dahili flash belleğine yazmak için Download and Run butonuna tıklayın:

Kurulum tamamlandığında sol paneldeki “device” klasörünün altında ssd1306.py dosyasının başarıyla listelendiğini doğrulayabilirsiniz:

Thonny IDE ile Kütüphane Yükleme Aşamaları
Thonny editöründe boş bir dosya açıp kütüphane kodunu yapıştırın. Dosyayı kaydet tuşuna basarak ssd1306.py adıyla yerel bilgisayarınıza kaydedin.
Ardından Thonny menüsünden Device > Upload current script with the current name (Mevcut betiği aynı adla cihaza yükle) seçeneğini seçin:

Yükleme işlemini teyit etmek için Thonny terminal (Shell) ekranına %lsdevice komutunu yazıp çalıştırabilirsiniz. Çıkan dosya listesinde ssd1306.py dosyasını görmelisiniz:

MicroPython Uygulama Kod Örneği
Sürücü kütüphanesini karta yazdıktan sonra, aşağıdaki kaynak kodu oluşturduğunuz main.py dosyasının içerisine yapıştırıp karta yükleyin. Bu kod OLED ekran üzerinde alt alta üç adet Hello World mesajı yazdıracaktır:
from machine import Pin, SoftI2C
import ssd1306
from time import sleep
# ESP32 Donanımsal I2C Pin Yapılandırması
i2c = SoftI2C(scl=Pin(22), sda=Pin(21))
# ESP8266 Donanımsal I2C Pin Yapılandırması (Kullanıyorsanız üstteki satırı yorum yapıp alttakini açın)
# i2c = SoftI2C(scl=Pin(5), sda=Pin(4))
oled_width = 128
oled_height = 64
oled = ssd1306.SSD1306_I2C(oled_width, oled_height, i2c)
oled.text('Hello, World 1!', 0, 0)
oled.text('Hello, World 2!', 0, 10)
oled.text('Hello, World 3!', 0, 20)
oled.show()
Kodun Teknik Analizi ve Parametreleri
İlk olarak I2C protokolünü oluşturabilmek için machine modülünden Pin ve SoftI2C sınıflarını dahil ediyoruz:
from machine import Pin, SoftI2C
Kartın hafızasına yüklediğimiz SSD1306 sürücüsünü kod içerisine dahil ediyoruz:
import ssd1306
ESP32 donanım mimarisinde varsayılan fiziksel I2C bacakları GPIO 22 (SCL) ve GPIO 21 (SDA) pinleridir. ESP8266’da ise bu bacaklar GPIO 5 (SCL) ve GPIO 4 (SDA) olarak atanmıştır. Kullandığımız karta göre I2C nesnesini oluşturuyoruz:
i2c = SoftI2C(scl=Pin(22), sda=Pin(21))
Kullandığımız ekranın piksel sınırlarını belirleyerek oled nesnemizi türetiyoruz:
oled_width = 128
oled_height = 64
oled = ssd1306.SSD1306_I2C(oled_width, oled_height, i2c)
Ekran belleğine metin yazdırmak için text() metodunu çağırıyoruz. Buradaki parametre düzeni şu şekildedir: text(mesaj, x_koordinati, y_koordinati, renk). Koordinat sistemi sol üst köşeyi (0,0) referans alır. Yazıların birbirinin üzerine binmemesi için y koordinatlarını 10’ar piksel (karakter boyutu limitlerinde) aşağıya kaydırıyoruz. Son olarak değişiklikleri fiziksel panele yansıtmak için mutlaka show() metodunu çağırıyoruz:
oled.text('Hello, World 1!', 0, 0)
oled.text('Hello, World 2!', 0, 10)
oled.text('Hello, World 3!', 0, 20)
oled.show()
Çalışma Sonucu ve Görsel Doğrulama
Yazılımı kartınıza başarıyla yüklediğinizde, OLED ekran modülünüz üzerinde Hello World mesajlarının alt alta kusursuz bir şekilde listelendiğini göreceksiniz:

Grafik Çizim ve Gelişmiş Kütüphane Fonksiyonları
SSD1306 kütüphanesi, sadece metin yazdırmanın ötesinde, ekran üzerinde grafik arayüzler ve animasyonlar oluşturabilmeniz için çeşitli donanımsal metotlar sunar.
1. Ekranın Tamamını Doldurma ve Temizleme
Ekrandaki tüm pikselleri aktif (beyaz/mavi) hale getirerek paneli tamamen aydınlatmak için fill(1) komutu kullanılır:
oled.fill(1)
oled.show()

Ekran belleğini tamamen temizlemek (tüm pikselleri kapatmak / siyah yapmak) için ise parametreye 0 verilir:
oled.fill(0)
oled.show()
2. Tekil Piksel Kontrolü (Pixel Drawing)
Ekran üzerindeki belirli bir koordinata tek bir nokta yerleştirmek için pixel(x, y, renk) metodu kullanılır. Renk parametresi 1 (beyaz) veya 0 (siyah) değerini alır. Örneğin, sol üst köşeye (0,0) tek bir beyaz piksel çizmek için:
oled.pixel(0, 0, 1)
oled.show()

3. Renkleri Ters Yüz Etme (Invert Mode)
Ekranın mevcut renk düzenini (arka planı beyaz, karakterleri siyah yapacak şekilde) donanım seviyesinde tersine çevirmek için invert(True) komutunu gönderebilirsiniz:
oled.invert(True)

Tekrar varsayılan siyah arka plan moduna dönmek için ise parametreye False göndermek yeterlidir:
oled.invert(False)
4. Sayısal Sensör Verilerini Ekranda Görüntüleme
SSD1306 kütüphanesinin text() fonksiyonu güvenlik gerekçesiyle parametre olarak yalnızca String (metin) tipindeki değişkenleri kabul eder. Ancak sıcaklık, nem veya mesafe gibi sensörlerden okuduğumuz fiziksel veriler kod içerisinde int (tam sayı) veya float (ondalıklı sayı) olarak tutulur.
Bu sayısal verileri OLED ekrana hata almadan yazdırabilmek için, yazdırma işleminden hemen önce Python’un dahili str() fonksiyonunu kullanarak veriyi string formatına dönüştürmeniz gerekir. Örnek uygulama kod bloğu:
# Sensörden okunan sayısal veri
sicaklik = 24.85
# Veriyi String formatına dönüştürme
sicaklik_str = str(sicaklik) + " C"
# Ekrana yazdırma
oled.text("Sicaklik:", 0, 0)
oled.text(sicaklik_str, 0, 12)
oled.show()
Genel Özet
Bu rehberimizde, gömülü sistemlerimizde görsel çıktı alabilmek için sıklıkla kullandığımız I2C SSD1306 OLED ekranı, MicroPython platformunda ESP8266 ve ESP32 donanımlarıyla asenkron olarak nasıl süreceğimizi detaylandırdık. Sürücü kütüphanelerinin Thonny ve uPyCraft editörlerine yüklenme aşamalarını, temel metin yerleşim parametrelerini ve grafik kontrol metotlarını doğrulamış olduk. MicroPython ile zengin IoT ve sensör arayüzü projeleri geliştirmek için sitemizdeki diğer detaylı uygulamaları da inceleyebilirsiniz.
Yorum yapma özelliği, forum tarafından gelen istek sebebiyle kapatılmıştır. Lütfen tartışmalar ve sorularınız için topluluk forumumuza katılın.
