I2C Nedir ve Arduino ile Nasıl Kullanılır?

15-11-2026 02:15
I2C Nedir ve Arduino ile Nasıl Kullanılır?

Mikrodenetleyici projelerinde tek bir veri hattı yetmez; hem ekran hem sensör hem de harici bellek aynı karta bağlanmak ister. I2C (Inter-Integrated Circuit), tam olarak bu iş için tasarlanmış iki telli bir haberleşme protokolüdür. Arduino, ESP32 ve birçok ev tipi modül I2C konuştuğu için, protokolü bir kez öğrenmek onlarca bileşeni aynı veri yoluna bağlamanızı sağlar.

Bu yazıda I2C’nin ne olduğunu, hatların nasıl çalıştığını, adreslemenin neden kritik olduğunu ve Arduino ile ilk bağlantıyı nasıl kuracağınızı adım adım ele alacağız.


I2C Nedir?

I2C, Philips (bugünkü NXP) tarafından geliştirilmiş, kısa mesafeli, kart üzeri bir seri haberleşme protokolüdür. Temel fikir basittir: bir veya daha fazla ana cihaz (master), aynı iki hat üzerinden birden fazla çevre birimini (slave) adresleyerek konuşturur. SPI’daki gibi her cihaz için ayrı bir seçim (chip select) pini çekmeniz gerekmez; cihazlar 7 bitlik (bazen 10 bitlik) adresiyle ayırt edilir.

Fiziksel olarak dört bağlantı vardır:

✔️ SDA (Serial Data): Verinin gittiği çift yönlü hat.
✔️ SCL (Serial Clock): Zamanlamayı ana cihazın ürettiği saat hattı.
✔️ VCC ve GND: Besleme ve ortak toprak. Haberleşme hatları tek başına yetmez.

SDA ve SCL açık kollektör / açık drain yapıdadır. Bu yüzden her iki hatta da pull-up direnci gerekir. Birçok hazır I2C modülün üzerinde 4,7 kΩ civarı pull-up zaten vardır; aynı hatta çok sayıda kart yığarsanız toplam direnç fazla düşer ve haberleşme bozulabilir. İlk denemelerde tek bir ekran veya sensörle başlamak bu yüzden daha sağlıklıdır.


I2C Nasıl Çalışır?

Ana cihaz hattı meşgul değilken bir başlangıç koşulu (START) üretir, ardından 7 bit adres ve bir okuma/yazma biti gönderir. Hedef cihaz “ACK” (onay) bitiyle cevap verir. Veri, genellikle 8 bitlik paketler halinde gider; her paketten sonra yine ACK veya NACK beklenir. İş bitince STOP koşulu hattı serbest bırakır.

Yaygın hız kademeleri şunlardır:

✔️ Standart mod: 100 kHz
✔️ Hızlı (Fast) mod: 400 kHz
✔️ Daha hızlı modlar da vardır; hobi kartlarında çoğu zaman 100 veya 400 kHz yeterlidir.

Hız arttıkça kablo uzunluğu, parazit ve pull-up değeri daha kritik hale gelir. Breadboard ve uzun jumper kablo ile 400 kHz bazen sorun çıkarır; böyle bir durumda hızı 100 kHz’e çekmek ilk bakılacak adımdır.


Arduino’da I2C Pimleri

Arduino IDE’de I2C için Wire kütüphanesi kullanılır. Kartın donanım I2C pimleri sabittir; rastgele dijital pine taşıyamazsınız (yazılımsal I2C ayrı bir konudur).

Kart SDA SCL
Arduino Uno / Nano A4 A5
Arduino Mega 2560 20 21
ESP32 (sık kullanılan varsayılan) GPIO21 GPIO22

ESP32’de I2C pimleri yazılımsal olarak değiştirilebilir; yine de kartınızın ipek baskısını kontrol edin. Uno ve Nano’da A4/A5 hem analog giriş hem I2C’dir: I2C kullanırken bu pimleri ayrıca analogRead için kullanmayın.


Hangi Modüller I2C Konuşur?

Mağaza rafında sıkça karşılaşacağınız I2C örnekleri şunlardır:

✔️ 2x16 LCD ekran I2C modüllü — Klasik HD44780 tabanlı 16x2 LCD’ye I2C sırt çantası (genellikle PCF8574) eklenmiş halidir. Dört veri ve üç kontrol pini yerine yalnızca SDA, SCL, VCC ve GND yeterlidir.
✔️ 128x64 0.96 OLED ekran — Çoğu SSD1306 tabanlı 0,96 inç panel I2C ile sürülür. Tipik adres 0x3C’dir.
✔️ MPU6050 6 eksen ivme ve gyro sensörü — İvmeölçer ve jiroskop aynı I2C adresinde (genellikle 0x68) toplanır.
✔️ AT24 serisi I2C EEPROM’lar — Ölçüm kaydı ve kalibrasyon verisi saklamak için kullanılır.

Aynı hatta birden fazla cihaz bağlamak I2C’nin asıl gücüdür. Koşul, adreslerin çakışmamasıdır. İki OLED de 0x3C ise ya adres pini değiştirilir ya da ikinci bir I2C hat açılır.


Adres Nasıl Bulunur?

Modülün üzerinde yazılı adres her zaman gerçeği yansıtmayabilir; üreticiye göre 0x27 veya 0x3F (I2C LCD), 0x3C veya 0x3D (OLED) görülebilir. En güvenilir yöntem, Arduino ile kısa bir tarayıcı (scanner) çalıştırmaktır:

#include 

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

void loop() {}

Hiç adres görünmüyorsa sırasıyla şunlara bakın: SDA/SCL ters bağlanmış olabilir, ortak GND unutulmuş olabilir, 5 V’luk karta 3,3 V’luk bir modül yanlış beslenmiş olabilir ya da hattın pull-up’ı eksiktir. ESP32 ve STM32 gibi 3,3 V’luk kartlarda, 5 V ile çalışan bir I2C LCD’nin SDA/SCL hatlarının 3,3 V mantığa uygun olup olmadığını kontrol etmek gerekir.


Arduino ile 16x2 I2C LCD Örneği

Arduino Uno veya Nano, breadboard, jumper kablo ve I2C’li 16x2 LCD yeterlidir. Bağlantı:

✔️ LCD VCC → 5 V (modül 5 V ise)
✔️ LCD GND → GND
✔️ LCD SDA → A4
✔️ LCD SCL → A5

#include 
#include 

LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup() {
  lcd.init();
  lcd.backlight();
  lcd.setCursor(0, 0);
  lcd.print("I2C LCD Hazir");
  lcd.setCursor(0, 1);
  lcd.print("Altan Elektronik");
}

void loop() {}

0x27 adresinde yanıt yoksa tarayıcıda gördüğünüz değeri yazın. Kütüphane olarak yaygın kullanılan LiquidCrystal_I2C sürümleri arasında init() / begin() farkı olabilir; derleme hatası alırsanız örnek kodunuzdaki fonksiyona uyun.


Sık Yapılan Hatalar

✔️ SDA ile SCL’yi ters bağlamak. Belirtiler: tarayıcı boş döner, ekran açılmaz.
✔️ Ortak toprağı unutmak. Ayrı bir adaptörle beslenen ekran, Arduino ile GND paylaşmazsa haberleşme kurulmaz.
✔️ Aynı hatta çok sayıda pull-up. İki-üç modül çoğu zaman sorun çıkarmaz; daha fazlasında haberleşme instabil hale gelebilir.
✔️ Uzun, dağınık kablo. I2C kısa mesafe protokolüdür. Kartlar arasında onlarca santimetreden uzun, düz kablo yerine kısa jumper tercih edin.
✔️ Adresi sabitleyip denememek. “Hep 0x27’dir” varsayımı, özellikle ucuz I2C sırt çantalarında sık boşa çıkar.


Sonuç

I2C, iki hat ve bir adres tablosuyla ekran, hareket sensörü ve belleği aynı Arduino’ya bağlamanın en pratik yoludur. Önce tarayıcı ile cihazın göründüğünden emin olun, sonra örneği çalıştırın; bu sıra, saatler süren “neden çalışmıyor?” arayışını kısaltır. SPI ve UART’ı da aynı netlikte öğrendiğinizde, elinizdeki geliştirme kartının neredeyse tüm çevre birimlerini güvenle konuşturabilirsiniz.

ideasoft e-ticaret paketleri ile hazırlandı.