- Wat is het I2C-communicatieprotocol?
- Vereiste materialen
- I2C-module
- Schakelschema
- Code voor het vinden van het I2C-controlleradres
- Code voor ESP32
In de vorige zelfstudie is OLED gekoppeld aan ESP32 met behulp van SPI-communicatie die 5 pinnen gebruikt. In deze tutorial verbinden we 16x2 LCD met ESP32, met behulp van slechts 2 pinnen, met behulp van I2C-communicatie. Het vermindert het aantal pinnen dat door ESP32 wordt gebruikt, zodat er meer ESP32-pinnen vrij blijven voor het koppelen van verschillende sensoren.
Wat is het I2C-communicatieprotocol?
De term I2C staat voor " Inter Integrated Circuits". Het wordt normaal gesproken aangeduid als IIC of I squared C of zelfs als 2-draads interfaceprotocol (TWI) op sommige plaatsen, maar het betekent allemaal hetzelfde. I2C is een synchroon communicatieprotocol, wat betekent dat beide apparaten die de informatie delen een gemeenschappelijk kloksignaal moeten delen. Het heeft slechts twee draden, SDA en SCL om informatie te delen, waarvan SCL wordt gebruikt voor het kloksignaal en SDA wordt gebruikt voor het verzenden en ontvangen van gegevens.
U kunt een I2C LCD-module kopen waarin de I2C1602 LCD-controller is ingebouwd, of u kunt eenvoudig een I2C-controller kopen om 16x2 LCD-interface met ESP32 te verbinden.
Vereiste materialen
- ESP32
- 16 * 2 LCD-scherm
- I2C LCD-controller
- Draden
- Breadboard
I2C-module
De I2C-controller heeft een IC PCF8574 die algemene I / O-uitbreiding op afstand biedt via de tweedraads bidirectionele I2C-bus seriële klok (SCL) en seriële gegevens (SDA). Het is een zeer nuttige IC en kan worden gebruikt in LED-borden, displays, toetsenblokken, industriële besturing, enz. Er zijn 8 I / O-pinnen, 3 pinnen (A0, A1, A2) voor I2C-busadres en SDA, SCL-pinnen.
LCD-controllerkaart heeft een ingebouwde potentiometer om het contrast van het LCD-scherm te regelen.
Pin-diagrammen van IC en LCD-controller worden hieronder gegeven.
Schakelschema
Aansluitingen voor het verbinden van LCD met ESP32 worden hieronder gegeven
- sluit pin 1-16 van de I2C-module aan op pin 1-16 van het LCD-scherm.
- SDA-pin van I2C-module -> SDA-pin van ESP32 dwz D21
- SCL-pin van I2C-module -> SCL-pin van ESP32 dwz D22
Ik heb 3v van ESP32 aangesloten op 5v van I2C alleen voor demonstratie, maar we hebben 5V- voeding nodig voor de I2C-module om gegevens correct weer te geven, omdat ESP32 slechts 3,3 volt kan geven, wat laag is voor de I2C-module en de gegevens zullen niet duidelijk zichtbaar zijn. Het is dus beter om een externe 5V-voeding te gebruiken.
We hebben bordbestanden nodig voor ESP32, dus als je nieuw bent bij ESP32, volg dan eerst Aan de slag met ESP32-zelfstudie en spring dan hier terug. U kunt LCD ook aansluiten op ESP32 zonder I2C, maar er zijn meer pinnen van ESP32 nodig.
Code voor het vinden van het I2C-controlleradres
Voordat we naar de hoofdcode gaan, moeten we eerst het adres van de I2C-module vinden.
I2C-controller heeft een ingebouwde ADDRESS-bit die wordt gebruikt om de I2C-bus te besturen. Het standaard ADRES is 0x27, maar in sommige gevallen kan dit 0x3f zijn. Dus, om het adres van de I2C-controller te controleren, sluit u het circuit aan zoals hierboven weergegeven, uploadt u de onderstaande code en opent u de seriële monitor. U ziet het adres in hexadecimaal.
# omvatten
Merk op dat we dit adres gebruiken in onze LCD-interfacecode.
In de I2C-controller, zoals je kunt zien, zijn er drie jumpers / soldeerpads gelabeld als A0, A1 en A2. Deze worden gebruikt om het adres van de module te wijzigen. Hier ziet u hoe het adres verandert van de standaardwaarde 0x27 of 0x3F, als u de adresblokken met elkaar verbindt. (1 = niet verbonden. 0 = verbonden):
A0 |
A1 |
A2 |
HEX-adres |
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 |
Code voor ESP32
Eerst hebben we een bibliotheek LiquidCrystal_I2C nodig voor de I2C LCD-module. Gewone Liquidcrsytal- bibliotheek zal niet werken omdat we hier I2C gebruiken.
Download bibliotheek van deze
De code is zo geschreven dat alles wat op een seriële monitor wordt getypt, op het LCD-scherm wordt weergegeven. Arduino IDE is gebruikt om onze code te schrijven en te uploaden.
In de eerste plaats hebben we te nemen draad bibliotheek voor I2C communicatie die wordt geleverd met Arduino IDE.
# omvatten
Voeg vervolgens voor I2C LCD LiquidCrystal_I2C.h toe dat eerder is gedownload.
# omvatten
Stel vervolgens het LCD I2C-adres in op 0x27 of het adres dat u hebt gekregen door de bovenstaande scannercode uit te voeren voor een display met 16 tekens en 2 regels
LiquidCrystal_I2C lcd (0x27, 16,2);
In setup functie initialiseert de seriële communicatie en LCD 16 tekens 2 lijnen en de achtergrondverlichting. Als u de achtergrondverlichting wilt uitschakelen, gebruikt u lcd .noBacklight () en wijzigt u de functie setCursor () volgens uw voorkeur.
ongeldige setup () { Serial.begin (9600); lcd.init (); lcd.backlight (); lcd.setCursor (0,0); lcd.print ("Hallo wereld!"); vertraging (1000); lcd.setCursor (0,1); lcd.print ("circuitdigest.com"); vertraging (3000);
Het LCD-scherm geeft eerst de instructies weer om Serial Monitor te gebruiken en typ de weer te geven tekens.
Stel de optie Seriële monitor in op 'Geen lijn beëindigen'
lcd.clear (); lcd.setCursor (0,0); lcd.print ("Use Ser. Monitor"); lcd.setCursor (0,1); lcd.print ("Type om weer te geven"); }
loop- functie controleert continu op inkomende seriële gegevens van de seriële poort met behulp van de functie Serial.available (). Als er een bericht is, wacht het een seconde en drukt het bericht af op het LCD-scherm met de functies lcd .write () en Serial.read ().
void loop () {{// wanneer tekens aankomen via de seriële poort… if (Serial.available ()) {delay (100); // wacht even tot het hele bericht arriveert lcd.clear (); // maak het scherm leeg terwijl (Serial.available ()> 0) {// lees alle beschikbare tekens lcd.write (Serial.read ()); // toon elk teken op het LCD}}}}
Compete Code wordt hieronder gegeven, dus upload de code en open de seriële monitor. Typ vervolgens bericht en druk op enter. Uw bericht wordt weergegeven op het LCD-scherm.
Als u geen goede of geen reactie krijgt op het LCD-scherm, controleer dan het adres van uw I2C-controller of scan het opnieuw met de bovenstaande code om het juiste adres te krijgen.