Projelerinizde birden fazla sensör veya ekran kullanmak istediğinizde, her cihaz için ayrı ayrı dijital pin kullanmak kısa sürede pinlerin bitmesine neden olur. İşte I2C (Inter-Integrated Circuit) protokolü tam bu noktada imdadımıza yetişiyor. Sadece iki adet veri yolu kullanarak (SDA ve SCL) 120'den fazla cihazı aynı anda kontrol edebilirsiniz.
I2C Protokolü Nasıl Çalışır?
I2C haberleşmesinde bir adet Master (Genellikle Arduino) ve bir veya birden fazla Slave (Sensör, LCD ekran, RTC modülü) bulunur.
SDA (Serial Data): Verilerin iletildiği hat.
SCL (Serial Clock): Veri akışını senkronize eden saat sinyali hattı.
Her I2C cihazının kendine has bir adresi vardır (Örneğin: 0x27 veya 0x3C). Master cihaz, hangi adrese veri göndereceğini veya hangi adresten veri alacağını bu adresleme sistemiyle belirler. Böylece hat üzerindeki diğer cihazlar sessiz kalırken sadece hedefteki sensör konuşur.
Neden I2C Kullanmalısınız?
Pin Tasarrufu: Kaç cihaz bağlarsanız bağlayın sadece 2 pin işgal eder.
Kolay Bağlantı: Cihazlar birbirine paralel olarak aynı hatta bağlanabilir.
Yaygın Destek: Piyasadaki ekranların, dijital jiroskopların ve hassas sıcaklık sensörlerinin %90'ı bu protokolü destekler.
Arduino'da I2C Kullanımı: Wire Kütüphanesi
Arduino'da I2C haberleşmesini yönetmek için yerleşik olarak gelen Wire.h kütüphanesi kullanılır.
#include <Wire.h>
void setup() {
Wire.begin(); // I2C veri yolunu Master olarak başlat
Serial.begin(9600);
}
void loop() {
Wire.beginTransmission(0x3C); // 0x3C adresindeki cihaza bağlan
Wire.write("Merhaba"); // Veri gönder
Wire.endTransmission(); // Bağlantıyı sonlandır
delay(500);
}
Bağladığınız bir sensörün adresini bilmiyorsanız veya çalışıp çalışmadığından emin değilseniz, "I2C Scanner" kodunu kullanarak bağlı olan tüm cihazların adreslerini seri port ekranında görebilirsiniz. Eğer tarama sonucunda hiçbir adres çıkmıyorsa, bağlantılarınızı veya pull-up dirençlerini kontrol etmeniz gerekir.
Önemli Not: I2C hatlarında hattın boşta olduğu durumlarda sinyalin kararlı kalması için SDA ve SCL hatlarına genellikle 4.7k ohm'luk pull-up dirençleri bağlanır. Çoğu Arduino modülünde (ekranlar vb.) bu dirençler kart üzerinde hazır gelir, ancak kendi devrenizi kuruyorsanız bunu unutmamalısınız.
I2C Sacanner kodu:
#include <Wire.h>
void setup() {
Wire.begin();
Serial.begin(9600);
while (!Serial); // Seri portun hazır olmasını bekle
Serial.println("\nI2C Tarayici Baslatiliyor...");
}
void loop() {
byte hata, adres;
int cihazSayisi;
Serial.println("Taraniyor...");
cihazSayisi = 0;
for (adres = 1; adres < 127; adres++) {
// Adreslere sırayla bağlantı isteği gönderiyoruz
Wire.beginTransmission(adres);
hata = Wire.endTransmission();
if (hata == 0) {
Serial.print("I2C cihaz bulundu! Adres: 0x");
if (adres < 16)
Serial.print("0");
Serial.print(adres, HEX);
Serial.println(" !");
cihazSayisi++;
}
else if (hata == 4) {
Serial.print("Bilinmeyen hata: 0x");
if (adres < 16)
Serial.print("0");
Serial.println(adres, HEX);
}
}
if (cihazSayisi == 0)
Serial.println("Hicbir I2C cihazi bulunamadi.\n");
else
Serial.println("Tarama bitti.\n");
delay(5000); // 5 saniyede bir tekrarla
}
Nasıl Kullanılır?
Arduino'yu bilgisayara bağla. I2C cihazının (LCD, Sensör vb.) SDA ve SCL pinlerini Arduino'nun ilgili pinlerine bağladığından emin ol (Uno için A4 ve A5). Kodu yükle ve Seri Port Ekranını (Serial Monitor) aç. Baud rate ayarının 9600 olduğundan emin ol. Ekranda 0x... şeklinde bir çıktı göreceksin. İşte o senin cihazının gerçek adresidir. Bu kod, sitendeki "I2C Haberleşme" yazısının altına "Hata Ayıklama" veya "Pratik İpucu" olarak eklendiğinde içeriği çok daha profesyonel gösterecektir.
Henüz yorum yapılmamış. İlk yorumu siz yapın!