Cerca codice

Libreria e codice Arduino per display LCD2004 con I2C

Libreria e codice Arduino per display LCD2004 con I2C

In questo tutorial esploreremo come utilizzare il display LCD2004 con comunicazione I2C. Questa configurazione ti permette di visualizzare testo su quattro righe, rendendola ideale per varie applicazioni. Copriremo il cablaggio necessario, frammenti di codice e come implementare la funzionalità in modo efficace.

Utilizzeremo la libreria LiquidCrystal_I2C per gestire il display LCD. Questa libreria semplifica l'interazione con il display LCD occupandosi della comunicazione I2C per te. Per comprendere a fondo, assicurati di guardare il video per una guida visiva (nel video a 00:00).

Hardware spiegato

Il componente principale per questo progetto è il display LCD2004, che dispone di 20 colonne e 4 righe per l'uscita del testo. Comunica tramite I2C, consentendo un numero inferiore di collegamenti rispetto alle tradizionali connessioni parallele. Questo lo rende adatto a progetti con disponibilità limitata di pin sull'Arduino.

L'interfaccia I2C utilizza due linee, SDA (linea dati) e SCL (linea di clock), che si collegano ai pin corrispondenti sull'Arduino. Anche l'LCD richiede connessioni di alimentazione e di massa. In questa configurazione collegheremo il display a una sorgente di alimentazione da 5V, che può essere fornita direttamente dall'Arduino.

Dettagli della scheda tecnica

ProduttoreGenerico
Numero di parteLCD2004
Tensione logica/IO5 V
Tensione di alimentazione5 V
Corrente di uscita (per canale)Tipicamente 20 mA
Corrente di picco (per canale)Tipicamente 40 mA
Linee guida sulla frequenza PWMN/D
Soglie logiche di ingresso0.3 Vcc (basso), 0.7 Vcc (alto)
Caduta di tensione su RDS(on)/ saturazioneTipicamente 0.2 V
Limiti termicida 0°C a 50°C
PacchettoLCD standard 4x20
Note / variantiDisponibile con diverse opzioni di retroilluminazione

  • Assicurarsi che l'alimentazione sia adeguata per evitare danni.
  • Usare resistenze pull-up sulle linee SDA e SCL se necessario.
  • Controlla l'indirizzo I2C; comunemente 0x27 per questo display.
  • Mantieni le connessioni brevi per ridurre al minimo le interferenze.
  • Verifica che la libreria sia installata correttamente prima di caricare il codice.

Istruzioni di cablaggio

Per collegare il display LCD2004 con I2C all'Arduino, segui queste connessioni:

  • Collega ilVCCpin del display LCD al5Vpin sull'Arduino.
  • Collega ilGNDpin del LCD a unGNDpin sull'Arduino.
  • Collega ilSDApin del display LCD alA4pin sull'Arduino.
  • Collega ilSCLpin del display LCD alA5pin sull'Arduino.

Se la tua scheda Arduino ha pin I2C diversi, assicurati di adeguare i collegamenti di conseguenza. Il video mostra inoltre una configurazione alternativa del cablaggio (nel video a 01:30).

Esempi di codice e guida passo-passo

Vediamo un semplice esempio di inizializzazione dell'LCD e di visualizzazione di un messaggio. Lo snippet seguente configura l'LCD e stampa "Ciao, mondo!" sullo schermo.

lcd.begin(); // Initialize the LCD
lcd.backlight(); // Turn on the backlight
lcd.print("Hello, world!"); // Display message

Questo codice inizializza l'LCD e attiva la retroilluminazione. Quindi visualizza il messaggio sulla prima riga dell'LCD. La retroilluminazione è essenziale per la visibilità in condizioni di scarsa luminosità.

Successivamente, esamineremo un esempio più complesso che mostra dati dinamici, come le misurazioni della tensione.

lcd.setCursor(0,0); // Set cursor to the first line
lcd.print("Voltage: "); // Display voltage label
float v = 8.254; // Example voltage value
lcd.print(v); // Print voltage value

In questo estratto impostiamo la posizione del cursore sulla prima riga e stampiamo un'etichetta della tensione seguita dal valore effettivo della tensione. Ciò ti permette di visualizzare misurazioni in tempo reale in un formato facile da usare.

Per funzionalità aggiuntive, puoi implementare l'input seriale per consentire agli utenti di inserire caratteri tramite il monitor seriale e visualizzarli sul display LCD.

if (Serial.available()) { // Check for serial input
  lastChar = Serial.read(); // Read the last character
  lcd.write(lastChar); // Display character on LCD
}

Questo codice verifica se sono disponibili dati sulla porta seriale. In tal caso, legge l'ultimo carattere inserito e lo visualizza sul display LCD. Questa interazione migliora l'esperienza dell'utente consentendo visualizzazioni dinamiche basate sull'input dell'utente.

Per il codice completo, consultare il programma completo caricato sotto l'articolo.

Dimostrazione / Cosa aspettarsi

Quando esegui il codice, dovresti vedere il messaggio iniziale visualizzato sul display LCD, seguito dalle letture di tensione e da eventuali caratteri inseriti tramite il monitor seriale. Assicurati che i collegamenti siano sicuri per evitare problemi di visualizzazione. Se il display LCD non mostra nulla, ricontrolla il cablaggio e l'indirizzo I2C (nel video a 02:15).

Immagini

LCD2004_display-3
LCD2004_display-3
LCD2004_display-1
LCD2004_display-1
LCD2004_display-2
LCD2004_display-2
121-Arduino code for LCD2004 with I2C: Hello World sketch
Lingua: C++
/*
 *  Download library: https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library
 *  
 *  Updated by Ahmad Shamshiri on July 8, 2018 at 19:14 in Ajax, Ontario, Canada
 * for Robojax.com
 * Get this code from Robojax.com
 * Watch video instructions for this code at: https://youtu.be/DKmNSCMPDjE
 * 
 */
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

// Set the LCD address to 0x27 for a 20 chars and 4 line display
LiquidCrystal_I2C lcd(0x27, 20, 4);

void setup()
{
	// initialize the LCD
	lcd.begin();

	// Turn on the backlight and print a message.
	lcd.backlight();
	lcd.print("Hello, world!");
}

void loop()
{
	// Do nothing here...
}
122-Arduino code for LCD2004 with I2C RoboJax custom sketch
Lingua: C++
/*
 * 
 * *  Download library: https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library
 * This code is basic usage of an LCD2004 display with I2C.
 * It will display text in 4 lines, each with 20 characters.
 * It displays multiple float values and text on the same line.
 * 
 * 
 * 
 * Updated by Ahmad Shamshiri on July 08, 2018 at 09:20 in Ajax, Ontario, Canada
 * for Robojax.com
 * Get this code from Robojax.com
 * Watch video instructions for this code at: https://youtu.be/DKmNSCMPDjE
 * 

 */

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Set the LCD address to 0x27 for a 20 chars and 4 line display
LiquidCrystal_I2C lcd(0x27, 20, 4);

void setup() {

  // initialize the LCD, 
  lcd.begin();
  // Turn on the backlight and print a message.
  lcd.backlight();
  lcd.clear();
   lcd.setCursor (0,0); //
   lcd.print("Robojax LCD2004 Test"); 
   lcd.setCursor (0,1); //   
 
   lcd.print("Please Wait - 3");  
   lcd.setCursor (0,1); // 
   delay(1000);        
   lcd.print("Please Wait - 2");  
   delay(1000); 
   lcd.setCursor (0,1); //      
   lcd.print("Please Wait - 1");  
   delay(1000);       
}

void loop() {

    // Robojax.com LCD2004 with I2C custom code
  lcd.clear();// clear previous values from screen
  lcd.setCursor (0,0); //character zero, line 1
  lcd.print("LCD2004 I2C Example"); // print text  

  lcd.setCursor (4,1); //character 4, line 2
  lcd.print("Robojax.com"); // print text   

  lcd.setCursor (0,2); //character 0, line 3
  lcd.print("Voltage: "); // print text 
  float v = 8.254;// define or get voltage
  char VoltageStr[5];
  dtostrf(v, 5, 3, VoltageStr );
  lcd.setCursor (9,2); //character 9, line 3  
  lcd.print(VoltageStr); // print voltage
  lcd.setCursor (14,2); //character 14, line 3
  lcd.print("V"); // print V at the end of voltage  

  lcd.setCursor (0,3); //character 0, line 4
  lcd.print("X: "); // print x
  float xdeg = -123.87;// define or get x degree (just example)
  lcd.setCursor (3,3); //character 8, line 3  
  lcd.print(xdeg); // print xdeg value

  
  lcd.setCursor (12,3); //character 12, line 4
  lcd.print("Y: "); // print Y
  float ydeg = 32.8;// define or get y degree (just example)
  lcd.setCursor (15,3); //character 15, line 4  
  lcd.print(ydeg); // print ydeg value
      
                     
   delay(100);

}// loop end
123-Arduino code for LCD2004 with I2C: blinking sketch
Lingua: C++
/*
 * 
 *  Download library: https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library
 * This code is basic usage of an LCD2004 display with I2C 
 * It will display a blinking cursor on the screen 
 * 

 * Get this code from Robojax.com
 * Watch video instructions for this code at: https://youtu.be/DKmNSCMPDjE
 * 

 */
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

// Set the LCD address to 0x27 for a 20 chars and 4 line display
LiquidCrystal_I2C lcd(0x27, 20, 4);

void setup()
{
	// initialize the LCD
	lcd.begin();
}

void loop()
{
	bool blinking = true;
	lcd.cursor();

	while (1) {
		if (blinking) {
			lcd.clear();
			lcd.print("No cursor blink");
			lcd.noBlink();
			blinking = false;
		} else {
			lcd.clear();
      lcd.setCursor(0,1);
      lcd.print("Your name: ");
      lcd.blink();
			blinking = true;
		}
		delay(4000);
	}
}
124-Arduino code for LCD2004 with I2C serial monitor sketch
Lingua: C++
/*
 * 
 *  Download library: https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library
 * This code is basic usage of an LCD2004 display with I2C.
 * This code will allow you to enter a character on the serial monitor and display it on the screen.
 * 

 * Updated by Ahmad Shamshiri on July 08, 2018 at 09:20 in Ajax, Ontario, Canada
 * for Robojax.com
 * Get this code from Robojax.com
 * Watch video instructions for this code at: https://youtu.be/DKmNSCMPDjE
 * 
 */
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

// Set the LCD address to 0x27 for a 20 chars and 4 line display
LiquidCrystal_I2C lcd(0x27, 20, 4);

char lastChar ='_';
void setup()
{
	lcd.begin();
	lcd.backlight();
  lcd.print("Robojax.com Test");
	// Initialize the serial port at a speed of 9600 baud
	Serial.begin(9600);
}

void loop()
{

      lcd.clear();
      lcd.setCursor(0,1);
      lcd.print("Enter Letter: ");

      lcd.setCursor(13,1);  
	// If characters arrived over the serial port...
	if (Serial.available()) {
		// Wait a bit for the entire message to arrive
		delay(100);


		// Write all characters received via the serial port to the LCD.
		while (Serial.available() > 0) {
      lastChar =Serial.read();
      Serial.print("Entered: ");
      Serial.println(lastChar);
		}//while end
	}// if end

  lcd.write(lastChar);// display last entered character
  delay(1000);


}// loop end

Risorse e riferimenti

File📁

Librerie Arduino (zip)