Bibliotheek- en Arduino-code voor LCD2004-display met I2C
In deze tutorial verkennen we hoe je het LCD2004-display met I2C-communicatie kunt gebruiken. Deze opstelling stelt je in staat om tekst over vier regels weer te geven, waardoor het ideaal is voor verschillende toepassingen. We behandelen de benodigde bedrading, codefragmenten en hoe je de functionaliteit effectief kunt implementeren.

We zullen de LiquidCrystal_I2C-bibliotheek gebruiken om het LCD-display te beheren. Deze bibliotheek vereenvoudigt de interactie met het LCD door de I2C-communicatie voor je af te handelen. Voor een uitgebreid begrip, bekijk zeker de video voor visuele begeleiding (in video op 00:00).
Hardware Uitgelegd
Het primaire onderdeel voor dit project is het LCD2004-display, dat 20 kolommen en 4 rijen heeft voor tekstuitvoer. Het communiceert via I2C, waardoor er minder verbindingen nodig zijn in vergelijking met traditionele parallelle verbindingen. Dit maakt het geschikt voor projecten met beperkte pinbeschikbaarheid op de Arduino.
De I2C-interface gebruikt twee lijnen, SDA (datalijn) en SCL (kloklijn), die worden verbonden met de overeenkomstige pinnen op de Arduino. Het LCD vereist ook stroom- en aardverbindingen. In deze opstelling verbinden we het display met een 5V-voedingsbron, die rechtstreeks vanaf de Arduino kan worden geleverd.
Datasheet Details
| Fabrikant | Generiek |
|---|---|
| Onderdeelnummer | LCD2004 |
| Logica/IO-spanning | 5 V |
| Voedingsspanning | 5 V |
| Uitgangsstroom (per kanaal) | Doorgaans 20 mA |
| Piekstroom (per kanaal) | Doorgaans 40 mA |
| PWM-frequentierichtlijn | N.v.t. |
| Ingangslogische drempels | 0,3 Vcc (laag), 0,7 Vcc (hoog) |
| Spanningsval / RDS(on) / verzadiging | Doorgaans 0,2 V |
| Thermische limieten | 0°C tot 50°C |
| Behuizing | Standaard 4x20 LCD |
| Opmerkingen / varianten | Beschikbaar met verschillende achtergrondverlichtingsopties |
- Zorg voor een correcte voedingsspanning om schade te voorkomen.
- Gebruik pull-up weerstanden op SDA- en SCL-lijnen indien nodig.
- Controleer het I2C-adres; gebruikelijk 0x27 voor dit display.
- Houd verbindingen kort om interferentie te minimaliseren.
- Bevestig dat de bibliotheek correct is geïnstalleerd voordat je code uploadt.
Bedradingsinstructies
Om het LCD2004-display met I2C op de Arduino aan te sluiten, volg je deze verbindingen:
- Verbind de
VCC-pin van het LCD met de5V-pin op de Arduino. - Verbind de
GND-pin van het LCD met eenGND-pin op de Arduino. - Verbind de
SDA-pin van het LCD met deA4-pin op de Arduino. - Verbind de
SCL-pin van het LCD met deA5-pin op de Arduino.
Als je Arduino-bord andere I2C-pinnen heeft, zorg er dan voor dat je de verbindingen dienovereenkomstig aanpast. De video toont ook een alternatieve bedradingsconfiguratie (in video op 01:30).

Codevoorbeelden & Uitleg
Laten we een eenvoudig voorbeeld bekijken van het initialiseren van het LCD en het weergeven van een bericht. Het volgende fragment stelt het LCD in en print "Hallo, wereld!" op het scherm.
lcd.begin(); // Initialiseer het LCD
lcd.backlight(); // Schakel de achtergrondverlichting in
lcd.print("Hallo, wereld!"); // Toon bericht
Deze code initialiseert het LCD en activeert de achtergrondverlichting. Vervolgens toont het het bericht op de eerste regel van het LCD. De achtergrondverlichting is essentieel voor zichtbaarheid bij weinig licht.
Vervolgens bekijken we een complexer voorbeeld dat dynamische gegevens toont, zoals spanningsmetingen.
lcd.setCursor(0,0); // Zet cursor op de eerste regel
lcd.print("Spanning: "); // Toon spanningslabel
float v = 8.254; // Voorbeeldspanningswaarde
lcd.print(v); // Print spanningswaarde
In dit fragment zetten we de cursorpositie op de eerste regel en printen we een spanningslabel gevolgd door de werkelijke spanningswaarde. Dit stelt je in staat om realtime metingen op een gebruiksvriendelijke manier weer te geven.

Voor extra functionaliteit kun je seriële invoer implementeren zodat gebruikers tekens kunnen invoeren via de seriële monitor en deze op het LCD kunnen weergeven.
if (Serial.available()) { // Controleer op seriële invoer
lastChar = Serial.read(); // Lees het laatste teken
lcd.write(lastChar); // Toon teken op LCD
}
Deze code controleert of er gegevens beschikbaar zijn op de seriële poort. Zo ja, leest het het laatste ingevoerde teken en toont dit op het LCD. Deze interactie verbetert de gebruikerservaring door dynamische weergaven mogelijk te maken op basis van gebruikersinvoer.
Voor de volledige code verwijzen we naar het volledige programma dat onder het artikel is geladen.
Demonstratie / Wat te Verwachten
Wanneer je de code uitvoert, zou je het initiële bericht op het LCD moeten zien, gevolgd door de spanningsmetingen en eventuele tekens die via de seriële monitor zijn ingevoerd. Zorg ervoor dat de verbindingen stevig zijn om weergaveproblemen te voorkomen. Als het LCD niets toont, controleer dan de bedrading en het I2C-adres opnieuw (in video op 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
Hulpmiddelen en referenties
-
ExternCharacter Generator (GitHub)maxpromer.github.io
-
ExternCharacter Generator (second source)omerk.github.io
-
ExternGet library from GitHubgithub.com
Bestanden📁
Arduino-bibliotheken (zip)
-
LCD1602 LCD Arduino library from Robojax
robojax-LCD1602-I2C-library-master.zip0.01 MB