ESP32 I2C LCD Ekran Kullanımı
ESP32 I2C LCD ekran kullanımı, Arduino geliştirme kartlarında alışkın olduğumuz kütüphaneler ve aynı fonksiyonlar ile kullanılabiliyor. Bu yazıda, Arduino IDE kullanarak ESP32 ile I2C LCD’nin nasıl kullanılacağını anlatıyoruz. Ekranı nasıl bağlayacağınızı, kitaplığı nasıl kuracağınızı ve LCD’ye metin yazmak için örnek kodu nasıl deneyeceğinizi göstereceğiz:
Bu yazıda 16×2 I2C LCD ekran kullanacağız, ancak diğer boyutlardaki LCD’leri de kullanabilirsiniz. Ayrıca Arduino ile LCD ekran kullanımını anlattığımız bu yazıya da göz atabilirsiniz. Farklı I2X LCD ekran kütüphaneleri kullanabilirsiniz burada verdiğimiz kodlar ile uyumlu çalışmayabilir.
I2C LCD kullanmanın avantajı, kablolamanın gerçekten basit olmasıdır. Sadece SDA ve SCL pinlerini bağlamanız yeterlidir.
Ek olarak, LCD’deki arka plan ve karakterler arasındaki kontrastı ayarlamak için kullanabileceğiniz yerleşik bir potansiyometre ile birlikte gelir. “Normal” bir LCD’de, kontrastı ayarlamak için devreye bir potansiyometre ya da direnç eklemeniz gerekir.
Gerekli Malzemeler
- ESP32 Geliştirme Kartı
- 16×2 I2C LCD Ekran
- Bağlantı kabloları(Jumper)
Bağlantı Şeması
Aşağıdaki tabloyu da bağlantı referansı olarak kullanabilirsiniz.
ESP32 | I2C LCD Ekran |
---|---|
GND | GND |
VIN | VCC |
GPIO 21 | SDA |
GPIO 22 | SCL |
Eğer ESP32 geliştirme kartı yerine ESP8266 tabanlı bir geliştirme kartı kullanıyorsanız bu bağlantıları yapabilirsiniz:
ESP8266 için Bağlantı Şeması
Bir sonraki şematik diyagramı izleyerek LCD’nizi ESP8266’ya da bağlayabilirsiniz. ESP8266 varsayılan I2C pinlerini kullanıyoruz (GPIO 4 ve GPIO 5).
Aşağıdaki tabloyu da bağlantı referansı olarak kullanabilirsiniz.
ESP8266 | I2C LCD Ekran |
---|---|
GND | GND |
VIN | VCC |
GPIO 4 (D2) | SDA |
GPIO 5 (D1) | SCL |
Arduino IDE Hazırlığı
Projeye devam etmeden önce Arduino IDE’ye ESP32 veya ESP8266 eklentisini kurmanız gerekiyor.
ESP32 ile Arduino IDE
Arduino IDE’nizi ESP32 ile çalışmaya hazırlamak için daha önce hazırladığımız kılavuza bakabilirsiniz:
ESP32 Kullanımı ve Arduino IDE Desteği
ESP8266 ile Arduino IDE
Arduino IDE’nizi ESP8266 ile çalışmaya hazırlamak için daha önce hazırladığımız kılavuza bakabilirsiniz:
NodeMCU: Arduino IDE Desteği, Flash Program Yükleme, Yazılım Güncelleme
Gerekli Kütüphaneler
I2C LCD ile çalışan birkaç farklı kütüphane var. GitHub’ta johnrickman kullanıcı isimli kişinin paylaştığı bu kütüphaneyi kullanıyoruz. Kitaplığı kurmak için bu adımları izleyin:
- LiquidCrystal_I2C kütüphanesini indirmek için buraya tıklayın. İndirilenler klasörünüzde bir .zip klasörü olur.
- .zip klasörünü açın ve LiquidCrystal_I2C-master klasörünü çıkarın.
- Klasörünüzü
LiquidCrystal_I2C-master‘dan LiquidCrystal_I2C olarak yeniden adlandırın - LiquidCrystal_I2C klasörünü Arduino IDE’nin kütüphane klasörüne taşıyıni
- Son olarak, Arduino IDE’nizi yeniden açın
Eğer kütüphane kurulumunda problem yaşıyorsanız, bu yazımızda kütüphane ekleme, kurma gibi detayları anlattık.
I2C Adresini Bulmak
LCD’de ekranı kullanmaya başlamdan önce LCD I2C adresini bulmanız gerekir. LCD, ESP32’ye düzgün bir şekilde bağlıyken, aşağıdaki I2C Tarayıcı kodunu yükleyin.
I2C Tarayıcı kodu, I2C cihazlarının sayısını ve I2C cihazlarının adresini bulmak için kullanılır. Bu kodu kartınıza yükledikten sonra seri ekranı açarak adresi öğrenebilirsiniz. Eğer bağlantılar hatalı ya da I2C devresi bozuksa I2C cihazı bulunamaz. Kodu yükledikten sonra seri ekranı açıp kartınızın, “EN” yani reset butonuna basın ve seri ekrandaki kodu bir yere yazın.
Adres bulunduktan sonra “kod” kısmındaki gerekli adresi değiştirmelisiniz.
Not: Bazı I2C modüllerinin arkasında hangi adrese sahip olduğunu yazmakta hatta I2C adresini değiştirmek için direnç bulunmaktadır.
#include <Wire.h> void setup() { Wire.begin(); Serial.begin(9600); Serial.println("\nI2C Tarayici"); } void loop() { byte error, address; int Devices; Serial.println("Taraniyor..."); Devices = 0; for (address = 1; address < 127; address++ ) { Wire.beginTransmission(address); error = Wire.endTransmission(); if (error == 0) { Serial.print("0x adresinde I2C cihazı bulundu"); if (address < 16) Serial.print("0"); Serial.print(address, HEX); Serial.println(" !"); Devices++; } else if (error == 4) { Serial.print("0x adresinde bilinmeyen hata"); if (address < 16) Serial.print("0"); Serial.println(address, HEX); } } if (Devices == 0) Serial.println("I2C cihazı bulunamadı\n"); else Serial.println("bitti\n"); delay(5000); }
Bizim ekranımızın adresi 0x27 olarak çıktı. Benzer bir 16×2 ekran kullanıyorsanız, muhtemelen aynı adresi alırsınız.
LCD’de Statik Metin Görüntüleme
LCD’de statik metin görüntülemek çok basittir. Tek yapmanız gereken karakterlerin ekranda görünmesini istediğiniz yeri seçmek ve ardından mesajı ekrana göndermek.
İşte “Hello, World” görüntüleyen çok basit bir kod örneği.
#include <LiquidCrystal_I2C.h> int lcdColumns = 16; int lcdRows = 2; LiquidCrystal_I2C lcd(0x27, 16, 2); //tarama kodunda bulduğunuz adres,LCD ekran boyutları 16x2 void setup() { lcd.init(); lcd.backlight(); } void loop() { lcd.setCursor(0, 0); lcd.print("Hello, World!"); delay(1000); lcd.clear(); lcd.setCursor(0, 1); lcd.print("Hello, World!"); delay(1000); lcd.clear(); }
Mesajı ilk satırda ve ardından ikinci satırda görüntüler.
Bu basit kodda size LiquidCrystal_I2C kütüphanesindeki en kullanışlı ve önemli işlevleri gösteriyoruz. Öyleyse, kodun nasıl çalıştığına hızlıca bir göz atalım:
Öncelikle, LiquidCrystal_I2C kütüphanesini eklememiz gerekiyor:
#include <LiquidCrystal_I2C.h>
Ardından, ekranın I2C adresini, sütun sayısını ve satır sayısını ayarlamanız gerekir. Önceki adımda bulduğunuz görünen adresi kullanmalısınız.
LiquidCrystal_I2C lcd(0x27, 16, 2);
setup() içinde, ekranı init() yöntemiyle başlatırız:
lcd.init();
Ardından, ekrandaki karakterleri okuyabilmek için LCD arka ışığını açarız.
lcd.backlight();
Ekranda bir mesaj görüntülemek için, önce imleci mesajınızın yazılmasını istediğiniz yere ayarlamanız gerekir. Aşağıdaki satır, imleci ilk sütuna, ilk satıra ayarlar.
lcd.setCursor(0, 0);
Not: 0, ilk sütuna, 1 ikinci sütuna geçiş yapmaya sağlar ve bu şekilde devam eder…
Ardından, son olarak print() yöntemini kullanarak mesajınızı ekrana yazdırabilirsiniz.
lcd.print("Hello, World!");
Bir saniye bekleyin ve ardından clear() yöntemiyle ekranı temizleyin.
lcd.clear();
Bundan sonra, imleci yeni bir konuma ayarlayın: birinci sütun, ikinci satır.
lcd.setCursor(0,1);
Daha sonra işlem tekrarlanır.
İşte ekranda gerçekleşecek ve yazılacak işlevlerin bir özeti:
- lcd.init(): ekranı başlatır
- lcd.backlight(): LCD arka ışığını açar
- lcd.setCursor(int sütun, int satır): imleci belirtilen sütun ve satıra ayarlar
- lcd.print(String mesajı): mesajı ekranda görüntüler
- lcd.clear(): ekranı temizler
Bu kod, 16 karakterden uzun olmayan statik metni görüntülemek için kullanılır.
Ekranda Kayan Yazı Görüntüleme
16 karakterden uzun mesajları görüntülemek istediğinizde, LCD’de kayan metin özellikle kullanışlıdır. Kütüphane, metni kaydırmanıza izin veren yerleşik işlevlerle birlikte gelir. Ancak, birçok kişi bu işlevlerle ilgili sorunlar yaşar çünkü:
- İşlev, metni her iki satırda kaydırır. Yani sabit bir sıranız ve kayan bir sıranız olamaz;
- 16 karakterden uzun mesajları görüntülemeye çalışırsanız düzgün çalışmaz.
Bu nedenle, projelerinizde daha uzun mesajları kaydırmak için kullanabileceğiniz bir işleve sahip örnek bir kod oluşturduk.
Aşağıdaki kod, ilk satırda statik bir mesaj ve ikinci satırda 16 karakterden uzun kayan bir mesaj görüntüler.
int lcdColumns = 16; int lcdRows = 2; LiquidCrystal_I2C lcd(0x27, lcdColumns, lcdRows); String sabitmesaj = "Sabit mesaj"; String kayanyazi = "16 karakterden daha uzun bir mesaj, devreyakan.com"; void scrollText(int row, String message, int delayTime, int lcdColumns) { for (int i = 0; i < lcdColumns; i++) { message = " " + message; } message = message + " "; for (int pos = 0; pos < message.length(); pos++) { lcd.setCursor(0, row); lcd.print(message.substring(pos, pos + lcdColumns)); delay(delayTime); } } void setup() { lcd.init(); lcd.backlight(); } void loop() { lcd.setCursor(0, 0); lcd.print(sabitmesaj); scrollText(1, kayanyazi, 250, lcdColumns); }
Önceki bölümü okuduktan sonra, bu kodun nasıl çalıştığına aşina olmalısınız, bu yüzden yeni oluşturulan fonksiyona bir göz atacağız: scrollText()
void scrollText(int row, String message, int delayTime, int lcdColumns) { for (int i=0; i < lcdColumns; i++) { message = " " + message; } message = message + " "; for (int pos = 0; pos < message.length(); pos++) { lcd.setCursor(0, row); lcd.print(message.substring(pos, pos + lcdColumns)); delay(delayTime); } }
Bu işlevi kullanmak için dört argüman iletmelisiniz:
- row: Metnin görüntüleneceği satır numarası
- message: Kaydırılacak mesaj
- delayTime: Her karakter değişimi arasındaki gecikme. Daha yüksek gecikme süreleri, daha yavaş metin kaydırmaya ve daha düşük gecikme süreleri, daha hızlı metin kaydırmaya neden olur.
- lcdColumns: LCD’nizin sütun sayısı
Kodumuzda scrollText() işlevini şu şekilde kullanıyoruz:
scrollText(1, messageToScroll, 250, lcdColumns);
messageToScroll değişkeni, 250 ms’lik bir gecikme süresi ile ikinci satırda (1 ikinci satıra karşılık gelir) görüntülenir.
Ekranda Özel Karakterleri Görüntüleme
16×2 LCD’de karakterleri görüntüleyebileceğiniz 32 blok vardır. Her blok 5×8 minik piksellerden oluşur. Her küçük pikselin durumunu tanımlayarak özel karakterleri görüntüleyebilirsiniz. Bunun için her pikselin durumunu tutmak için bir bayt değişkeni oluşturabilirsiniz.
Özel karakterinizi oluşturmak için, karakteriniz için bayt değişkeni oluşturmak üzere buraya gidebilirsiniz. Örneğin, bir kalp:
Bayt değişkenini kodunuza kopyalayın (setup()’dan önce). Buna kalp diyebilirsiniz:
byte kalp[8] = {
0b00000,
0b01010,
0b11111,
0b11111,
0b11111,
0b01110,
0b00100,
0b00000
};
Ardından setup() içinde createChar() işlevini kullanarak özel bir karakter oluşturun. Bu işlev, char değişkenini aşağıdaki gibi tahsis edecek bir konumu argüman olarak kabul eder:
lcd.createChar(0, kalp);
Ardından, loop() içinde, imleci karakterin görüntülenmesini istediğiniz yere ayarlayın:
lcd.setCursor(0, 0);
Karakteri görüntülemek için write() yöntemini kullanın. Karakterin tahsis edildiği konumu aşağıdaki gibi iletin:
lcd.write(0);
Özetle, bu yazıda size Arduino IDE ile ESP32/ESP8266 ile bir I2C LCD ekranın nasıl kullanılacağını gösterdik: statik metin, kayan metin ve özel karakterlerin nasıl görüntüleneceğini. Bu eğitim aynı zamanda Arduino kartıyla da çalışır, Arduino I2C pinlerini kullanmak için pin atamasını değiştirmeniz yeterlidir.
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.