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ător | Generic |
|---|---|
| Număr de piesă | LCD2004 |
| Tensiune logică/IO | 5 V |
| Tensiune de alimentare | 5 V |
| Curent de ieșire (pe canal) | De obicei 20 mA |
| Curent de vârf (pe canal) | De obicei 40 mA |
| Ghid frecvență PWM | N/A |
| Praguri logice de intrare | 0,3 Vcc (jos), 0,7 Vcc (sus) |
| Cădere de tensiune / RDS(on) / saturație | De obicei 0,2 V |
| Limite termice | 0°C până la 50°C |
| Pachet | LCD standard 4x20 |
| Note / variante | Disponibil 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
VCCal LCD-ului la pinul5Vde pe Arduino. - Conectați pinul
GNDal LCD-ului la un pinGNDde pe Arduino. - Conectați pinul
SDAal LCD-ului la pinulA4de pe Arduino. - Conectați pinul
SCLal LCD-ului la pinulA5de 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).
/*
* 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...
}
/*
*
* * 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
/*
*
* 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);
}
}
/*
*
* 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
-
ExternCharacter Generator (GitHub)maxpromer.github.io
-
ExternCharacter Generator (second source)omerk.github.io
-
ExternGet library from GitHubgithub.com
Fișiere📁
Biblioteci Arduino (zip)
-
LCD1602 LCD Arduino library from Robojax
robojax-LCD1602-I2C-library-master.zip0.01 MB