Arduino projelerimizde I2C modüllerini kullanırken cihazın adres numarasını biliyor olmamız gerekiyor. Çoğu yaygın modülün hangi I2C adresine sahip olduğu biliniyor ve internette paylaşılan örneklerden bulunabiliyor.
Ancak I2C adresi hakkında hiçbir fikrimiz olmayan bir modül ile karşılaştığımızda veya modülümüz düşündüğümüz adres ile çalışmadığında ne yapmalıyız? Bu yazıda Arduino’ya bağlı I2C destekli modüllerin adres numaralarını bulmayı öğreneceğiz.
I2C iki elektronik cihaz arasında iletişim kurulmasını sağlayan özgün bir protokol. Bir adet master (sahip) cihaz ve teoride 127 adede kadar slave (köle) cihaz kullanımına izin veriyor. Arduino’muz bu durumda master olarak çalışıyor ve kullandığımız I2C destekli modüller de slave modunda üretiliyor.
I2C destekli modüller Arduino Uno ve Nano’ya SDA (veya A4) ve SCL (veya A5) adı verilen iki pin ile bağlanır. Arduino Mega 2560 kullanıyorsak D20 (SDA) ve D21 (SCL) pinlerini kullanmalıyız.
Aşağıdaki sketch olası tüm I2C adreslerini kontrol ediyor ve cihaz bulduğu adresleri Seri Port Ekranı üzerinde listeliyor.
Arduino’da iyi olmak için öncelikle elektronikte iyi olmak gerekir. Türkiye’nin en iyi temel elektronik eğitim seti ARDUINO ÖNCESİ TEMEL ELEKTRONİK EĞİTİM VE DENEY SETİ‘ni keşfedin. Gereksiz bilgilerden arındırılmış basit ve eğlenceli anlatımla ELEKTRONİK öğrenin ve Arduino’ya METE HOCA farkıyla güçlü başlayın!
Sketch kodunu kopyalamak için pencerenin sağ üst köşesindeki butona tıklayabilir veya buraya tıklayarak ZIP dosyası olarak indirebilirsiniz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
/* I2C Arduino Modüllerinin Adres Numarası Nasıl Bulunur? I2C veri iletişim protokolünün detaylı açıklaması ve örnek projelerini web sitemizde bulabilirsiniz. Mete Hoca https://www.metehoca.com/ */ #include "Wire.h" // I2C'yi kullanan dahili kütüphaneyi ekliyoruz int hata, adres, cihaz_sayisi; // Değişkenlerimizi tanımlıyoruz void setup() { Wire.begin(); // Wire kütüphanesi başlatılıyor Serial.begin(9600); // Seri Port Ekranı başlatılıyor } void loop() { cihaz_sayisi = 0; for (adres = 1; adres < 127; adres++ ) { // Tüm adresler taranıyor Wire.beginTransmission(adres); hata = Wire.endTransmission(); if (hata == 0) { // Bulunan cihazı görüntüleyelim Serial.print("I2C cihaz bulundu! | Adres: 0x"); if (adres < 16) Serial.print("0"); // Cihaz adresi tek hane ise başına 0 koyalım Serial.println(adres, HEX); cihaz_sayisi++; } else if (hata == 4) { // Bu adreste bilinmeyen bir hata oluştu Serial.print("Bu adreste bilinmeyen bir hata oluştu: 0x"); if (adres < 16) Serial.print("0"); Serial.println(adres, HEX); } } if (cihaz_sayisi == 0) // Hiçbir cihaz bulunamadı Serial.println("Hiçbir I2C cihaz bulunamadı..."); delay(3000); } |