Arduino – Haberleşme protokolleri – i2c – SDA, SCL hakkında detaylara yer vereceğiz.
Daha önceki yazılarımızda UART ve SPi haberleşmelere değinmiştik.
Arduino, diğer Arduino veya sensörlerle haberleşmek için bazı haberleşme protokolleri kullanır. Bu protokollerden birisi de I2C’dir. I2C (Inter-Integrated Circuit), seri haberleşme türlerinden senkron haberleşmeye bir örnektir. Haberleşme için toprak hattı dışında SDA ve SCL olmak üzere iki hatta ihtiyaç duyulmaktadır. Hat sayısının fazla olması nedeniyle, uzun mesafeli haberleşmelerde tercih edilmez. Genellikle kısa mesafeli ve düşük veri aktarım hızının yeterli olduğu yerlerde kullanılır.
I2C haberleşmesinde, haberleşmeyi kontrol eden master cihazı bulunur. Her haberleşmede bir tane master bulunmalıdır. Haberleşmenin sağlanabilmesi için haberleşme hattına en az bir adet slave (köle) cihaz bağlanmalıdır. Hatta bağlanan birden fazla slave cihazlardan hangisinin veri aktaracağına, master cihaz karar verir. Böylece hat sayısında bir değişiklik olmadan birden fazla cihazla haberleşme sağlanır.
Master ve slave cihazların aynı besleme hattına bağlanmasına gerek yoktur. Fakat iletişimin sağlanması için toprak hatlarının aynı olması gerekir. Bunun yanında veri aktarımı için SDA (Serial Data Line) ve SCL (Serial Clock) olmak üzere iki adet haberleşme hattı bulunur. Bu hatlardan SDA, cihazlar arasındaki veri aktarımının sağlandığı hattır. Bu hatta çift yönlü veri aktarımı olur. Hatta aktarılan verilerin senkronizasyonu, SCL hattı tarafından gerçekleştirilir. SCL hattında master cihaz tarafından üretilen saat sinyali bulunur. SDA hattındaki haberleşme, bu sinyale göre düzenlenir.
Haberleşmenin tüm hat boyunca hatasız bir şekilde sağlanabilmesi için SDA ve SCL hatları, pull-up dirençlerle VCC hattına bağlanmalıdır. SDA ve SCL pinleri, kullanılan Arduino türüne göre değişiklik göstermektedir. Arduino türlerine göre SDA ve SCL pinleri aşağıdaki tabloda gösterilmiştir.
Arduino türü | SDA pini | SCL pini |
Arduino Uno | A4 | A5 |
Arduino Mega | 20 | 21 |
Arduino Leonardo | 2 | 3 |
Arduino Due | 20 | 21 |
Arduino Nano | A4 | A5 |
Örnek olarak 3 adet i2c modülüne sahip ekranları tek bir arduino ile kontrol edeceğiz.
//Görsel İşitsel Teknoloji Kanalı //wwww.teknikerler.com //Kerim Arı Youtube kanalı i2c Kodları - kullanımı örnek Kodları #include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x3F,16,2); LiquidCrystal_I2C lcd_4(0x27,20,4); int pot = A0; #include <SPI.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #define OLED_RESET 4 Adafruit_SSD1306 display(OLED_RESET); int sayac=0; void setup() { lcd.init(); lcd.backlight(); lcd.setCursor(1,0); lcd.print("Merhaba 2x16"); lcd.setCursor(6,1); lcd.print("GiT"); delay(2000); lcd.clear(); lcd_4.init(); lcd_4.backlight(); lcd_4.setCursor(3,0); lcd_4.print("Merhaba 4x20"); lcd_4.setCursor(8,1); lcd_4.print("GiT"); delay(2000); lcd_4.clear(); display.begin(SSD1306_SWITCHCAPVCC, 0x3C); display.clearDisplay(); display.setTextColor(WHITE); display.setTextSize(2); display.setCursor(2,20); display.println("Merhaba"); display.display(); delay(4000); } void loop() { int pot_dgr = analogRead(pot); lcd.clear(); lcd.setCursor(1,0); // lcd.autoscroll(); lcd.print("EKRAN TEST 2X16"); lcd.setCursor(6,1); lcd.print(pot_dgr*2); delay(1000); lcd_4.clear(); lcd_4.setCursor(1,0); // lcd.autoscroll(); lcd_4.print("EKRAN TEST 4 X 20"); lcd_4.setCursor(8,1); lcd_4.print(pot_dgr); lcd_4.setCursor(4,2); lcd_4.print("KONTROL i2C"); lcd_4.setCursor(8,3); lcd_4.print("0x27"); delay(1000); display.begin(SSD1306_SWITCHCAPVCC, 0x3C); display.clearDisplay(); display.setTextColor(WHITE); display.setTextSize(3); display.setCursor(2,10); display.println("Merhaba"); for(int i=0;i<10;i++) { sayac++; display.setTextSize(3); display.setCursor(60,45); display.println(sayac); display.display(); delay(250); display.clearDisplay(); } }Videoyu İzlemek İçin Tıklayınız