- Vad är I2C-kommunikationsprotokoll?
- Material som krävs
- I2C-modul
- Kretsschema
- Kod för att hitta I2C Controller Address
- Kod för ESP32
I tidigare handledning är OLED gränssnitt med ESP32 med SPI-kommunikation som använder 5 stift. I denna handledning gränssnitt vi 16x2 LCD med ESP32, med endast två stift, med hjälp av I2C-kommunikation. Det minskar antalet stift som används av ESP32 så att fler antal ESP32-stift förblir lediga för gränssnitt mellan olika sensorer.
Vad är I2C-kommunikationsprotokoll?
Termen I2C står för " Inter Integrated Circuits". Det betecknas normalt som IIC eller I kvadrat C eller till och med som 2-tråds gränssnittsprotokoll (TWI) på vissa ställen men allt betyder detsamma. I2C är ett synkron kommunikationsprotokoll, vilket betyder att båda enheterna som delar informationen måste dela en gemensam klocksignal. Den har bara två ledningar, SDA och SCL för att dela information, varav SCL används för klocksignalen och SDA används för att skicka och ta emot data.
Du kan köpa I2C LCD-modul där I2C1602 LCD-styrenhet är inbyggd eller så kan du helt enkelt köpa I2C-styrenhet för gränssnitt 16x2 LCD med ESP32.
Material som krävs
- ESP32
- 16 * 2 LCD-skärm
- I2C LCD-kontroller
- Ledningar
- Bakbord
I2C-modul
I2C-styrenheten har en IC PCF8574 som ger fjärr-I / O-expansion för allmänt ändamål via den tvåtrådiga dubbelriktade I2C-bussens seriella klocka (SCL) och seriell data (SDA). Det är mycket användbart IC och kan användas i LED-skyltar, displayer, tangentkuddar, industriell kontroll etc. Det finns 8 I / O-stift, 3 stift (A0, A1, A2) för I2C-bussadress och SDA, SCL-stift.
LCD-styrkort har en inbyggd potentiometer för att styra LCD-kontrasten.
Stiftdiagram för IC- och LCD-kontroller ges nedan.
Kretsschema
Anslutningar för gränssnitt mellan LCD och ESP32 ges nedan
- anslut stift 1-16 på I2C-modulen till stift 1-16 på LCD-skärmen.
- SDA-stift i I2C-modulen -> SDA-stift på ESP32 dvs D21
- SCL-stift i I2C-modulen -> SCL-stift på ESP32 dvs D22
Jag har anslutit 3v ESP32 till 5v I2C endast för demonstration men vi behöver 5V- matning för att I2C-modulen ska kunna visa data ordentligt, eftersom ESP32 bara kan ge 3,3 volt vilket är lågt för I2C-modulen och data kommer inte att synas tydligt. Så det är bättre att använda extern 5V-matning.
Vi behöver kortfiler för ESP32, så om du är ny på ESP32, följ först Komma igång med ESP32 Tutorial och hoppa sedan tillbaka hit. Du kan också ansluta LCD med ESP32 utan I2C men det tar fler stift av ESP32.
Kod för att hitta I2C Controller Address
Innan vi går in i huvudkoden måste vi först hitta adressen till I2C-modulen.
I2C-styrenheten har inbyggd ADDRESS-bit som används för att styra I2C-bussen. StandardADRESS är 0x27 men i vissa fall kan den vara 0x3f. Så, för att kontrollera adressen till I2C-styrenheten, anslut kretsen som visas ovan, ladda upp nedanstående kod och öppna seriell bildskärm. Du ser adressen i hexadecimal.
#omfatta
Observera att vi använder den här adressen i vår LCD-gränssnittskod.
I I2C-kontroller finns, som du kan se, tre byglar / lödkuddar märkta som A0, A1 och A2. Dessa används för att ändra adress på modulen. Så här ändras adressen från standardvärdet 0x27 eller 0x3F om du ansluter adressblocket tillsammans. (1 = Ej ansluten. 0 = Ansluten):
A0 |
A1 |
A2 |
HEX-adress |
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 |
Kod för ESP32
Först behöver vi ett bibliotek LiquidCrystal_I2C för I2C LCD-modul. Vanligt Liquidcrsytal- bibliotek fungerar inte eftersom vi använder I2C här.
Ladda ner bibliotek från denna
Koden är skriven så att allt som skrivs på seriell bildskärm kommer att visas på LCD-skärmen. Arduino IDE har använts för att skriva och ladda upp vår kod.
Först måste vi inkludera trådbibliotek för I2C-kommunikation som kommer med Arduino IDE.
#omfatta
Sedan för I2C LCD, inkludera LiquidCrystal_I2C.h som laddats ner tidigare.
#omfatta
Ställ sedan in LCD I2C-adressen till 0x27 eller den adress du fick genom att köra skannerkoden ovan för en 16 tecken 2-radig display
LiquidCrystal_I2C lcd (0x27, 16,2);
I installationsfunktionen initierar du seriekommunikationen och LCD-skärmen för 16 tecken 2 rader och slår på bakgrundsbelysningen. Om du vill stänga av bakgrundsbelysningen, använd lcd .noBacklight () och ändra setCursor () -funktionen enligt dina önskemål.
ogiltig installation () { Serial.begin (9600); lcd.init (); lcd.backlight (); lcd.setCursor (0,0); lcd.print ("Hej världen!"); fördröjning (1000); lcd.setCursor (0,1); lcd.print ("circuitdigest.com"); fördröjning (3000);
LCD visar först instruktionerna för att använda Serial Monitor och skriver in de tecken som ska visas.
Ställ in alternativet Serial Monitor till "No Line Ending"
lcd.clear (); lcd.setCursor (0,0); lcd.print ("Använd seriemonitor"); lcd.setCursor (0,1); lcd.print ("Type to display"); }
loop- funktionen kommer kontinuerligt att kontrollera om inkommande seriell data från seriell port med Serial.available () -funktionen. Om det finns ett meddelande väntar det på sekunden och skriver ut meddelandet på LCD-skärmen med lcd .write () och Serial.read () -funktionerna.
void loop () {{// när tecken kommer över den seriella porten… om (Serial.available ()) {delay (100); // vänta lite tills hela meddelandet kommer fram lcd.clear (); // rensa skärmen medan (Serial.available ()> 0) {// läs alla tillgängliga tecken lcd.write (Serial.read ()); // visa varje tecken till LCD}}}}
Tävlingskoden ges nedan, så ladda upp koden och öppna seriell bildskärm. Skriv sedan meddelande och tryck Enter. Ditt meddelande visas på LCD-skärmen.
Om du inte får ordentligt eller inget svar på LCD-skärmen kan du kontrollera din I2C-styrenhetsadress eller skanna den igen med ovanstående kod för att få rätt adress.