- Hva er I2C kommunikasjonsprotokoll?
- Nødvendig materiale
- I2C-modul
- Kretsskjema
- Kode for å finne I2C Controller Address
- Kode for ESP32
I forrige opplæring er OLED grensesnittet med ESP32 ved hjelp av SPI-kommunikasjon som bruker 5 pins. I denne veiledningen grensesnitt vi 16x2 LCD med ESP32, bruker bare 2 pinner, ved hjelp av I2C kommunikasjon. Det reduserer antall pinner som brukes av ESP32, slik at flere antall ESP32-pinner forblir ledige for grensesnitt mellom forskjellige sensorer.
Hva er I2C kommunikasjonsprotokoll?
Begrepet I2C står for " Inter Integrated Circuits". Det er vanligvis betegnet som IIC eller jeg kvadratisk C eller til og med som 2-leders grensesnittprotokoll (TWI) noen steder, men alt betyr det samme. I2C er en synkron kommunikasjonsprotokoll, betyr at begge enhetene som deler informasjonen må dele et vanlig kloksignal. Den har bare to ledninger, SDA og SCL for å dele informasjon, hvorav SCL brukes til klokkesignalet og SDA brukes til å sende og motta data.
Du kan kjøpe I2C LCD-modul der I2C1602 LCD-kontroller er innebygd, eller du kan ganske enkelt kjøpe I2C-kontroller for å grensesnitt 16x2 LCD med ESP32.
Nødvendig materiale
- ESP32
- 16 * 2 LCD-skjerm
- I2C LCD-kontroller
- Ledninger
- Brettbrett
I2C-modul
I2C-kontrolleren har en IC PCF8574 som gir ekstern I / O-utvidelse for generell bruk via to-leder toveis I2C-buss seriell klokke (SCL) og seriell data (SDA). Det er veldig nyttig IC og kan brukes i LED-skiltebrett, skjermer, tastaturer, industriell kontroll, etc. Det er 8 I / O-pinner, 3 pinner (A0, A1, A2) for I2C-bussadresse og SDA, SCL-pinner.
LCD-kontrollerkort har et innebygd potensiometer for å kontrollere kontrasten til LCD.
Pin diagrammer av IC og LCD kontrolleren er gitt nedenfor.
Kretsskjema
Tilkoblinger for grensesnitt mellom LCD og ESP32 er gitt nedenfor
- koble pin 1-16 av I2C-modulen til pin 1-16 av LCD-skjermen.
- SDA-pinne på I2C-modulen -> SDA-pinne på ESP32, dvs. D21
- SCL pin av I2C modul -> SCL pin av ESP32 dvs. D22
Jeg har koblet 3v av ESP32 til 5v av I2C bare for demonstrasjon, men vi trenger 5V forsyning for at I2C-modulen skal vise data riktig, fordi ESP32 bare kan gi 3,3 volt som er lav for I2C-modulen og data vil ikke være synlig tydelig. Så det er bedre å bruke ekstern 5V-forsyning.
Vi trenger tavlefiler for ESP32, så hvis du er ny på ESP32, følg først Komme i gang med ESP32 Tutorial og hopp tilbake hit. Du kan også koble LCD med ESP32 uten I2C, men det vil ta flere pins av ESP32.
Kode for å finne I2C Controller Address
Før vi går inn i hovedkoden, må vi først finne adressen til I2C-modulen.
I2C-kontrolleren har innebygd ADRESSE-bit som brukes til å kontrollere I2C-bussen. Standard ADRESSE er 0x27, men i noen tilfeller kan den være 0x3f. Så, for å sjekke adressen til I2C-kontrolleren, koble til kretsen som vist ovenfor, last opp koden nedenfor og åpne seriell skjerm.Du vil se adressen i heksadesimal.
#inkludere
Merk at vi bruker denne adressen i LCD-grensesnittkoden.
I I2C-kontrolleren er det som du kan se tre hoppere / loddeklosser merket som A0, A1 og A2. Disse brukes til å endre adressen til modulen. Slik endrer adressen seg fra standardverdien 0x27 eller 0x3F, hvis du kobler adressepadene sammen. (1 = Ikke tilkoblet. 0 = Tilkoblet):
A0 |
A1 |
A2 |
HEX-adresse |
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 |
Kode for ESP32
Først trenger vi et bibliotek LiquidCrystal_I2C for I2C LCD-modul. Vanlig Liquidcrsytal- bibliotek vil ikke fungere fordi vi bruker I2C her.
Last ned bibliotek fra dette
Koden er skrevet på en slik måte at det som skrives på seriell skjerm, vil vises på LCD-skjermen. Arduino IDE har blitt brukt til å skrive og laste opp koden vår.
Først må vi ta med ledningsbibliotek for I2C-kommunikasjon som følger med Arduino IDE.
#inkludere
For I2C LCD, inkluder deretter LiquidCrystal_I2C.h som er lastet ned tidligere.
#inkludere
Sett deretter LCD I2C-adressen til 0x27 eller adressen du fikk ved å kjøre skannerkoden som er oppgitt ovenfor for en 16 tegn 2-linjers skjerm
LiquidCrystal_I2C lcd (0x27, 16,2);
I installasjonsfunksjonen , initialiser seriekommunikasjonen og LCD-skjermen for 16 tegn 2 linjer og slå på bakgrunnsbelysningen. Hvis du vil slå av bakgrunnsbelysningen, bruk lcd .noBacklight () og endre setCursor () -funksjonen etter dine preferanser.
ugyldig oppsett () { Serial.begin (9600); lcd.init (); lcd.backlight (); lcd.setCursor (0,0); lcd.print ("Hei, verden!"); forsinkelse (1000); lcd.setCursor (0,1); lcd.print ("circuitdigest.com"); forsinkelse (3000);
LCD vil først vise instruksjonene for bruk av Serial Monitor og skrive inn tegnene som skal vises.
Sett alternativet Serial Monitor til "No Line Ending"
lcd.clear (); lcd.setCursor (0,0); lcd.print ("Bruk seriemonitor"); lcd.setCursor (0,1); lcd.print ("Type for visning"); }
loop- funksjonen vil kontinuerlig sjekke for innkommende serielle data fra seriell port ved hjelp av Serial.available () -funksjonen. Hvis det er en melding, venter den på sekunder og skriver ut meldingen på LCD-skjermen ved hjelp av lcd .write () og Serial.read () -funksjonene.
void loop () {{// når tegn kommer over den serielle porten… hvis (Serial.available ()) {delay (100); // vent litt på at hele meldingen kommer lcd.clear (); // tøm skjermen mens (Serial.available ()> 0) {// les alle tilgjengelige tegn lcd.write (Serial.read ()); // vis hvert tegn på LCD}}}}
Konkurrerende kode er gitt nedenfor, så last opp koden og åpne seriell skjerm. Skriv deretter inn melding og trykk enter. Meldingen vises på LCD-skjermen.
Hvis du ikke får riktig eller ingen respons på LCD-skjermen, må du sjekke I2C-kontrolleradressen eller skanne den igjen med ovennevnte kode for å få riktig adresse.