I2C LCD Ekran (16x2) Kullanımı: Arduino, ESP32 ve Pico ile Yazı Yazdırma
16x2 I2C LCD ekran Arduino'ya nasıl bağlanır? 4 kablolu bağlantı, I2C adresini bulma (0x27, 0x3F), LiquidCrystal_I2C kütüphanesi, kontrast ayarı, özel karakter ve Türkçe harfler.
16x2 LCD ekran, 2 satır ve her satırda 16 karakter gösterebilen, Arduino dünyasının en yaygın ekranıdır. Sıcaklık ve mesafe gibi ölçüm değerlerini, menüleri, saatleri ve oyun skorlarını göstermek için kullanılır. Ekranın kendisi 16 pinlidir ve tek başına en az 6 dijital pin ister; arkasına lehimlenen küçük I2C modülü bu sayıyı yalnızca 2 veri kablosuna indirir. Bu yazıda I2C LCD'yi bağlamayı, adresini bulmayı ve ekrana istediğini yazdırmayı adım adım göreceksin.

LCD ekran nasıl çalışır?
Bu ekranlar HD44780 adlı bir sürücü yongayla çalışır. Her karakter 5x8 piksellik küçük bir kutuda çizilir ve yonganın içinde harf, rakam ve bazı simgelerden oluşan hazır bir karakter tablosu bulunur. Arduino sadece "şu konuma şu harfi yaz" komutunu gönderir; harfi piksellere dönüştürmek ekranın işidir. Arka plandaki LED ışık yazının karanlıkta da okunmasını sağlar, sıvı kristal katman ise pikselleri karartarak yazıyı oluşturur.
I2C nedir, neden kolaylaştırır?
I2C, iki kabloyla birden fazla cihazın konuşabildiği bir haberleşme yoludur: SDA veriyi, SCL ise saat sinyalini taşır. Her cihazın kendine ait bir adresi vardır; Arduino konuşmak istediği cihazı adresiyle çağırır. LCD modülleri genellikle 0x27 ya da 0x3F adresini kullanır. Aynı iki kabloya saat modülü, OLED ekran ve BME280 gibi sensörler de bağlanabilir; adresleri farklı olduğu sürece hepsi birlikte çalışır.

Modülün üzerindeki PCF8574 yongası, I2C'den gelen komutları ekranın beklediği 8 paralel sinyale çevirir. Ekranı I2C modülü olmadan da kullanabilirsin, ama o durumda 6 pin, bir potansiyometre ve çok sayıda kablo gerekir. Modül hem pin tasarrufu sağlar hem de devreni sadeleştirir.
Teknik özellikler
| Özellik | Değer |
|---|---|
| Görüntü | 16 sütun × 2 satır karakter |
| Karakter boyutu | 5 × 8 piksel |
| Sürücü yonga | HD44780 (ya da uyumlu) |
| I2C adaptörü | PCF8574 / PCF8574A |
| Varsayılan adres | 0x27 (PCF8574) ya da 0x3F (PCF8574A) |
| Besleme | 5 V, arka ışık açıkken yaklaşık 20–30 mA |
| Bağlantı | GND, VCC, SDA, SCL |
I2C LCD bağlantısı: Arduino, ESP32 ve Pico
Bağlantı tüm kartlarda aynı dört kablodur; değişen tek şey SDA ve SCL'nin hangi pinlerde olduğudur. Kartının I2C pinlerini görmek için Pinout aracına bakabilirsin.
| LCD pini | Arduino Uno / Nano | Arduino Mega | ESP32 | Raspberry Pi Pico |
|---|---|---|---|---|
| GND | GND | GND | GND | GND |
| VCC | 5V | 5V | VIN (5V) | VBUS (5V) |
| SDA | A4 | 20 | GPIO 21 | GP4 |
| SCL | A5 | 21 | GPIO 22 | GP5 |
I2C adresini bulma: tarayıcı kodu
Ekranının adresinden emin değilsen aşağıdaki kodu yükle. Kod 1'den 126'ya kadar bütün adresleri tek tek dener ve cevap veren her cihazın adresini Seri Monitör'e yazar. Ekranı tanımlarken bu adresi kullanacaksın.
1#include <Wire.h>
2
3void setup() {
4 Wire.begin();
5 Serial.begin(9600);
6 Serial.println("I2C taranıyor / scanning...");
7 for (byte addr = 1; addr < 127; addr++) {
8 Wire.beginTransmission(addr);
9 if (Wire.endTransmission() == 0) { // cihaz cevap verdi / device answered
10 Serial.print("Bulundu / found: 0x");
11 Serial.println(addr, HEX);
12 }
13 }
14}
15
16void loop() {
17}Kütüphaneyi kurmak ve ekrana yazı yazdırmak
Kütüphane Yöneticisi'nde LiquidCrystal I2C ara ve Frank de Brabander'in kütüphanesini kur. Aşağıdaki kod ilk satıra bir selam, ikinci satıra ise Arduino çalışmaya başladığından beri geçen süreyi saniye olarak yazar.
1#include <Wire.h>
2#include <LiquidCrystal_I2C.h>
3
4LiquidCrystal_I2C lcd(0x27, 16, 2); // adres, sütun, satır / address, columns, rows
5
6void setup() {
7 lcd.init();
8 lcd.backlight(); // arka ışığı aç / backlight on
9 lcd.setCursor(0, 0); // sütun 0, satır 0 / column 0, row 0
10 lcd.print("Merhaba Dunya!");
11}
12
13void loop() {
14 lcd.setCursor(0, 1); // ikinci satır / second row
15 lcd.print("Sure: ");
16 lcd.print(millis() / 1000); // saniye / seconds
17 lcd.print(" sn "); // eski rakamları sil / clear old digits
18 delay(200);
19}En çok kullanılan LCD komutları
| Komut | Ne yapar? |
|---|---|
| lcd.init() | Ekranı başlatır; setup() içinde bir kez çağrılır. |
| lcd.backlight() / lcd.noBacklight() | Arka ışığı açar ya da kapatır. |
| lcd.setCursor(sütun, satır) | Yazının başlayacağı konumu seçer; sayım 0'dan başlar. |
| lcd.print(değer) | Metin ya da sayı yazar. |
| lcd.clear() | Ekranı tamamen siler ve imleci başa alır. |
| lcd.scrollDisplayLeft() | Tüm görüntüyü bir karakter sola kaydırır. |
| lcd.blink() / lcd.cursor() | Yanıp sönen ya da alt çizgi imleç gösterir. |
| lcd.createChar(no, dizi) | 0–7 arası yuvaya özel karakter kaydeder. |
Kayan yazı yapmak
16 karakterden uzun bir metni göstermek için ekranı kaydırabilirsin. Aşağıdaki kod metni yazar ve her 300 milisaniyede bir sola kaydırır; böylece uzun bir mesaj tabela gibi ekrandan akar.
1#include <Wire.h>
2#include <LiquidCrystal_I2C.h>
3
4LiquidCrystal_I2C lcd(0x27, 16, 2);
5
6void setup() {
7 lcd.init();
8 lcd.backlight();
9 lcd.print("BlueGrays ile elektronik ogren"); // 16 karakterden uzun / longer than 16 chars
10}
11
12void loop() {
13 lcd.scrollDisplayLeft(); // bir adım sola / one step left
14 delay(300);
15}Özel karakter ve Türkçe harfler
HD44780'in karakter tablosunda ş, ğ, ı, ö, ü, ç gibi harfler yoktur; bunları yazdırmaya çalışırsan ekranda anlamsız işaretler görürsün. Çözüm, 8 adede kadar 5x8 piksellik özel karakter tanımlamaktır. Her satır bir bayt olarak yazılır, 1 olan bitler yanan pikseldir. Aşağıdaki örnek bir kalp simgesi çizer; aynı yöntemle ş ya da ğ harfini de çizebilirsin.
1byte heart[8] = {
2 0b00000,
3 0b01010,
4 0b11111,
5 0b11111,
6 0b01110,
7 0b00100,
8 0b00000,
9 0b00000
10};
11
12// setup() içinde / inside setup()
13lcd.createChar(0, heart); // 0. yuvaya kaydet / store in slot 0
14lcd.setCursor(15, 0);
15lcd.write(byte(0)); // kalbi göster / show the heartESP32 ve Raspberry Pi Pico ile I2C LCD
ESP32'de aynı Arduino kodu ve aynı kütüphane çalışır; Wire.begin() varsayılan olarak GPIO 21 (SDA) ve GPIO 22 (SCL) pinlerini kullanır. Farklı pinler istersen Wire.begin(SDA, SCL) yazabilirsin. Raspberry Pi Pico'da MicroPython ile çalışırken lcd_api.py ve pico_i2c_lcd.py adlı iki küçük dosyayı Pico'ya kopyalayıp şu şekilde kullanırsın:
1from machine import I2C, Pin
2from pico_i2c_lcd import I2cLcd # Pico'ya kopyalanan dosya / file copied to the Pico
3
4i2c = I2C(0, sda=Pin(4), scl=Pin(5), freq=400000)
5addr = i2c.scan()[0] # ilk bulunan adres / first found address
6lcd = I2cLcd(i2c, addr, 2, 16) # 2 satır, 16 sütun / 2 rows, 16 columns
7
8lcd.putstr("Merhaba Pico!")
9lcd.move_to(0, 1) # sütun 0, satır 1 / column 0, row 1
10lcd.putstr("BlueGrays")I2C LCD ile proje fikirleri
- Dijital termometre: Sıcaklık ve nemi ekrana yaz; sensör tarafı için DHT11 Sıcaklık ve Nem Sensörü yazısına bak.
- Mesafe göstergesi: HC-SR04 ile ölçtüğün mesafeyi santimetre olarak göster; ayrıntılar HC-SR04 Mesafe Sensörü yazısında.
- Dijital voltmetre: Analog pinden okuduğun gerilimi ekranda göster.
- Şifreli kilit: Tuş takımından girilen şifreyi ekranda yıldızla göster.
- Menü sistemi: Bir potansiyometre ya da iki butonla ekrandaki seçenekler arasında gez.
- Mini oyun: Özel karakterlerle çizilen bir koşucu karakteri engellerden kaçır.
Sık yapılan hatalar ve çözümleri
- Ekran yanıyor ama yazı yok: Kontrast ayarlı değil; trimpotu çevir.
- Üst satırda dolu kareler: Ekran enerji alıyor ama başlatılmamış; adres yanlış, SDA ve SCL ters ya da lcd.init() çağrılmamış olabilir.
- Yanlış adres: Kodda 0x27 yazıp ekranın 0x3F olması; tarayıcı koduyla gerçek adresi bul.
- Eski rakamların kalması: 100'den 99'a düşen bir sayı ekranda 990 gibi görünür; sayıdan sonra birkaç boşluk yaz. lcd.clear() da işe yarar ama yavaştır ve döngüde sık kullanılırsa ekran titrer.
- Türkçe harflerin bozuk çıkması: Ekranın tablosunda bu harfler yoktur; özel karakter tanımla ya da Türkçe karakter kullanma.
- Rastgele bozulan yazılar: Uzun ve gevşek kablolar ya da motor gibi parazit üreten parçalar I2C hattını bozabilir; kabloları kısa tut ve motorları ayrı beslemeyle çalıştır.
Ekranı bir sensörle birleştirmek, ilk gerçek projeni yapmanın en hızlı yoludur. BlueGrays uygulamasında I2C LCD kullanan onlarca projeyi devre şemaları ve hazır kodlarıyla bulabilirsin; değerleri bir düğmeyle değiştirmek için Potansiyometre Nedir? yazısı da işine yarayacak.
Sıkça sorulan sorular
LCD ekranım neden sadece kare gösteriyor?
Üst satırdaki dolu kareler ekranın enerji aldığını ama başlatılmadığını gösterir. Adres yanlış olabilir, SDA ve SCL yer değiştirmiş olabilir ya da kontrast çok yüksektir. Önce I2C tarayıcı koduyla adresi doğrula, sonra trimpotu ayarla.
I2C LCD'nin adresi 0x27 mi 0x3F mi?
PCF8574 yongalı modüller genelde 0x27, PCF8574A yongalı modüller 0x3F adresini kullanır. Hangisi olduğunu en kolay I2C tarayıcı koduyla öğrenirsin; kodda LiquidCrystal_I2C lcd(0x3F, 16, 2) şeklinde değiştirmen yeterlidir.
Aynı Arduino'ya iki LCD ekran bağlanabilir mi?
Evet. Modülün üzerindeki A0, A1 ve A2 lehim pedleri kısa devre edilerek adres değiştirilir; böylece aynı iki kabloya 8 taneye kadar LCD bağlanabilir. Kodda her ekran için farklı adresle ayrı bir nesne tanımlarsın.
20x4 LCD için de aynı kod çalışır mı?
Evet. Tanımlamayı LiquidCrystal_I2C lcd(0x27, 20, 4) yapman yeterlidir; satır numaraları 0 ile 3 arasında, sütunlar 0 ile 19 arasında olur.
LCD ekranda Türkçe karakter nasıl yazılır?
Ekranın hazır karakter tablosunda ş, ğ, ı gibi harfler yoktur. lcd.createChar() ile her harfi 5x8 piksellik özel karakter olarak çizip lcd.write() ile yazdırabilirsin. Aynı anda en fazla 8 özel karakter tanımlanabildiğini unutma.
LCD mi OLED ekran mı kullanmalıyım?
LCD ucuz, güneş altında okunaklı ve metinle sayı göstermek için idealdir. OLED daha küçük, kontrastı yüksek ve grafik ile simge çizebilir ama uzun süre aynı görüntüde kalırsa iz bırakabilir. Metin için LCD, grafik için OLED seç.
Bu yazıdan sonra yapabileceğin projeler
Tüm projeleri gör
I2C İle LCD Ekran Kullanımı
I2C modülü sayesinde sadece 2 kablo (SDA, SCL) ile LCD ekranı kontrol ederek mesaj yazdıran proje. I2C protokolü ile pin tasarrufu sağlamayı öğretir.

2x16 LCD Ekrana Mesaj Yazdırma
2x16 LCD ekrana karakter karakter yazı yazdıran ve ekranı temizleyerek döngüsel mesaj gösteren proje. LCD kütüphanesi, setCursor ve print fonksiyonlarının kullanımını öğretir.

LCD İle Sağa Sola Çarpan Yazı Yazmak
LCD ekranda yazıyı sağa sola hareket ettirerek duvarlara çarpan animasyon efekti oluşturan proje. Dinamik setCursor konumlandırma ve metin animasyonu mantığını öğretir.

ESP32 I2C LCD Ekran (16x2)
Bu projede 16x2 karakter LCD ekranı I2C protokolü üzerinden ESP32'ye bağlayarak metin görüntülüyoruz. I2C sayesinde sadece 2 data pini (SDA ve SCL) ile ekranı kontrol edebiliyoruz; klasik paralel bağlantıdaki 6+ pin israfı ortadan kalkıyor. Kod ilk satıra sabit bir mesaj, ikinci satıra ise her saniye artan bir sayaç yazdırıyor. Ayrıca başlangıçta I2C tarayıcı çalıştırarak ekranın adresini Serial Monitor'a yazdırıyoruz (genelde 0x27 veya 0x3F).

DHT11 İle Sıcaklık Ve Nem
DHT11 sensörü ile ortam sıcaklığı ve nem değerini ölçerek I2C LCD ekranda gösteren proje. Dijital sıcaklık/nem sensörü kullanımını öğretir.

LCD Ekran ile Dijital Voltmetre
Gerilim bölücü devresi ile 0-55V aralığında voltaj ölçümü yaparak sonucu I2C LCD ekranda gösteren dijital voltmetre projesi. Gerilim bölücü formülü ve analog ölçüm kalibrasyonunu öğretir.

4x4 Keypad LCD Ekran Şifre Uygulaması
4x4 keypad ile şifre girişi yaparak doğruysa servo ile kapı açan, yanlışsa kırmızı LED yakan güvenlik projesi. Şifre karşılaştırma ve servo-LCD-keypad entegrasyonunu öğretir.

Arduino LCD Koşucu Oyunu
6x2 karakter LCD ekranda çalışan yandan kaydırmalı sonsuz koşucu oyunu. Kahraman otomatik olarak koşar, oyuncu butona basarak engellerin üzerinden zıplar. Alt ve üst sırada rastgele engeller oluşur. Pasif buzzer ile açılış melodisi, zıplama sesi, 50 puan kutlama sesi ve oyun sonu melodisi çalar. Açılışta "BlueGrays — Arduino Projects" splash ekranı gösterilir. Skor ekranın sağ üst köşesinde anlık olarak güncellenir.
Diğer yazılar
16x2 LCD'yi I2C modülüyle yalnızca 4 kabloyla bağlamayı, adresini bulmayı, yazı ve sayı yazdırmayı, kayan yazı yapmayı ve kendi simgelerini çizmeyi öğren.

