Arduino I2C OLED Ekran Kullanımı

Standart LCD modülünü kullanmak hoşunuza gitmiş miydi? I2C OLED modülü ile tanışınca LCD modülünden vazgeçeceğinize eminiz! Daha önce bir kaç yazımızda tek renk LCD modülünü kullanmış, hatta LCD ekran ile bir menü oluşturmuştuk, buradan o yazıya erişebilirsiniz. Şimdi ise teknoloji olarak ileri bir seviyeye gidiyoruz ve OLED ekran kullanıyoruz! Ayrıca OLED ve LCD ekranları bir birinden ayıran en önemli faktörün, backlight yani arka ışık olduğunu belirtelim. LCD ekranlarda arka ışığa ihtiyaç varken, OLED ekranlarda bu arka ışığa gerek duyulmaz.

OLED Teknolojisi Nedir?

OLED ekranlar tıpkı LED ekranlar gibi yarı katı iletkenlerdir. OLED ekranlar elektrik uygulandığında ışığı emen organik malzemelerden yapılmıştır. OLED’ler 2 ya da 3 ana organik katman sahip olabilir ve üçüncü katman bulunduğunda bu katman katottan ışık yayan tabakaya yani bir anot tabakaya elektron taşınmasına aracılık eder. Ayrıca bu teknolojinin gelişmesinde, Nanoteknolojinin payı oldukça büyüktür.

I2C oled, Arduino I2C OLED Ekran Kullanımı

I2C Nedir?

Daha önce ki yazılarımızdan biri olan “Seri Haberleşme Protokolleri” konusunun en göz alıcı başlığı olmasıyla beraber I2C protokolü, pin sayısının az olduğu durumlarda oldukça kullanışlı bir yöntem oluyor. İletişim için sadece iki pine ihtiyaç duyması bunun yanında paralel olarak birden fazla I2C modülünün bir birine bağlanabilmesi bir çok kişi tarafından ilk seçenek olarak tercih ediliyor. Daha fazla bilgi almak için buradan devam edebilirsiniz.

I2C oled, Arduino I2C OLED Ekran Kullanımı

Uygun OLED Modülünü Seçmek

Tamamen istekleriniz doğrultusunda karar vermelisiniz. Genel olarak modüller arasında fiyar farkının en büyük sebebi renk faktörüdür, boyut olarak aradaki fiyat çok küçük miktarlarda değişmekte. Biz bu yazıda tek renk(monochrome) 0.96″ lik bir OLED ekran kullanacağız. Kullandığız modülün boyutlarına göre projenin kodunda değişiklikler yapmak zorundasınız, bunun yanında haricen bir şey yapmanıza gerek yok, I2C protokolünü sizin için her şeyi yapmaya zaten hazır!

I2C oled, Arduino I2C OLED Ekran Kullanımı
128x64 1.3" I2C
I2C oled, Arduino I2C OLED Ekran Kullanımı
128x32 1" I2C OLED

Bazı OLED modelleri tek renki bir ekrana ya da çok renkli bir ekrana sahip olmasının yanında, çift renkli modeller ile de karşılaşmaktayız, bu modellerde ekranın üst kısmının bir bölümü alt kısma göre farklı bir renkte. Üstte verdiğimiz 1.3″ lik ekran bu projede kullandığımız ekran modeli, fakat bizim ekranımız “monochrome” yani tek renkli.

Kütüphaneye Karar Vermek

Kullandığınız mikroişlemcinin ya da Arduino’nun programlama belleğine göre bir kütüphane seçmekte fayda var. Ayrıca bazı OLED modülleri her kütüphane ile çalışmamakta, bizim modülümüz burada göstereceğimiz iki kütüphane ile sorunsuz çalıştı. Adafruit kütüphanesi ile yaptığımız kod 19kb olmasına karşın u8glib kütüphanesinde hazırladığımız kod sadece 7kb oldu.

Adafruit Kütüphanesi

U8glib kütüphanesine göre oldukça gelişmiş ve kullanıcı dostu bir içeriğe sahip. Kurulum anında farklı olarak bir de Adafruit OLED GFX kütüphanesi kurarak projenize hareketli desenler, resimler, gifler, ve tasarım harikaları ekleyebilirsiniz. Kolay bitmap düzenlemeleri ile var olmayan sembolleri, UTF kodlarını kolaylık ekleyebilirsiniz. Eksi yönü ise oldukça fazla bir alan kaplaması, bu yüzden ATmega/ATtiny mikroişlemcilerinin 8 yada 16 serisini kullanıyorsanız biraz zorlanacak gibisiniz çünkü en basit “Hello World” projesi bile neredeyse 15kB yer kaplamakta. Kütüphane ve font dosyalarından oynama yapsanız bile verimli bir yer kazancı olmuyor.

I2C oled, Arduino I2C OLED Ekran Kullanımı
Bitmap aracılğı ile yerleştirilmiş bir görüntü.

U8glib Kütüphanesi

Adafruit kütüphanesi göre oldukça karmaşık ve biraz daha mantık gerektiren bir çalışma prensibine sahip. Bu kütüphane ile grafikler ve sanatsal! içerikler üretmek biraz zor, fakat artı yanı olarak zengin font ailesine sahip, ayrıca düşük yer kaplaması ile tercih ettiğimiz bir kütüphane. Basit bir “Hello World” çalışması için kaplanan yer neredeyse 5kB ! Fakat bu veri seçtiğiniz fonta göre değişiyor, bu yüzden font ailesinden bir font tercih ederken, boyut ve kaplanan yeri göz önüne almanız gerekiyor. Aynı işlevleri gören ve aynı fonksiyonlara sahip olan bir projede iki kütüphane arasında 6kB kadar fark oluşuyor. Bunun yanında, ekrandaki verileri değiştirmek, Adafruit kadar kolay değil, çünkü sayfa metoduna göre çalışıyor. Bunu şöyle düşünebilirsiniz;

  • Adafruit tek sayfadan oluşan bir defter ve her işlemde defter silinip tekrar yazılıyor.
  • U8glib ise bir çok sayfadan oluşan bir defter ve her işlemde sayfalar arasında geçiş yapılıyor.

I2C Adresini Tespit Etmek

I2C iletişim kanalını kullanmak için cihazın adresini kesinlikle bilmemiz gerekiyor. Neyseki bu adresi tespit etmek oldukça kolay, bağlantıları doğru bir şekilde yaptığınız taktirde yaklaşık 10 saniye gibi bir sürede yazılımsal olarak tespiti sağlayabilirsiniz.

I2C oled, Arduino I2C OLED Ekran Kullanımı

Yazılımsal Tespit

İnternet üzerinde belkide yüzlerce I2C-Scanner isminde “Serial Monitor” kullanarak modülünüzün I2C adresini bulmanızı sağlayan kodlar var. Biz sizilerle I2C kullandığımız bütün projelerde tercih ettiğimiz kodu paylaşacağız, eğer bağlantılarınız doğru olmasına rağmen her hangi bir adres tespit edilemiyorsa ya da ekran boş kalıyorsa, farklı bir I2C Scanner kullanmanız gerekiyor olabilir, fakat yüksek ihtimalle; ya modülünüz bozuk ya da I2C bağlantılarınız yanlış. Bazı MCU’larda I2C bağlantı noktalarında pull-up direnç bulunmamakta, eğer böyle bir sorunla karşı karşıya kalırsanız 4.7k Ohm’luk bir pull-up direnç işinizi görecektir.

Ayrıca bu tarama için Adafruit I2C Kütüphanesine ihtiyacımız var. Doğrudan Arduino IDE üzerinden kurabileceğiniz gibi buradan github bağlantısı ile indirebilirsiniz.

#include <Adafruit_I2CDevice.h>

Adafruit_I2CDevice i2c_dev = Adafruit_I2CDevice(0x10);

void setup() {
  while (!Serial) { delay(10); }
  Serial.begin(115200);
  Serial.println("I2C adres taraması > devreyakan.com");

  if (!i2c_dev.begin()) {
    Serial.print("0x Noktasında her hangi bir baglanti mevcut degil");
    Serial.println(i2c_dev.address(), HEX);
    while (1);
  }
  Serial.print("Cihaz bulundu... ");
  Serial.println(i2c_dev.address(), HEX);
}

void loop() {
  
}

Donanımsal Tespit

Yüksek ihtimalle modülünüzün arka kısmında I2C adresi seçmenize olanak sağlayan iki adet direnç bulunmakta, lehimli olan bağlantı kısmı o an seçili olan adres anlamına gelmekte. Aynı anda iki kısmıda lehimlerseniz, modülünüz çalışmayacaktır, iki kısmıda boş bırakırsanız modülünüz az önceki işlem gibi yine çalışmayacaktır.

I2C oled, Arduino I2C OLED Ekran Kullanımı

Yukarıda gördüğünüz gibi 0x78 ve 0x7A olmak üzere seçim şansınız var. Bizim modülümüzde burada direnç 0x78’e bağlı olmasına rağmen, yazılımsal olarak aramada adres 0x3C çıktı, bizde bu doğrultuda 0x3C adresini kullandık ve başarılı sonuçlar elde etmiş olduk.

Devre Şeması

Bu bağlantılar Arduino Uno/ATmega328-P için geçerlidir. Bir çok ATmel kartların bağlantısı aynı olsada, bağlantıları sağlamadan önce kartınızın pin çıkışlarını mutlaka kontrol edin.

PinArduino Uno
Vin5V
GNDGND
SCLA5
SDAA4
I2C oled, Arduino I2C OLED Ekran Kullanımı

Diğer Arduino modellerinde;

  • Nano: SDA (A4); SCL (A5);
  • MEGA: SDA (20); SCL (21);
  • Leonardo: SDA (20); SCL (21);

Proje Kodu

İki farklı kütüphane için de kodları paylaşıyoruz, ayrıca U8glib için adres otomatik olarak 0x3C olarak geliyor, bir çok OLED ekran bu adrese sahip olduğu için bu değeri değiştirmeye gerek kalmadık fakat isterseniz bunu kolaylıkla değiştirebilirsiniz. Ayrıca, Adafruit kütüphanesini kullanırken mutlaka değiştirmeniz gereken bir kaç değer var, bu değerleri değiştirmediğiniz taktirde OLED ekran çalışmayacaktır.

Adafruit Kütüphanesi İle

Öncelikle Arduino IDE’ye SSD1306 ve GFX yazarak bu kütüphaneleri kuruyoruz;

I2C oled, Arduino I2C OLED Ekran Kullanımı
I2C oled, Arduino I2C OLED Ekran Kullanımı

Örnekler sekmesinden kartınıza uygun olan örneği seçerek ilk testi yapabilirsiniz.

I2C oled, Arduino I2C OLED Ekran Kullanımı

Adafruit ile Hello World Uygulaması

#include <Wire.h>
#include <Adafruit_GFX.h> // grafik tabanli projeler icin
#include <Adafruit_SSD1306.h> // metin tabanli projeler icin

#define SCREEN_WIDTH 128 // genislik
#define SCREEN_HEIGHT 64 // yukseklik

// sda-scl pinleri
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

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

  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // i2c adresi
    Serial.println(F("SSD1306 baglanti prob"));
    for(;;);
  }
  delay(2000);
  display.clearDisplay();

  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0, 10);
  display.println("merhaba dunya!");
  display.display(); 
}

void loop() {
  
}

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

-1 yazan bölüm OLED ekranın reset pinidir, eğer ekranınızda reset pini yoksa bu değer kesinlikle -1 olmalı. Eğer reset pini varsa, kart üzerinden tanımdalığınız çıkışı buraya bağlamanız gerekiyor.

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64

Yükselik ve genişlik kesinlikle doğru yazılmalı aksi taktirde görüntüde kopmalar yaşanacaktır.

Adafruit Özelleştirmeler

Ekranı Temizleme

display.clearDisplay();

Metin Punto Ayarı

display.setTextSize(1);             

İlk Karakterin Başlangıç Yeri

display.setCursor(0,10);             

Veriyi Ekrana Yollamak

display.display();

Her hangi bir değişiklikten sonra display kodunu kullanmazsanız, ekran yenilenmez.

Font Değiştirmek

display.setFont();
Font Listesi
FreeMono12pt7b.h		FreeSansBoldOblique12pt7b.h
FreeMono18pt7b.h		FreeSansBoldOblique18pt7b.h
FreeMono24pt7b.h		FreeSansBoldOblique24pt7b.h
FreeMono9pt7b.h			FreeSansBoldOblique9pt7b.h
FreeMonoBold12pt7b.h		FreeSansOblique12pt7b.h
FreeMonoBold18pt7b.h		FreeSansOblique18pt7b.h
FreeMonoBold24pt7b.h		FreeSansOblique24pt7b.h
FreeMonoBold9pt7b.h		FreeSansOblique9pt7b.h
FreeMonoBoldOblique12pt7b.h	FreeSerif12pt7b.h
FreeMonoBoldOblique18pt7b.h	FreeSerif18pt7b.h
FreeMonoBoldOblique24pt7b.h	FreeSerif24pt7b.h
FreeMonoBoldOblique9pt7b.h	FreeSerif9pt7b.h
FreeMonoOblique12pt7b.h		FreeSerifBold12pt7b.h
FreeMonoOblique18pt7b.h		FreeSerifBold18pt7b.h
FreeMonoOblique24pt7b.h		FreeSerifBold24pt7b.h
FreeMonoOblique9pt7b.h		FreeSerifBold9pt7b.h
FreeSans12pt7b.h		FreeSerifBoldItalic12pt7b.h
FreeSans18pt7b.h		FreeSerifBoldItalic18pt7b.h
FreeSans24pt7b.h		FreeSerifBoldItalic24pt7b.h
FreeSans9pt7b.h			FreeSerifBoldItalic9pt7b.h
FreeSansBold12pt7b.h		FreeSerifItalic12pt7b.h
FreeSansBold18pt7b.h		FreeSerifItalic18pt7b.h
FreeSansBold24pt7b.h		FreeSerifItalic24pt7b.h
FreeSansBold9pt7b.h		FreeSerifItalic9pt7b.h

Pixel Çizmek

display.drawPixel(64, 32, WHITE);

x=64 y=32 olmak üzere pixel oluşturur.

I2C oled, Arduino I2C OLED Ekran Kullanımı

Düz Çizgi Çizmek

display.drawLine(0, 0, 127, 20, WHITE);

x1=0 x2=0 y1=127 y2=20 olmak üzere düz çizgi oluşturur.

I2C oled, Arduino I2C OLED Ekran Kullanımı

Dikdörtgen Çizmek

display.drawRect(10, 10, 50, 30, WHITE);

x=10 y=10 genişlik=10 yükseklik=10 olmak üzere dikdörtgen oluşturur.

I2C oled, Arduino I2C OLED Ekran Kullanımı

Çember Çizmek

display.drawCircle(64, 32, 10, WHITE);

x=64 y=32 yarıçap=10 olmak üzere çember oluşturmak için.

I2C oled, Arduino I2C OLED Ekran Kullanımı

Renkleri Tersine Çevirmek

display.invertDisplay(true);

Ekranın renklerini tersine çevirmek için kullanılır.

U8glib Kütüphanesi İle

Adafruit kütüphanesinin aksine daha modüler ve daha az yer kapladığı için biz bu projede bu kütüphaneyi tercih ettik. Bağlantılar tamamen aynı bu yüzden doğrudan kod kısmına geçebiliriz. Ayrıca eğer bu kod ile OLED modülü çalışmazsa, bağlantılardanda eminseniz, kütüphanenin örnek dosyalarındaki çalışmaları tek tek deneyerek çalışan model numarasını bulabilirsiniz. Örneğin bizim kartımızda çalışan model ayarları;

//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0);	// I2C / TWI
//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_NO_ACK|U8G_I2C_OPT_FAST);	// Fast I2C / TWI
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NO_ACK);	// Display which does not send AC

Hello World Kodu

#include "U8glib.h"


U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0);	// I2C / TWI 

void sayfaYazdir() {
  u8g.setFont(u8g_font_unifont);
  u8g.drawStr( 0, 22, "devreyakan.com");
}

void setup(void) {
  
}

void loop(void) {
  // picture loop
  u8g.firstPage();
  int i = 0;
  do {
    sayfaYazdir();
  } while( u8g.nextPage() );
  
  delay(1000);
}

Birden Fazla Sayfa Örneği

#include "U8glib.h"
#include U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0); 

void sayfa1();       
void sayfa2();   
void sayfa3();       
void sayfa4();    

const int sayfaSayisi = 4;
int p;
void (*sayfalar[sayfaSayisi])() = { sayfa1, sayfaS2, sayfa3, sayfa4 };
int sure [sayfaSayisi] = { 1000, 1000, 1000, 2000 };


void setup() {  
  u8g.setFont(u8g_font_unifont);
  u8g.setColorIndex(1);
  p = 0;
  Serial.begin(9600);
}

void loop() {  
  u8g.firstPage();
  do {  
    (*sayfalar[p])();
  } while( u8g.nextPage() );
  delay(sure[p]);
  p = p+1;
  if (p == sayfaSayisi)
    p=0;
}
  


void sayfa1() {
  Serial.write("sayfa1");
  Serial.println();
  u8g.drawStr( 0, 15, "sayfa1");
  return 0; 
}
void sayfaS2(){
  Serial.write("sayfa2");
  Serial.println();
  u8g.drawStr( 0, 15, "sayfa2"); 
  return 0;
}
void sayfa3() {
  Serial.write("sayfa3");
  Serial.println();
  u8g.drawStr( 0, 15, "sayfa3"); 
  return 0;
}
void sayfa4(){
  Serial.write("sayfa4");
  Serial.println();
  u8g.drawStr( 0, 15, "sayfa4");  
  return 0;
}

Bu kodu kullanırken loop döngüsüne dikkat etmeniz gerekiyor, Arduino’nun kendi loop döngüsü ile U8glib kütüphanesinin loop döngüsü bir birinden farklı, bu yüzden global eylemleri Arduino’nun loop döngüsünde kullanmanız gerekiyor, aksi taktirde verimli bir program elde edemezsiniz.

Olası Problemler

Bu modülü keşfederken karşılaştığımız bütün sorunları ve çözümlerini burada anlattık;

I2C Adresini Bulamamak

Yüksek ihtimalle bağlantılarınızda bir hata var, buna rağmen adres bulunmuyorsa i2c kanalına pull-up direnci bağlamalısınız örneğin 4.7k işinizi görecektir. Hala sonuç alamadıysanız, OLED modülünüzün adres seçme direncine ve lehimlerini dikkatlice inceleyin, bazen lehimlenmeyen yollar bu soruna yol açabiliyor.

Görüntüde Dalgalanma

Bağlantılar ve kod doğru olmasına rağmen böyle bir sorun varsa, geliştirme kartınız yüksek ihtimalle klon bir karttır. Genelde voltaj ve akımdan kaynaklanan bu sorunlar klon kartlarda meydana gelir, oled ekranın GND ve VCC bağlantılarına yakın bir konuma paralel 100nF’lık bir kapasitör bu sorunu yüksek ihtimalle çözecektir. Bunun yanında çözünürlük ayarlarınız yanlış olabilir, tekrar gözden geçirmekte fayda var.

Siyah Ekran Problemi

Genel olarak en sık rastlanan problemlerden biridir. Başlıca sebebi yanlış I2C adresi veya bağlantılardan kaynaklanır. Sırasıyla, önce bağlantılar sonra I2C adresi kontrol edilip tekrar denenir. I2C adresini, yazılımsal yolla bulmayı şiddetle tavsiye ediyoruz, çünkü bizim kullandığımız modülde de böyle bir problem mevcuttu, karta farklı bir I2C adresi basılmıştı.

Parazitlenme

Bu sorunun sebebide genel olarak dalgalanma ile aynı, bağlantılar ve kod doğru olmasına rağmen böyle bir şey meydana geliyorsa, kütüphane değiştirip tekrar deneyin, sorun devam ediyorsa, OLED modülünüz hasar almış demektir.

EKSTRALAR

Konuya ek, sizlerede fazladan bilgi olması maksadıyla ekstra olaylar ve fonksiyonlar;

I2C Adresini Değiştirmek

OLED Modülün arkasında bulunan I2C adress bölümündeki direnci yer değiştirirek, adresi değiştirebilirsiniz. İki kısmada direnç bağlarsanız modül çalışmaz, ayrıca iki kısmıda boş bırakırsanız modül yine çalışmaz.

I2C Pinlerini Değiştirmek (Tercihe Bağlı)

Arduino Uno modelinde I2C pinleri donanımsal olarak sabit geliyor, kısacası ek bir kütüphane olmadan orjinal I2C pinleri değiştirmek imkansıza yakın. Bir proje yaptığınızı düşünün bu projde tüm analog çıkışlar kullanıyor, bu yüzden I2C hattını kullanmak imkansız. İşte tam bu noktada “SoftwareWire” kütüphanesi yardımınıza koşacaktır.

İki Ayrı I2C Modülü Bağlamak

Master-slave kavramlarına hakimseniz, birden fazla I2C modülünü paralel bir şekilde kartınıza bağlayabilirsiniz.

Normal Resimleri Bitmap'a Çevirmek

Logonuzu, resminizi bitmap formatına çevirerek kolay bir şekilde OLED ekranına yansıtabilirsiniz;

Öncelikle resminizi monochrome bitmap şeklinde kaydetmeniz gerekiyor, bundan önce ise kırpma-kesme işlemlerini yapmanız gerekmekte.

I2C oled, Arduino I2C OLED Ekran Kullanımı

Kırpma işlemi yaptığımız resmi her hangi bir Image to C converter programı ile C array(küme)’ına çevirelim.

I2C oled, Arduino I2C OLED Ekran Kullanımı

LCD Image Converter Programını kullanıyorsanız;

  • Type: Monochrome, Threshold Dither
  • Main Scan Direction: Top to Bottom
  • Line Scan Direction: Forward

ayarlarını seçmeniz gerekiyor.

I2C oled, Arduino I2C OLED Ekran Kullanımı

Image sekmesinden ise, bu ayarları yapmanız gerekiyor;

  • Split to rows
  • Block size: 8 bit
  • Byte order: Little-Endian
I2C oled, Arduino I2C OLED Ekran Kullanımı

Bütün ayarları yaptıkran sonra export butonundan .c dosyası şeklinde bir çıktı alıyoruz. Çıktının içerği aşağıdaki gibidir. Bu çıktıyı her hangi bir kütüphane ile kullandığımızda bizleri en alttaki gibi bir ekran karşılamış olucak.

static const uint8_t image_data_Saraarray[1024] = {
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x14, 0x9e, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x36, 0x3f, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x6d, 0xff, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0xfb, 0xff, 0x80, 0x1f, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x03, 0xd7, 0xff, 0x80, 0x0f, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x07, 0xef, 0xff, 0x80, 0x07, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x0f, 0xdf, 0xff, 0x90, 0x07, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x0f, 0xbf, 0xff, 0xd0, 0x07, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x1d, 0x7f, 0xff, 0xd0, 0x07, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x01, 0x1b, 0xff, 0xff, 0xc0, 0x07, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x02, 0xa7, 0xff, 0xff, 0xc0, 0x07, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x03, 0xff, 0xc0, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0xff, 0x80, 0x00, 0x0b, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x03, 0xff, 0xff, 0xff, 0xf0, 0x0f, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x07, 0xff, 0xff, 0xff, 0xf0, 0x0f, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x0f, 0x07, 0xff, 0xf8, 0xf8, 0x03, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x0e, 0x01, 0xff, 0xc0, 0x38, 0x07, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x1c, 0x46, 0xff, 0xb1, 0x18, 0x07, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x3f, 0x97, 0xff, 0xc0, 0x7a, 0x07, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xfe, 0x03, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xfe, 0x03, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xfe, 0x01, 0x3f, 0xff, 0xff, 0xff, 0xfe, 0x01, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xfe, 0x01, 0xbf, 0xff, 0xff, 0xff, 0xfe, 0x81, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0xbf, 0xff, 0xff, 0xff, 0xfc, 0x81, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0xff, 0xff, 0xfe, 0xff, 0xfd, 0x83, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0xbf, 0xff, 0xfe, 0xff, 0xfd, 0x01, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xfb, 0x03, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x3f, 0xff, 0xdc, 0xff, 0xfa, 0x03, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xd8, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xf8, 0x03, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xd0, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xf8, 0x01, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0x90, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xf8, 0x02, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xb0, 0x00, 0x0f, 0xf5, 0xff, 0xd7, 0xf8, 0x01, 0xff, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xb0, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x5f, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xa0, 0x00, 0x0f, 0xfb, 0xff, 0xff, 0xf0, 0x00, 0x3f, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x0f, 0xfd, 0xff, 0xdf, 0xf0, 0x00, 0x3f, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x07, 0xff, 0xff, 0xbf, 0xf0, 0x00, 0x0f, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x07, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x87, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x03, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x43, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0x60, 0x00, 0x01, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x73, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xfe, 0xe0, 0x00, 0x00, 0xff, 0xff, 0xff, 0x80, 0x00, 0x7b, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xfd, 0xe0, 0x00, 0x00, 0x7f, 0xff, 0xfe, 0x00, 0x00, 0x33, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xfd, 0xe0, 0x00, 0x00, 0x3f, 0xff, 0xf8, 0x00, 0x00, 0x27, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x0f, 0xff, 0xf0, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0x60, 0x00, 0x00, 0x67, 0xff, 0xe0, 0x00, 0x00, 0x1b, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xfd, 0x40, 0x00, 0x00, 0xf3, 0xff, 0xc4, 0x00, 0x00, 0x0b, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xfe, 0x80, 0x00, 0x00, 0xfc, 0xff, 0x8c, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x7f, 0x3c, 0x3c, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x3f, 0xc0, 0x7c, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xfc, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff
};

Sonuç olarak;

I2C oled, Arduino I2C OLED Ekran Kullanımı