Caută cod

Bibliotecă și cod Arduino pentru afișajul LCD2004 cu I2C

Bibliotecă și cod Arduino pentru afișajul LCD2004 cu I2C

În acest tutorial, vom explora cum să folosim afișajul LCD2004 cu comunicare I2C. Această configurare vă permite să afișați text pe patru linii, fiind ideală pentru diverse aplicații. Vom acoperi conexiunile necesare, fragmentele de cod și modul de implementare eficientă a funcționalității.

Vom folosi biblioteca LiquidCrystal_I2C pentru a gestiona afișajul LCD. Această bibliotecă simplifică interacțiunea cu LCD-ul prin gestionarea comunicării I2C pentru dvs. Pentru o înțelegere completă, asigurați-vă că urmăriți videoclipul pentru ghidare vizuală (în videoclip la 00:00).

Hardware Explicat

Componenta principală pentru acest proiect este afișajul LCD2004, care are 20 de coloane și 4 rânduri pentru ieșirea textului. Acesta comunică folosind I2C, permițând mai puține conexiuni comparativ cu conexiunile paralele tradiționale. Acest lucru îl face potrivit pentru proiecte cu disponibilitate limitată a pinilor pe Arduino.

Interfața I2C folosește două linii, SDA (linia de date) și SCL (linia de ceas), care se conectează la pinii corespunzători de pe Arduino. LCD-ul necesită, de asemenea, conexiuni de alimentare și masă. În această configurare, vom conecta afișajul la o sursă de alimentare de 5V, care poate fi furnizată direct de la Arduino.

Detalii din Fișa Tehnică

ProducătorGeneric
Număr de piesăLCD2004
Tensiune logică/IO5 V
Tensiune de alimentare5 V
Curent de ieșire (pe canal)De obicei 20 mA
Curent de vârf (pe canal)De obicei 40 mA
Ghid frecvență PWMN/A
Praguri logice de intrare0,3 Vcc (jos), 0,7 Vcc (sus)
Cădere de tensiune / RDS(on) / saturațieDe obicei 0,2 V
Limite termice0°C până la 50°C
PachetLCD standard 4x20
Note / varianteDisponibil cu diferite opțiuni de iluminare de fundal

  • Asigurați o alimentare corespunzătoare pentru a evita deteriorarea.
  • Folosiți rezistențe de pull-up pe liniile SDA și SCL dacă este necesar.
  • Verificați adresa I2C; de obicei 0x27 pentru acest afișaj.
  • Păstrați conexiunile scurte pentru a minimiza interferențele.
  • Confirmați că biblioteca este instalată corect înainte de a încărca codul.

Instrucțiuni de Cablare

Pentru a cabla afișajul LCD2004 cu I2C la Arduino, urmați aceste conexiuni:

  • Conectați pinul VCC al LCD-ului la pinul 5V de pe Arduino.
  • Conectați pinul GND al LCD-ului la un pin GND de pe Arduino.
  • Conectați pinul SDA al LCD-ului la pinul A4 de pe Arduino.
  • Conectați pinul SCL al LCD-ului la pinul A5 de pe Arduino.

Dacă placa dvs. Arduino are pini I2C diferiți, asigurați-vă că ajustați conexiunile în consecință. Videoclipul demonstrează, de asemenea, o configurare alternativă de cablare (în videoclip la 01:30).

Exemple de Cod și Explicații

Să ne uităm la un exemplu simplu de inițializare a LCD-ului și afișare a unui mesaj. Următorul fragment configurează LCD-ul și afișează „Hello, world!" pe ecran.

lcd.begin(); // Inițializează LCD-ul
lcd.backlight(); // Activează iluminarea de fundal
lcd.print("Hello, world!"); // Afișează mesajul

Acest cod inițializează LCD-ul și activează iluminarea de fundal. Apoi, afișează mesajul pe prima linie a LCD-ului. Iluminarea de fundal este esențială pentru vizibilitate în condiții de lumină scăzută.

În continuare, vom examina un exemplu mai complex care afișează date dinamice, cum ar fi citiri de tensiune.

lcd.setCursor(0,0); // Setează cursorul pe prima linie
lcd.print("Voltage: "); // Afișează eticheta de tensiune
float v = 8.254; // Valoare exemplu de tensiune
lcd.print(v); // Afișează valoarea tensiunii

În acest fragment, setăm poziția cursorului pe prima linie și afișăm o etichetă de tensiune urmată de valoarea reală a tensiunii. Acest lucru vă permite să afișați măsurători în timp real într-un format ușor de utilizat.

Pentru funcționalitate suplimentară, puteți implementa intrare serială pentru a permite utilizatorilor să introducă caractere prin monitorul serial și să le afișeze pe LCD.

if (Serial.available()) { // Verifică dacă există intrare serială
  lastChar = Serial.read(); // Citește ultimul caracter
  lcd.write(lastChar); // Afișează caracterul pe LCD
}

Acest cod verifică dacă există date disponibile pe portul serial. Dacă da, citește ultimul caracter introdus și îl afișează pe LCD. Această interacțiune îmbunătățește experiența utilizatorului, permițând afișaje dinamice bazate pe intrarea utilizatorului.

Pentru codul complet, vă rugăm să consultați programul integral încărcat sub articol.

Demonstrație / Ce să Așteptați

Când rulați codul, ar trebui să vedeți mesajul inițial afișat pe LCD, urmat de citirile de tensiune și orice caractere introduse prin monitorul serial. Asigurați-vă că conexiunile sunt sigure pentru a evita problemele de afișare. Dacă LCD-ul nu afișează nimic, verificați din nou cablarea și adresa I2C (în videoclip la 02:15).

Imagini

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
Limba: 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
Limba: 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
Limba: 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
Limba: 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

Resurse și referințe

Fișiere📁

Biblioteci Arduino (zip)