Arduinoda zaten I2C desteği var, neden durduk yere “arduino sanal I2C” pinleri oluşturalım ki dediğinizi duyar gibiyiz ama bir saniye daha düşünün, ya olan I2C pinleri başka bir işlem için kullanılıyorsa? İşte tam bu sırada sanal I2C pinleri oluşturarak bu çakışmadan kurtulabiliyoruz!
Örneğin, Arduino UNO hakkında konuşalım, hali hazırda 6 analog pini bulunmakta. Bu pinlerin tamamını kullandığınızı düşünün, I2C pinleri ise Analog 4(SDA) ve Analog 5(SCL) pinleri ile kullanılabiliyor eğer I2C destekleyen bir iletişim yolu bağlamak isterseniz 4. ve 5. pini kullanımdan vazgeçmeniz gerekiyor fakat sanal bir I2C hattı ile bu durumu kolay bir şekilde halledebiliyoruz. Ayrıca OLED I2C hakkında yaptığımız içeriğimize buradan erişebilirsiniz.

Arduinonun standart I2C kütüphanesini “wire.h” ile çağırabilirsiniz. Arduino IDEsine standarta olarak yüklü gelmekte. Çoğu zaman kullanışlı ve bütün işlemleri doğru bir şekilde yapmasına rağmen
Wire kütüphanesi
bazı durumlardan dolayı kullanmak istemeyebilirsiniz bunlar:
- I2C yani A4 ve A5 pini başka bir amaçla kullanımda ise.
- Yetersiz FLASH ve RAM kapasitesi varsa.
- Saat hızı değişikliğiden etkilenmek istemiyorsanız(Arduino UNO 16MHz, ATtiny 1MHz).
Bu gibi durumlarda wire kütüphanesi yerine “sanal i2c” oluşturma kütüphanesini kullanmanız daha işlevsel olabilir. Aşağıdaki tabloda kütüphanelerin kullandığı bellek miktarlarını görebilirsiniz.
Wire; standart olarak gelen, SoftWire; Wire’ın hafifletilmiş hali, SoftI2CMaster; sanal I2C pinleri oluşturacağamız kütüphanedir.
| Wire | SoftI2CMaster | SoftWire | |
|---|---|---|---|
| Flash Hafızası | 1956 | 252 | 712 |
| RAM | 208 | 0 | 64 |
Arduino Sanal I2C Kütüphanesi
SoftI2CMaster, AVR assembler ile hazırlanmış, sanal pin oluşturmak için geliştirilmiş bir kütüphanedir, Arduino ile kullanmak GitHub klasörüne buradan erişebilirsiniz. Eğer ARM temelli bir mikroişlemci(örneğin Arduino DUE, Arduino ZERO ile kullanmak isterseniz C++ versiyonuna buradan ulaşabilirsiniz.
Kütüphanenin Özellikleri
- Sadece master modda kullanılabilir
- Güç pinleri hariç neredeyse tüm pinleri değiştirebilir
- Mikroişlemcinin dahili pull-up dirençlerini kullanabilir
- Wire kütüphanesi ile beraber kullanılabilir
- Aygıtın meşgul olup olmadığını kontrol edebilme
Örnek Kullanım
Sanal I2C Kullanımında Kısa Rehber
- Seçtiğiniz yeni SDA/SCL pinlerinin başka kesme veya zamanlama görevleriyle çakışmadığını doğrulayın.
- Uzun kabloda haberleşme yapıyorsanız uygun pull-up direnci (genelde 4.7k) kullanın.
- Kütüphane örneklerini önce tek bir sensörle test edip sonra çoklu cihaza geçin.
- Hata ayıklama sırasında I2C adres taraması yaparak bağlantıyı doğrulayın.
Yorum yapma özelliği, forum tarafından gelen istek sebebiyle kapatılmıştır. Lütfen tartışmalar ve sorularınız için topluluk forumumuza katılın.

