- Ce este protocolul de comunicare I2C?
- Materiale necesare
- Modulul I2C
- Diagrama circuitului
- Cod pentru găsirea adresei controlerului I2C
- Cod pentru ESP32
În tutorialul anterior, OLED este interfațat cu ESP32 utilizând comunicarea SPI care utilizează 5 pini. În acest tutorial, interfațăm LCD 16x2 cu ESP32, folosind doar 2 pini, cu ajutorul comunicației I2C. Reduce numărul de pini folosiți de ESP32, astfel încât un număr mai mare de pini ESP32 să rămână liber pentru interfața senzorilor diferiți.
Ce este protocolul de comunicare I2C?
Termenul I2C înseamnă „ Circuite integrate integrate ”. În mod normal este notat ca IIC sau I pătrat C sau chiar ca protocol de interfață cu 2 fire (TWI) în unele locuri, dar totul înseamnă același lucru. I2C este un protocol de comunicație sincronă, înseamnă că ambele dispozitive care partajează informațiile trebuie să partajeze un semnal de ceas comun. Are doar două fire, SDA și SCL pentru a partaja informații, dintre care SCL este utilizat pentru semnalul de ceas și SDA este utilizat pentru trimiterea și primirea de date.
Puteți cumpăra un modul LCD I2C în care este încorporat controlerul LCD I2C1602 sau puteți achiziționa pur și simplu controlerul I2C pentru a interfața LCD 16x2 cu ESP32.
Materiale necesare
- ESP32
- Afisaj LCD 16 * 2
- Controler LCD I2C
- Fire
- Breadboard
Modulul I2C
Controlerul I2C are un IC PCF8574 care asigură extinderea I / O la distanță de uz general prin intermediul ceasului serial bidirecțional cu două fire I2C-bus (SCL) și a datelor seriale (SDA). Este foarte util IC și poate fi utilizat în plăci de semne cu LED-uri, afișaje, tastaturi, control industrial etc. Există 8 pini I / O, 3 pini (A0, A1, A2) pentru adresa magistralei I2C și pini SDA, SCL.
Placa de control LCD are un potențiometru încorporat pentru a controla contrastul LCD.
Diagramele pin ale controlerului IC și LCD sunt date mai jos.
Diagrama circuitului
Conexiunile pentru interfața LCD cu ESP32 sunt date mai jos
- conectați pinul 1-16 al modulului I2C la pinul 1-16 al afișajului LCD.
- Pin SDA al modulului I2C -> Pin SDA al ESP32 adică D21
- Pin SCL al modulului I2C -> Pin SCL al ESP32 adică D22
Am conectat 3v de ESP32 la 5v de I2C doar pentru demonstrație, dar avem nevoie de alimentare de 5V pentru modulul I2C pentru a afișa corect datele, deoarece ESP32 poate da doar 3,3 volți, care este scăzut pentru modulul I2C, iar datele nu vor fi vizibile în mod clar. Deci, este mai bine să utilizați o sursă externă de 5V.
Avem nevoie de fișiere de bord pentru ESP32, deci dacă sunteți nou în ESP32, urmați mai întâi Noțiuni introductive despre Tutorialul ESP32 și apoi săriți înapoi aici. De asemenea, puteți conecta LCD cu ESP32 fără I2C, dar va fi nevoie de mai mulți pini de ESP32.
Cod pentru găsirea adresei controlerului I2C
Înainte de a intra în codul principal, trebuie să găsim mai întâi adresa modulului I2C.
Controlerul I2C are bit ADDRESS încorporat, care este utilizat pentru a controla magistrala I2C. ADRESA implicită este 0x27, dar în unele cazuri poate fi 0x3f. Deci, pentru a verifica adresa controlerului I2C, conectați circuitul așa cum se arată mai sus, încărcați codul de mai jos și deschideți monitorul serial, veți vedea adresa în hexazecimal
#include
Rețineți că folosim această adresă în codul de interfață LCD.
În controlerul I2C, după cum puteți vedea, există trei jumperi / tampoane de lipit etichetate ca A0, A1 și A2. Acestea sunt utilizate pentru a schimba adresa modulului. Iată cum se schimbă adresa de la valoarea implicită 0x27 sau 0x3F, dacă conectați blocurile de adrese împreună. (1 = Nu este conectat. 0 = Conectat):
A0 |
A1 |
A2 |
Adresa HEX |
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 |
Cod pentru ESP32
Mai întâi avem nevoie de o bibliotecă LiquidCrystal_I2C pentru modulul LCD I2C. Biblioteca Liquidcrsytal obișnuită nu va funcționa deoarece folosim I2C aici.
Descărcați biblioteca de pe acest
Codul este scris în așa fel încât orice este tastat pe monitorul serial, va fi afișat pe ecranul LCD. Arduino IDE a fost folosit pentru a scrie și încărca codul nostru.
În primul rând, trebuie să includem o bibliotecă de sârmă pentru comunicarea I2C care vine cu Arduino IDE.
#include
Apoi, pentru I2C LCD, includeți LiquidCrystal_I2C.h care este descărcat mai devreme.
#include
Apoi setați adresa LCD I2C la 0x27 sau adresa pe care ați obținut-o executând codul scanerului dat mai sus pentru un afișaj de 16 caractere pe 2 linii
LiquidCrystal_I2C lcd (0x27, 16,2);
În funcția de configurare , inițializați comunicarea serială și ecranul LCD pentru 16 caractere 2 linii și porniți lumina de fundal. Dacă doriți să opriți lumina de fundal, utilizați lcd .noBacklight () și schimbați funcția setCursor () în funcție de preferințe.
void setup () { Serial.begin (9600); lcd.init (); lcd.backlight (); lcd.setCursor (0,0); lcd.print („Bună ziua, lume!”); întârziere (1000); lcd.setCursor (0,1); lcd.print ("circuitdigest.com"); întârziere (3000);
LCD-ul va afișa mai întâi instrucțiunile de utilizare a serialului și va introduce caracterele de afișat.
Setați opțiunea Serial Monitor la „No Line Ending”.
lcd.clear (); lcd.setCursor (0,0); lcd.print („Utilizați monitorul Ser.”); lcd.setCursor (0,1); lcd.print („Tastați pentru afișare”); }
funcția buclă va verifica în permanență orice date seriale primite din portul serial utilizând funcția Serial.available (). Dacă există un mesaj, așteptați al doilea și imprimați mesajul pe ecranul LCD folosind funcțiile lcd .write () și Serial.read ().
void loop () {{// când caracterele ajung peste portul serial… if (Serial.available ()) {delay (100); // așteptați puțin pentru sosirea întregului mesaj lcd.clear (); // ștergeți ecranul în timp ce (Serial.available ()> 0) {// citiți toate caracterele disponibile lcd.write (Serial.read ()); // afișează fiecare caracter pe ecranul LCD}}}}
Codul Concure este dat mai jos, deci încărcați codul și deschideți monitorul serial. Apoi tastați mesaj și apăsați Enter. Mesajul dvs. va fi afișat pe ecranul LCD.
Dacă nu primiți un răspuns adecvat sau niciun răspuns pe ecranul LCD, verificați adresa controlerului I2C sau scanați-o din nou cu codul de mai sus pentru a obține adresa corectă.