- I2C İletişim Protokolü nedir?
- Gerekli malzemeler
- I2C Modülü
- Devre şeması
- I2C Denetleyici Adresini bulmak için kod
- ESP32 için kod
Önceki öğreticide, OLED, 5 pin kullanan SPI iletişimi kullanılarak ESP32 ile arayüzlenmiştir. Bu eğitimde, I2C iletişimi yardımıyla sadece 2 pin kullanarak 16x2 LCD'yi ESP32 ile arayüzledik. ESP32 tarafından kullanılan pim sayısını azaltır, böylece farklı sensörlerle arabirim oluşturmak için daha fazla sayıda ESP32 pini boş kalır.
I2C İletişim Protokolü nedir?
I2C terimi " Inter Integrated Circuits" anlamına gelir. Normalde IIC veya I kare C veya hatta bazı yerlerde 2 telli arayüz protokolü (TWI) olarak belirtilir, ancak hepsi aynı anlama gelir. I2C senkronize bir iletişim protokolüdür, yani bilgiyi paylaşan her iki cihaz da ortak bir saat sinyalini paylaşmalıdır. Bilgiyi paylaşmak için yalnızca iki kablo, SDA ve SCL vardır, bunların dışında saat sinyali için SCL kullanılır ve SDA, veri göndermek ve almak için kullanılır.
I2C1602 LCD Denetleyicinin dahili olduğu I2C LCD modülünü satın alabilir veya ESP32 ile 16x2 LCD arabirimine I2C denetleyicisi satın alabilirsiniz.
Gerekli malzemeler
- ESP32
- 16 * 2 LCD ekran
- I2C LCD denetleyici
- Teller
- Breadboard
I2C Modülü
I2C denetleyicide, iki kablolu çift yönlü I2C veri yolu seri saati (SCL) ve seri veriler (SDA) aracılığıyla genel amaçlı uzak G / Ç genişletme sağlayan bir IC PCF8574 bulunur. Çok kullanışlı bir IC'dir ve LED işaret panolarında, ekranlarda, Tuş takımlarında, Endüstriyel kontrolde vb. Kullanılabilir. I2C veri yolu adresi için 8 I / O pini, 3 pim (A0, A1, A2) ve SDA, SCL pimleri vardır..
LCD kontrol panosu, LCD'nin kontrastını kontrol etmek için dahili bir potansiyometreye sahiptir.
IC ve LCD denetleyicinin pin şemaları aşağıda verilmiştir.
Devre şeması
LCD'nin ESP32 ile arayüzlenmesi için bağlantılar aşağıda verilmiştir.
- I2C modülünün 1-16 pinini LCD ekranın 1-16 pinine bağlayın.
- I2C modülünün SDA pini -> ESP32'nin SDA pini yani D21
- I2C modülünün SCL pini -> ESP32'nin SCL pini yani D22
3v ESP32'yi sadece gösterim için 5v I2C'ye bağladım, ancak I2C modülünün verileri düzgün şekilde görüntülemesi için 5V beslemesine ihtiyacımız var, çünkü ESP32 yalnızca I2C modülü için düşük olan 3,3 volt verebilir ve veriler net olarak görünmez. Bu nedenle, harici 5V kaynağı kullanmak daha iyidir.
ESP32 için pano dosyalarına ihtiyacımız var, bu nedenle ESP32'de yeniyseniz, önce ESP32 Eğitimine Başlarken'i izleyin ve sonra buraya geri dönün. LCD'yi I2C'siz ESP32 ile de bağlayabilirsiniz, ancak daha fazla ESP32 pini alacaktır.
I2C Denetleyici Adresini bulmak için kod
Ana koda girmeden önce I2C modülünün adresini bulmalıyız.
I2C kontrol cihazı, I2C veriyolunu kontrol etmek için kullanılan dahili ADDRESS bitine sahiptir. Varsayılan ADRES 0x27'dir, ancak bazı durumlarda 0x3f olabilir. Bu yüzden I2C kontrol cihazının adresini kontrol etmek için yukarıda gösterildiği gibi devreyi bağlayın ve aşağıda verilen kodu yükleyin ve seri monitörü açın, Adresi onaltılık olarak göreceksiniz.
#Dahil etmek
Bu Adresi LCD arayüz kodumuzda kullandığımızı unutmayın.
I2C kontrol cihazında gördüğünüz gibi A0, A1 ve A2 olarak etiketlenmiş üç jumper / lehim pedi vardır. Bunlar modülün adresini değiştirmek için kullanılır. Adres pedlerini birbirine bağlarsanız, adres varsayılan değer olan 0x27 veya 0x3F'den şu şekilde değişir. (1 = Bağlı Değil. 0 = Bağlı):
A0 |
A1 |
A2 |
HEX Adresi |
1 |
1 |
1 |
0x27 |
0 |
1 |
1 |
0x26 |
1 |
0 |
1 |
0x25 |
0 |
0 |
1 |
0x24 |
1 |
1 |
0 |
0x23 |
0 |
1 |
0 |
0x22 |
1 |
0 |
0 |
0x21 |
0 |
0 |
0 |
0x20 |
ESP32 için kod
Öncelikle I2C LCD modülü için LiquidCrystal_I2C kitaplığına ihtiyacımız var. Sıradan Liquidcrsytal kütüphanesi çalışmayacaktır çünkü burada I2C kullanıyoruz.
Bu https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library adresinden kitaplığı indirin
Kod, seri monitörde yazılan her ne ise LCD ekranda görüntülenecek şekilde yazılmıştır. Kodumuzu yazmak ve yüklemek için Arduino IDE kullanıldı.
Öncelikle, Arduino IDE ile birlikte gelen I2C iletişimi için tel kitaplığı eklemeliyiz .
#Dahil etmek
Ardından I2C LCD için, daha önce indirilen LiquidCrystal_I2C.h'yi dahil edin.
#Dahil etmek
Ardından, LCD I2C adresini 0x27'ye veya yukarıda 16 karakterlik 2 satırlı ekran için verilen tarayıcı kodunu çalıştırarak aldığınız adresi ayarlayın.
LiquidCrystal_I2C lcd (0x27, 16,2);
In kurulum fonksiyonu, 16 karakter için 2 satırlık seri iletişim ve LCD'yi başlatmak ve arka ışığını açmak. Arka ışığı kapatmak istiyorsanız, lcd .noBacklight () kullanın ve tercihinize göre setCursor () işlevini değiştirin.
geçersiz kurulum () { Serial.begin (9600); lcd.init (); lcd.backlight (); lcd.setCursor (0,0); lcd.print ("Merhaba, dünya!"); gecikme (1000); lcd.setCursor (0,1); lcd.print ("circuitdigest.com"); gecikme (3000);
LCD, önce Seri Monitörü kullanma talimatlarını gösterecek ve görüntülenecek karakterleri yazacaktır.
Seri İzleme seçeneğini "Satır Sonu Yok" olarak ayarlayın
lcd.clear (); lcd.setCursor (0,0); lcd.print ("Seri Monitörü Kullan"); lcd.setCursor (0,1); lcd.print ("Görüntülenecek tür"); }
döngü işlevi, Serial.available () işlevini kullanarak seri bağlantı noktasından gelen herhangi bir seri veriyi sürekli olarak kontrol edecektir. Mesaj varsa saniye kadar bekler ve lcd .write () ve Serial.read () fonksiyonlarını kullanarak mesajı LCD'ye yazdırır.
void loop () {{// karakterler seri bağlantı noktası üzerinden geldiğinde… if (Serial.available ()) {delay (100); // mesajın tamamının lcd.clear () 'a ulaşması için biraz bekleyin; // (Serial.available ()> 0) {// mevcut tüm karakterleri okurken ekranı temizle lcd.write (Serial.read ()); // her karakteri LCD'de görüntüle}}}}
Compete Code aşağıda verilmiştir, bu nedenle kodu yükleyin ve seri monitörü açın. Ardından mesajı yazın ve enter tuşuna basın.Mesajınız LCD'de görüntülenecektir.
LCD'de doğru yanıt alamazsanız veya hiç yanıt alamazsanız, I2C denetleyici adresinizi kontrol edin veya doğru adresi almak için yukarıda verilen kodla tekrar tarayın .