I²C Protokolünün Uygulaması

I2C Protokolü Nedir? ESP32 ile i2C Haberleşme Rehberi

Mikrodenetleyici projelerinde ekranlar, sensörler ve ivmeölçerler gibi çevre birimleriyle haberleşmek için en sık kullanılan protokollerden biri I2C (Inter-Integrated Circuit) protokolüdür. Bu yazıda, I2C protokolünün çalışma mantığını, avantajlarını ve ESP32 ile nasıl kullanılacağını adım adım inceleyeceğiz.

1. I2C Protokolü Nedir ve Nasıl Çalışır?

I2C, Philips (şimdi NXP) tarafından geliştirilen, senkron, seri ve half-duplex (yarı çift yönlü) bir master-slave haberleşme protokolüdür. En büyük avantajı, sadece iki hat (tel) kullanarak onlarca farklı cihazı aynı veri yoluna bağlayabilmenizdir.

I2C Hatları:

  • SDA (Serial Data): Verinin hem gönderildiği hem de alındığı çift yönlü veri hattı.
  • SCL (Serial Clock): Haberleşmenin zamanlamasını (senkronizasyonunu) sağlayan saat sinyali hattı. Master cihaz tarafından üretilir.

Temel Özellikleri:

  • Adresleme Sistemi: Her slave cihazın benzersiz bir 7 bitlik (veya 10 bitlik) adresi vardır. Master, veri göndermek istediği cihazı bu adresle çağırır. Bu sayede hat karmaşası yaşanmaz.
  • Pull-Up Dirençleri: I2C hatları “Open-Drain” yapısındadır. Hatların lojik-1 seviyesinde kalabilmesi için hem SDA hem de SCL hatlarına Pull-Up dirençleri (genellikle $4.7\,k\Omega$ veya $10\,k\Omega$) bağlanmalıdır.

2. ESP32 ve I2C Pinleri

ESP32, donanımsal olarak iki adet I2C arayüzüne (I2C 0 ve I2C 1) sahiptir. Varsayılan (default) olarak Arduino IDE üzerinde tanımlı olan I2C pinleri şunlardır:

ESP32 Varsayılan PinI2C Fonksiyonu
GPIO 21SDA
GPIO 22SCL

Not: ESP32’nin esnek pin eşleme (pin mapping) özelliği sayesinde, kod içerisinde Wire.begin(SDA_PIN, SCL_PIN); fonksiyonunu kullanarak hemen hemen her GPIO pinini I2C için atayabilirsiniz.

3. Uygulama: ESP32 ile I2C Tarayıcı (I2C Scanner)

I2C hatlarında en sık yaşanan sorun, cihaza ait doğru adresin bilinmemesi veya bağlantı hatasıdır. Aşağıdaki kod, ESP32’ye bağlı tüm I2C cihazlarını tarar ve adreslerini seri monitöre yazdırır. Projelerinize başlamadan önce bu testi yapmak zaman kazandırır.

Bağlantı Şeması

  • ESP32 GND $\rightarrow$ Sensör/Ekran GND
  • ESP32 3.3V $\rightarrow$ Sensör/Ekran VCC
  • ESP32 GPIO 21 $\rightarrow$ Sensör/Ekran SDA
  • ESP32 GPIO 22 $\rightarrow$ Sensör/Ekran SCL
#include <Wire.h>

void setup() {
  // Seri haberleşmeyi başlat
  Serial.begin(115200);
  while (!Serial);             
  
  // Varsayılan pinlerle I2C hattını başlat (GPIO 21, GPIO 22)
  Wire.begin();
  
  Serial.println("\nI2C Tarayıcı Başlatılıyor...");
}

void loop() {
  byte error, address;
  int nDevices;

  Serial.println("Taranıyor...");

  nDevices = 0;
  for(address = 1; address < 127; address++ ) {
    // Wire kütüphanesi belirtilen adrese veri göndermeyi dener
    Wire.beginTransmission(address);
    error = Wire.endTransmission();

    if (error == 0) {
      Serial.print("I2C cihazı bulundu! Adres: 0x");
      if (address < 16) {
        Serial.print("0");
      }
      Serial.print(address, HEX);
      Serial.println(" !");

      nDevices++;
    }
    else if (error == 4) {
      Serial.print("Bilinmeyen hata: 0x");
      if (address < 16) {
        Serial.print("0");
      }
      Serial.println(address, HEX);
    }    
  }
  
  if (nDevices == 0) {
    Serial.println("Hiçbir I2C cihazı bulunamadı.\n");
  } else {
    Serial.println("Tarama bitti.\n");
  }

  delay(5000); // 5 saniyede bir yeniden tara
}

4. I2C Avantajları ve Dezavantajları

Avantajları:

  • Minimum Pin Kullanımı: Sadece 2 pin ile teorik olarak 127 cihaza kadar kontrol imkanı sağlar.
  • ACK/NACK Mekanizması: Verinin karşı tarafa ulaşıp ulaşmadığı donanımsal olarak teyit edilir.
  • Çoklu Master Desteği: Birden fazla master cihaz aynı hat üzerinde çalışabilir.

Dezavantajları:

  • Hız Sınırı: SPI protokolüne göre daha yavaştır. Standart modda $100\,kbps$, hızlı modda (Fast Mode) $400\,kbps$ hız sunar.
  • Mesafe Sınırı: Hat üzerindeki kapasitans arttıkça sinyal kalitesi bozulur. Genellikle hat mesafesi birkaç metre ile sınırlıdır (PCB içi veya kısa kablolar için idealdir).

Sonuç

I2C, modülerlik ve az pin tüketimi gerektiren gömülü sistem projelerinde can kurtarıcıdır. ESP32’nin güçlü donanımsal I2C birimi sayesinde, sensör ağları ve IoT cihazları geliştirirken veri yönetimini minimum kaynak tüketerek optimize edebilirsiniz.

WordPress SEO İpucu: Yazıyı yayınlarken öne çıkan görsel olarak bir ESP32 ve OLED ekran/I2C sensör bağlantı şeması eklemek tıklama oranını artıracaktır. “Etiketler” kısmına ESP32, I2C Protokolü, Arduino, Haberleşme Protokolleri, I2C Scanner ekleyebilirsin.

Leave a Reply

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir