Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124

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.
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.
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 Pin | I2C Fonksiyonu |
| GPIO 21 | SDA |
| GPIO 22 | SCL |
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.
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.
#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
}
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.