- Cos'è il protocollo di comunicazione I2C?
- Materiali richiesti
- Modulo I2C
- Schema elettrico
- Codice per la ricerca dell'indirizzo del controller I2C
- Codice per ESP32
Nel tutorial precedente, OLED è interfacciato con ESP32 utilizzando la comunicazione SPI che utilizza 5 pin. In questo tutorial, interfacciamo LCD 16x2 con ESP32, utilizzando solo 2 pin, con l'aiuto della comunicazione I2C. Riduce il numero di pin utilizzati da ESP32 in modo che un numero maggiore di pin ESP32 rimanga libero per l'interfacciamento di sensori diversi.
Cos'è il protocollo di comunicazione I2C?
Il termine I2C sta per " Inter Integrated Circuits". Normalmente è indicato come IIC o I al quadrato C o anche come protocollo di interfaccia a 2 fili (TWI) in alcuni punti, ma significa tutto lo stesso. I2C è un protocollo di comunicazione sincrono, significa che entrambi i dispositivi che condividono le informazioni devono condividere un segnale di clock comune. Ha solo due fili, SDA e SCL per condividere le informazioni, di cui SCL viene utilizzato per il segnale di clock e SDA viene utilizzato per l'invio e la ricezione dei dati.
È possibile acquistare il modulo LCD I2C in cui è integrato il controller LCD I2C1602 o semplicemente acquistare il controller I2C per interfacciare LCD 16x2 con ESP32.
Materiali richiesti
- ESP32
- Display LCD 16 * 2
- Controller LCD I2C
- Fili
- Breadboard
Modulo I2C
Il controller I2C dispone di un IC PCF8574 che fornisce un'espansione I / O remoto per scopi generici tramite l'orologio seriale bidirezionale a due fili I2C-bus (SCL) e dati seriali (SDA). È un circuito integrato molto utile e può essere utilizzato in insegne LED, display, tastiere, controllo industriale, ecc. Sono presenti 8 pin I / O, 3 pin (A0, A1, A2) per l'indirizzo bus I2C e SDA, pin SCL.
La scheda controller LCD ha un potenziometro integrato per controllare il contrasto dell'LCD.
Di seguito sono riportati i diagrammi dei pin del controller IC e LCD.
Schema elettrico
Connessioni per l'interfacciamento LCD con ESP32 Viene di seguito
- collegare il pin 1-16 del modulo I2C al pin 1-16 del display LCD.
- Pin SDA del modulo I2C -> pin SDA di ESP32 cioè D21
- Pin SCL del modulo I2C -> Pin SCL di ESP32 cioè D22
Ho collegato 3v di ESP32 a 5v di I2C solo per dimostrazione, ma abbiamo bisogno di 5V di alimentazione per il modulo I2C per visualizzare correttamente i dati, perché ESP32 può fornire solo 3,3 volt che sono bassi per il modulo I2C ei dati non saranno chiaramente visibili. Quindi, è meglio usare un'alimentazione 5V esterna.
Abbiamo bisogno dei file della scheda per ESP32, quindi se sei nuovo in ESP32, segui prima il tutorial di Getting Started with ESP32 e poi torna qui. Puoi anche collegare LCD con ESP32 senza I2C ma ci vorranno più pin di ESP32.
Codice per la ricerca dell'indirizzo del controller I2C
Prima di entrare nel codice principale dobbiamo prima trovare l'indirizzo del modulo I2C.
Il controller I2C ha un bit ADDRESS integrato che viene utilizzato per controllare il bus I2C. L'INDIRIZZO predefinito è 0x27 ma in alcuni casi può essere 0x3f. Quindi, per controllare l'indirizzo del controller I2C, collegare il circuito come mostrato sopra, caricare il codice indicato di seguito e aprire il monitor seriale, vedrai l'indirizzo in esadecimale.
#includere
Nota che usiamo questo indirizzo nel nostro codice di interfaccia LCD.
Nel controller I2C, come puoi vedere ci sono tre ponticelli / pad di saldatura etichettati come A0, A1 e A2. Questi vengono utilizzati per modificare l'indirizzo del modulo. Ecco come l'indirizzo cambia dal valore predefinito 0x27 o 0x3F, se colleghi insieme i pad degli indirizzi. (1 = non connesso.0 = connesso):
A0 |
A1 |
A2 |
Indirizzo 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 |
Codice per ESP32
Per prima cosa abbiamo bisogno di una libreria LiquidCrystal_I2C per il modulo LCD I2C. La libreria Liquidcrsytal ordinaria non funzionerà perché qui stiamo usando I2C.
Scarica la libreria da questa
Il codice è scritto in modo tale che tutto ciò che viene digitato sul monitor seriale, verrà visualizzato sul display LCD. L'IDE di Arduino è stato utilizzato per scrivere e caricare il nostro codice.
Innanzitutto, dobbiamo includere la libreria di cavi per la comunicazione I2C fornita con l' IDE di Arduino.
#includere
Quindi per I2C LCD, includi LiquidCrystal_I2C.h scaricato in precedenza.
#includere
Quindi imposta l' indirizzo I2C dell'LCD su 0x27 o l'indirizzo che hai ottenuto eseguendo il codice dello scanner sopra indicato per un display a 16 caratteri a 2 righe
LiquidCrystal_I2C lcd (0x27, 16,2);
Nella funzione di configurazione , inizializzare la comunicazione seriale e LCD per 16 caratteri 2 linee e accendere la retroilluminazione. Se si desidera disattivare la retroilluminazione, utilizzare lcd .noBacklight () e modificare la funzione setCursor () in base alle proprie preferenze.
void setup () { Serial.begin (9600); lcd.init (); lcd.backlight (); lcd.setCursor (0,0); lcd.print ("Hello, world!"); ritardo (1000); lcd.setCursor (0,1); lcd.print ("circuitdigest.com"); ritardo (3000);
Il display LCD visualizzerà prima le istruzioni per utilizzare Serial Monitor e digiterà i caratteri da visualizzare.
Imposta l'opzione Monitor seriale su "Nessuna fine riga"
lcd.clear (); lcd.setCursor (0,0); lcd.print ("Usa Ser. Monitor"); lcd.setCursor (0,1); lcd.print ("Digita da visualizzare"); }
La funzione loop controllerà continuamente eventuali dati seriali in arrivo dalla porta seriale utilizzando la funzione Serial.available (). Se è presente un messaggio, attendere un secondo e stampare il messaggio sul display LCD utilizzando le funzioni lcd .write () e Serial.read ().
void loop () {{// quando i caratteri arrivano sulla porta seriale… if (Serial.available ()) {delay (100); // aspetta un po 'l'arrivo dell'intero messaggio lcd.clear (); // cancella lo schermo mentre (Serial.available ()> 0) {// legge tutti i caratteri disponibili lcd.write (Serial.read ()); // visualizza ogni carattere sul display LCD}}}}
Il codice della competizione è indicato di seguito, quindi carica il codice e apri il monitor seriale. Quindi digita messaggio e premi invio. Il tuo messaggio verrà visualizzato sul display LCD.
Se non si ottiene una risposta corretta o nessuna risposta sul display LCD, controllare l'indirizzo del controller I2C o scansionarlo di nuovo con il codice sopra indicato per ottenere l'indirizzo corretto.