Arduino - LCD I2C

In diesem Arduino LCD I2C-Tutorial lernen wir, wie man ein LCD-I2C-Display (Liquid Crystal Display) mit dem Arduino-Board verbindet. LCDs sind sehr beliebt und werden in Elektronikprojekten häufig verwendet, um Informationen anzuzeigen. Es gibt viele Arten von LCDs. Dieses Tutorial verwendet als Beispiel ein LCD 16x2 (16 Spalten und 2 Zeilen). Die anderen LCDs sind ähnlich.

Erforderliche Hardware

1×Arduino Uno R3
1×USB 2.0 Kabel Typ A/B (für USB-A PC)
1×USB 2.0 Kabel Typ C/B (für USB-C PC)
1×LCD I2C
1×Verbindungskabel
1×(Empfohlen) Schraubklemmenblock-Shield für Arduino Uno
1×(Empfohlen) Breadboard-Shield für Arduino Uno
1×(Empfohlen) Gehäuse für Arduino Uno
1×(Empfohlen) Prototyping-Grundplatte & Breadboard-Kit für Arduino Uno

Oder Sie können die folgenden Kits kaufen:

1×DIYables STEM V3 Starter-Kit (Arduino enthalten)
1×DIYables Sensor-Kit (30 Sensoren/Displays)
1×DIYables Sensor-Kit (18 Sensoren/Displays)
Offenlegung: Einige der in diesem Abschnitt bereitgestellten Links sind Amazon-Affiliate-Links. Wir können eine Provision für Käufe erhalten, die über diese Links getätigt werden, ohne zusätzliche Kosten für Sie. Wir schätzen Ihre Unterstützung.

Über LCD I2C 16×2

Im vorherigen Tutorial haben wir gelernt, wie man das normale LCD verwendet. Allerdings ist die Verkabelung zwischen dem Arduino und dem normalen LCD kompliziert. Daher wurde LCD I2C entwickelt, um die Verkabelung zu vereinfachen. Tatsächlich besteht LCD I2C aus einem normalen LCD, einem I2C-Modul und einem Potentiometer.

Pinbelegung

LCD I2C verwendet die I²C-Schnittstelle, daher hat es 4 Pins:

  • GND-Pin: muss mit GND (0 V) verbunden werden
  • VCC-Pin: die Stromversorgung für das LCD, muss mit VCC (5 V) verbunden werden
  • SDA-Pin: I2C-Datensignal
  • SCL-Pin: I2C-Taktsignal
LCD I2C-Pinbelegung

LCD-Koordinate

LCD I2C 16x2 umfasst 16 Spalten und 2 Zeilen. Die Spalten und Zeilen werden ab 0 indiziert.

Arduino LCD I2C Koordinate

Verdrahtungsdiagramm

Arduino LCD I2C Verdrahtungsschema

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.

LCD I2C Arduino Uno, Nano Arduino Mega
Vin 5V 5V
GND GND GND
SDA A4 20
SCL A5 21

Wie man für LCD I2C programmiert

Dank der LiquidCrystal_I2C-Bibliothek ist die Verwendung des LCD ein Kinderspiel.

  • Die Bibliothek einbinden:
#include <LiquidCrystal_I2C.h> // Bibliothek für LCD
  • Deklariere ein LiquidCrystal_I2C-Objekt mit der I2C-Adresse, der Anzahl der Spalten und der Anzahl der Zeilen:
LiquidCrystal_I2C lcd(0x27, 16, 2); // I2C-Adresse 0x27, 16 Spalten und 2 Zeilen
  • Initialisieren Sie das LCD.
lcd.init(); // LCD initialisieren lcd.backlight(); // Hintergrundbeleuchtung einschalten
  • Bewege den Cursor an die gewünschte Position (Spaltenindex, Zeilenindex)
lcd.setCursor(column_index, row_index);
  • Eine Nachricht auf dem LCD ausgeben.
lcd.print("Hello World!");

Es gibt noch viele weitere Dinge, die wir mit LCD tun können (siehe Teil 'Do More with LCD').

※ Notiz:

Die I2C-Adresse des LCD kann je nach Hersteller variieren. Im Code haben wir 0x27 verwendet, das vom Hersteller DIYables angegeben ist (https://diyables.io/products/lcd-i2c-16x2).

Arduino-Code

#include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27, 16, 2); // I2C-Adresse 0x27, 16 Spalten und 2 Zeilen void setup() { lcd.init(); // LCD initialisieren lcd.backlight(); } void loop() { lcd.clear(); // Anzeige löschen lcd.setCursor(0, 0); // Cursor an die Position (0, 0) verschieben lcd.print("Arduino"); // Nachricht bei (0, 0) ausgeben lcd.setCursor(2, 1); // Cursor an die Position (2, 1) verschieben lcd.print("GetStarted.com"); // Nachricht bei (2, 1) ausgeben delay(2000); // Die obigen Anzeigen für zwei Sekunden anzeigen lcd.clear(); // Anzeige löschen lcd.setCursor(3, 0); // Cursor an die Position (3, 0) verschieben lcd.print("DIYables"); // Nachricht bei (3, 0) ausgeben lcd.setCursor(0, 1); // Cursor an die Position (0, 1) verschieben lcd.print("www.diyables.io"); // Nachricht bei (0, 1) ausgeben delay(2000); // Die obigen Anzeigen für zwei Sekunden anzeigen }

Schnelle Schritte

  • Navigieren Sie zum Bibliotheken-Symbol in der linken Seitenleiste der Arduino IDE.
  • Suchen Sie nach "LiquidCrystal I2C", und finden Sie dann die LiquidCrystal_I2C-Bibliothek von Frank de Brabander.
  • Klicken Sie auf die Schaltfläche Installieren, um die LiquidCrystal_I2C-Bibliothek zu installieren.
Arduino LiquidCrystal I2C-Bibliothek
  • Kopieren Sie den obigen Code und öffnen Sie ihn mit der Arduino IDE
  • Klicken Sie auf die Schaltfläche Hochladen in der Arduino IDE, um den Code auf den Arduino hochzuladen
  • Sehen Sie das Ergebnis auf dem LCD
Textanzeige auf dem LCD mit Arduino
image source: diyables.io
  • Versuchen Sie, Text und Position zu ändern

Video Tutorial

Wir erwägen die Erstellung von Video-Tutorials. Wenn Sie Video-Tutorials für wichtig halten, abonnieren Sie bitte unseren YouTube-Kanal , um uns zu motivieren, die Videos zu erstellen.

Mehr mit dem LCD

Benutzerdefinierter Charakter

Die Funktion lcd.print() unterstützt nur ASCII-Zeichen. Wenn Sie ein Sonderzeichen oder Symbol anzeigen möchten (z. B. Herz, wütender Vogel), müssen Sie den untenstehenden Zeichensatzgenerator verwenden.

LCD 16x2 kann 32 Zeichen anzeigen (2 Zeilen und 16 Spalten). Jedes Zeichen besteht aus 40 Pixeln (8 Zeilen und 5 Spalten).

Arduino LCD 16x2 Pixel

Der Zeichengenerator stellt ein Zeichen dar (40 Pixel groß). Sie müssen lediglich die folgenden Schritte ausführen:

Click on each pixel to select/deselect


Copy below custom character code
Replace the customChar[8] in the below code
#include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27, 16, 2); // I2C-Adresse 0x27, 16 Spalten und 2 Zeilen byte customChar[8] = { 0b00000, 0b01010, 0b11111, 0b11111, 0b01110, 0b00100, 0b00000, 0b00000 }; void setup() { lcd.init(); // Initialisiere das LCD lcd.backlight(); lcd.createChar(0, customChar); // Erstelle ein neues benutzerdefiniertes Zeichen lcd.setCursor(2, 0); // Bewege den Cursor zu (2, 0) lcd.write((byte)0); // Zeige das benutzerdefinierte Zeichen an (2, 0) } void loop() { }

Ergebnis auf dem LCD:

LCD benutzerdefiniertes Zeichen

Mehrere benutzerdefinierte Zeichen

Wir können bis zu 8 benutzerdefinierte Zeichen erstellen (mit Indizes von 0 bis 7). Das folgende Beispiel erzeugt und zeigt drei Zeichen.

#include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27, 16, 2); // I2C-Adresse 0x27, 16 Spalten und 2 Zeilen byte customChar0[8] = { 0b00000, 0b01010, 0b11111, 0b11111, 0b01110, 0b00100, 0b00000, 0b00000 }; byte customChar1[8] = { 0b00100, 0b01110, 0b11111, 0b00100, 0b00100, 0b00100, 0b00100, 0b00100 }; byte customChar2[8] = { 0b00100, 0b00100, 0b00100, 0b00100, 0b00100, 0b11111, 0b01110, 0b00100 }; void setup() { lcd.init(); // initialisiere das LCD lcd.backlight(); lcd.createChar(0, customChar0); // erstelle ein neues benutzerdefiniertes Zeichen (Index 0) lcd.createChar(1, customChar1); // erstelle ein neues benutzerdefiniertes Zeichen (Index 1) lcd.createChar(2, customChar2); // erstelle ein neues benutzerdefiniertes Zeichen (Index 2) lcd.setCursor(2, 0); // Cursor zu (2, 0) verschieben lcd.write((byte)0); // gib das benutzerdefinierte Zeichen 0 an der Position (2, 0) aus lcd.setCursor(4, 0); // Cursor zu (4, 0) verschieben lcd.write((byte)1); // gib das benutzerdefinierte Zeichen 1 an der Position (4, 0) aus lcd.setCursor(6, 0); // Cursor zu (6, 0) verschieben lcd.write((byte)2); // gib das benutzerdefinierte Zeichen 2 an der Position (6, 0) aus } void loop() { }

Ergebnis auf dem LCD:

LCD mit mehreren benutzerdefinierten Zeichen

Zusammenfassung: wie man ein benutzerdefiniertes Zeichen auf dem LCD verwendet

  • Verwenden Sie den obigen Zeichengenerator, um Binärcode für das benutzerdefinierte Zeichen zu erstellen.
  • Geben Sie den Binärcode für das benutzerdefinierte Zeichen an (kopieren Sie ihn aus dem obigen Schritt).
byte customChar[8] = { 0b00000, 0b01010, 0b11111, 0b11111, 0b01110, 0b00100, 0b00000, 0b00000 };
  • Erzeuge ein benutzerdefiniertes Zeichen und ordne es einem Indexwert zu (von 0 bis 7) in der setup()-Funktion
lcd.createChar(index, customChar);
  • Drucke das benutzerdefinierte Zeichen auf dem LCD jederzeit und überall (in der setup()- oder loop()-Funktion).
lcd.setCursor(column, row); // Cursor an eine gewünschte Position setzen lcd.write((byte)index); // Das benutzerdefinierte Zeichen an der gewünschten Position ausgeben

Andere Funktionen

Füge die untenstehenden Funktionen nacheinander in die loop()-Funktion ein. Füge nach jeder Funktion delay(5000) hinzu.

  • Klarer LCD-Bildschirm
lcd.clear();
  • Bewegen Sie den Cursor in die obere linke Ecke des LCD-Bildschirms
lcd.home();
  • Bewege den Cursor zu einer Position (Spalte, Zeile)
lcd.setCursor(column, row);
  • Den LCD-Cursor anzeigen
lcd.cursor();
  • Versteckt den LCD-Cursor.
lcd.noCursor();
  • Den blinkenden LCD-Cursor anzeigen
lcd.blink()
  • Schaltet den blinkenden LCD-Cursor aus.
lcd.noBlink()

Fordere dich heraus

Verwenden Sie ein LCD, um eines der folgenden Projekte durchzuführen:

Fehlerbehebung bei LCD-I2C

Wenn der Text auf dem LCD I2C nicht angezeigt wird, prüfen Sie bitte die folgenden Punkte.

  1. Passen Sie die Helligkeit des LCDs an, indem Sie am Potentiometer auf der Rückseite des LCD drehen.
  2. Je nach Hersteller kann die I2C-Adresse des LCD unterschiedlich sein. In der Regel beträgt die Standard-I2C-Adresse des LCD 0x27 oder 0x3F. Probieren Sie diese Werte nacheinander aus. Wenn Sie noch immer scheitern, führen Sie den untenstehenden Code aus, um die I2C-Adresse zu finden.
// I2C-Adressenscanner-Programm #include <Wire.h> void setup() { Wire.begin(); Serial.begin(9600); Serial.println("I2C Scanner"); } void loop() { byte error, address; int nDevices; Serial.println("Scanning..."); nDevices = 0; for(address = 1; address < 127; address++ ) { Wire.beginTransmission(address); error = Wire.endTransmission(); if (error == 0) { Serial.print("I2C device found at address 0x"); if (address < 16) Serial.print("0"); Serial.print(address,HEX); Serial.println(" !"); nDevices++; } else if (error==4) { Serial.print("Unknown error at address 0x"); if (address < 16) Serial.print("0"); Serial.println(address,HEX); } } if (nDevices == 0) Serial.println("No I2C devices found"); else Serial.println("done"); delay(5000); // Warte 5 Sekunden bis zum nächsten Scan }

Das Ergebnis im seriellen Monitor:

COM6
Send
Scanning... I2C device found at address 0x3F ! done Scanning... I2C device found at address 0x3F ! done
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

※ UNSERE NACHRICHTEN

  • Sie können gerne den Link zu diesem Tutorial teilen. Bitte verwenden Sie jedoch unsere Inhalte nicht auf anderen Websites. Wir haben viel Mühe und Zeit in die Erstellung der Inhalte investiert, bitte respektieren Sie unsere Arbeit!