Suchcode

Bibliothek und Arduino-Code für LCD2004-Display mit I2C

Bibliothek und Arduino-Code für LCD2004-Display mit I2C

In diesem Tutorial zeigen wir, wie man das LCD2004-Display mit I2C‑Kommunikation verwendet. Diese Konfiguration ermöglicht die Anzeige von Text über vier Zeilen und eignet sich daher ideal für verschiedene Anwendungen. Wir behandeln die benötigte Verkabelung, Codebeispiele und wie man die Funktionalität effektiv umsetzt.

Wir werden die LiquidCrystal_I2C-Bibliothek verwenden, um das LCD-Display zu steuern. Diese Bibliothek vereinfacht die Interaktion mit dem LCD, indem sie die I2C-Kommunikation für Sie übernimmt. Für ein umfassendes Verständnis sollten Sie sich das Video zur visuellen Anleitung ansehen (im Video bei 00:00).

Hardware erklärt

Die Hauptkomponente dieses Projekts ist das LCD2004-Display, das über 20 Spalten und 4 Zeilen für die Textausgabe verfügt. Es kommuniziert über I2C, wodurch im Vergleich zu herkömmlichen parallelen Verbindungen weniger Anschlüsse erforderlich sind. Dadurch eignet es sich für Projekte mit begrenzter Anzahl verfügbarer Pins am Arduino.

Die I2C-Schnittstelle verwendet zwei Leitungen, SDA (Datenleitung) und SCL (Taktleitung), die mit den entsprechenden Pins am Arduino verbunden werden. Das LCD benötigt außerdem Versorgungs- und Masseanschlüsse. In dieser Konfiguration schließen wir das Display an eine 5V-Stromquelle an, die direkt vom Arduino bereitgestellt werden kann.

Details zum Datenblatt

HerstellerGenerisch
TeilenummerLCD2004
Logik-/I/O-Spannung5 V
Versorgungsspannung5 V
Ausgangsstrom (pro Kanal)Typischerweise 20 mA
Spitzenstrom (pro Kanal)Typischerweise 40 mA
Hinweise zur PWM-Frequenznicht zutreffend
Eingangslogik-Schwellenwerte0,3 Vcc (niedrig), 0,7 Vcc (hoch)
Spannungsabfall / RDS(on)/ SättigungTypischerweise 0,2 V
Thermische Grenzwerte0 °C bis 50 °C
PaketStandard 4x20 LCD
Anmerkungen / VariantenIn verschiedenen Hintergrundbeleuchtungsvarianten erhältlich.

  • Stellen Sie eine geeignete Stromversorgung sicher, um Schäden zu vermeiden.
  • Verwenden Sie Pull-up-Widerstände an den SDA- und SCL-Leitungen, falls erforderlich.
  • Überprüfen Sie die I2C-Adresse; bei diesem Display ist sie häufig 0x27.
  • Halten Sie Verbindungen kurz, um Störungen zu minimieren.
  • Stellen Sie sicher, dass die Bibliothek korrekt installiert ist, bevor Sie Code hochladen.

Verdrahtungsanleitung

Um das LCD2004-Display per I2C mit dem Arduino zu verdrahten, folgen Sie diesen Verbindungen:

  • Verbinden Sie dieVCCPin des LCDs zum5VPin am Arduino.
  • Verbinden Sie dasGNDPin des LCDs an einGNDPin am Arduino.
  • Verbinden Sie dasSDAPin des LCDs zumA4Pin am Arduino.
  • Schließen Sie dieSCLPin des LCDs an dasA5Pin am Arduino.

Wenn dein Arduino-Board andere I2C-Pins hat, passe die Verbindungen entsprechend an. Das Video zeigt außerdem eine alternative Verdrahtungskonfiguration (im Video bei 01:30).

Codebeispiele & Schritt-für-Schritt-Anleitung

Schauen wir uns ein einfaches Beispiel an, wie man das LCD initialisiert und eine Nachricht anzeigt. Der folgende Codeausschnitt richtet das LCD ein und gibt "Hello, world!" auf dem Bildschirm aus.

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

Dieser Code initialisiert das LCD und schaltet die Hintergrundbeleuchtung ein. Anschließend zeigt er die Nachricht in der ersten Zeile des LCD an. Die Hintergrundbeleuchtung ist für die Sichtbarkeit bei schlechten Lichtverhältnissen unerlässlich.

Als Nächstes betrachten wir ein komplexeres Beispiel, das dynamische Daten wie Spannungswerte anzeigt.

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 diesem Ausschnitt setzen wir die Cursorposition auf die erste Zeile und geben ein Spannungslabel gefolgt vom tatsächlichen Spannungswert aus. Dadurch können Sie Echtzeitmessungen in einem benutzerfreundlichen Format anzeigen.

Für zusätzliche Funktionalität können Sie serielle Eingabe implementieren, um Benutzern zu erlauben, Zeichen über den seriellen Monitor einzugeben und diese auf dem LCD anzuzeigen.

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

Dieser Code prüft, ob Daten an der seriellen Schnittstelle verfügbar sind. Ist dies der Fall, liest er das zuletzt eingegebene Zeichen und zeigt es auf dem LCD an. Diese Interaktion verbessert das Benutzererlebnis, indem sie dynamische Anzeigen basierend auf der Benutzereingabe ermöglicht.

Den vollständigen Code finden Sie im Programm, das unterhalb des Artikels geladen ist.

Demonstration / Was Sie erwartet

Wenn Sie den Code ausführen, sollten Sie die Anfangsnachricht auf dem LCD sehen, gefolgt von den Spannungswerten und allen Zeichen, die über den seriellen Monitor eingegeben wurden. Stellen Sie sicher, dass die Verbindungen fest sitzen, um Anzeigeprobleme zu vermeiden. Wenn das LCD nichts anzeigt, überprüfen Sie die Verkabelung und die I2C-Adresse (im Video bei 02:15).

Bilder

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

Ressourcen & Referenzen

Dateien📁

Arduino-Bibliotheken (zip)