Zeigen Sie Zeichen auf dem I2C 1602 LCD mit Raspberry Pi 3 und Java an

Einführung

Zeigen Sie die Zeichen auf dem 1602 LCD an, das an den Raspberry Pi angeschlossen ist. Die Programmiersprache verwendet Java.

Wir verwenden Pi4J, um den GPIO des Raspberry Pi von Java aus zu steuern, der eine generische Bibliothek zur Steuerung des LCD von Anfang an enthält. Dieses Mal werden wir diese Bibliothek benutzen.

Informationen zur Pi4J-Umgebung finden Sie im folgenden Artikel unter "Installieren von Pi4J".

Stellen Sie die Sensorinformationen von Raspberry Pi grafisch dar und bereiten Sie eine Umgebung vor, die mit einem Webbrowser überprüft werden kann

Vorbereitung

Das diesmal verwendete Modul war eine Kombination aus 1602 LCD und PCF8574 (wahrscheinlich?) Als I2C-Modul.

Oberfläche zurück
1602 Oberfläche 1602Rückseite

(Referenz) AMC1602A-I2C-Datenblatt

Da dieses Modul über I2C kommuniziert, lassen Sie die I2C-Kommunikationsfunktion des Raspberry Pi aktiviert (standardmäßig deaktiviert).

Um es über die Raspbian-Benutzeroberfläche zu aktivieren, öffnen Sie das Einstellungsfeld unter "Einstellungen" - "Raspberry Pi-Einstellungen" über die Schaltfläche "Menü" in der Taskleiste und wählen Sie die Registerkarte "Schnittstelle", um "I2C" zu aktivieren. Um es über die Befehlszeile zu aktivieren, geben Sie den Befehl sudo raspi-config ein, wählen Sie Schnittstellenoptionen> I2C und schließlich Ja.

Starten Sie nach dem Einstellen für alle Fälle neu.

Der Raspberry Pi und das 1602 LCD wurden wie folgt verbunden.

1602.png

LCD-Steuerklasse

Die Steuerung eines LCD mit einer I2C-Schnittstelle verwendet die I2CLcdDisplay-Klasse im Paket com.pi4j.component.lcd.impl.

Dokumentation der I2CLcdDisplay-Klasse

Instanz erstellen

Um das LCD programmgesteuert zu steuern, erstellen Sie zunächst eine Instanz der I2CLcdDisplay-Klasse. Der Konstruktor hat das folgende Format.

python


I2CLcdDisplay(int rows, int columns, int i2cBus, int i2cAddress, int backlightBit, int rsBit, int rwBit, int eBit, int d7, int d6, int d5, int d4) 

Zusätzlich zur Größe des LCD-Anzeigebereichs, der Nummer des zu verwendenden I2C-Busses und der Adresse des Moduls muss der Konstruktor die Bitkonfiguration für die Interaktion mit dem Modul in I2C angeben. Geben Sie den 3. Parameter (i2cBus) und den 4. Parameter (i2cAddress) entsprechend Ihrer Umgebung an. Geben Sie in dem diesmal verwendeten Modul die folgenden Werte für andere Parameter an, um eine Instanz zu erstellen.

python


I2CLcdDisplay lcd = new I2CLcdDisplay(2, 16, 1, 0x27, 3, 0, 1, 2, 7, 6, 5, 4);

Verwenden Sie den folgenden Befehl, um die Adresse des im 4. Parameter angegebenen Moduls zu überprüfen. Es scheint, dass einige der verwendeten I2C-Module als 3F erkannt werden.

pi@raspberrypi:~ $ sudo i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- 27 -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
pi@raspberrypi:~ $

Methode

Die folgenden Methoden sind in der I2CLcdDisplay-Klasse definiert. Diejenigen, die in der internen Verarbeitung verwendet werden, und diejenigen, die von höheren Klassen geerbt wurden und als unnötig angesehen werden, werden weggelassen.

Wenn Sie die Zeilen- und Spaltenpositionen als Parameter angeben, geben Sie die Werte an, die jeweils von 0 gezählt werden.

Methoden und Merkmale
void clear()
Löschen Sie den Bildschirm und bewegen Sie den Cursor nach links oben auf dem Bildschirm.
void clear(int row)
Löscht die angegebene Zeile durch Überschreiben des Leerzeichens.
void clear(int row, int column, int length)
Löscht durch Überschreiben des Leerzeichens der angegebenen Länge von der angegebenen Position und bewegt den Cursor dahinter.
void setCursorHome()
Bewegen Sie den Cursor nach links oben auf dem Bildschirm
void setCursorPosition(int row)
Bewegt den Cursor an den Anfang der angegebenen Zeile.
void setCursorPosition(int row, int column)
Bewegt den Cursor an die angegebene Position.
void write(byte data)
void write(byte[] data)
void write(char data)
void write(char[] data)
void write(String data)
Überschreibt ein Zeichen oder eine Zeichenfolge an der Cursorposition und bewegt den Cursor dahinter.
void write(int row, byte data)
void write(int row, byte[] data)
void write(int row, char data)
void write(int row, char[] data)
void write(int row, String data)
Überschreibt ein Zeichen oder eine Zeichenfolge vom Anfang der angegebenen Zeile und bewegt den Cursor danach.
void write(int row, int column, byte data)
void write(int row, int column, byte[] data)
void write(int row, int column, char data)
void write(int row, int column, char[] data)
void write(int row, int column, String data)
Überschreibt ein Zeichen oder eine Zeichenfolge von der angegebenen Position und bewegt den Cursor dahinter.
void write(int row, String data, LCDTextAlignment alignment)
Überschreibt die Zeichenfolge linksbündig, zentriert oder rechtsbündig in der angegebenen Zeile und bewegt den Cursor dahinter. Die folgenden Werte können für die Ausrichtung angegeben werden.
  LCDTextAlignment.ALIGN_CENTER
  LCDTextAlignment.ALIGN_LEFT
  LCDTextAlignment.ALIGN_RIGHT
void write(String data, Object... arguments)
void write(int row, String data, Object... arguments)
void write(int row, String data, LCDTextAlignment alignment, Object... arguments)
void write(int row, int column, String data, Object... arguments)
Überschreibt die Zeichenfolge am Cursor oder an der angegebenen Position und bewegt den Cursor dahinter. Geben Sie für Daten die Formatzeichenfolge und für Argumente die Liste der Objekte an, die der Formatzeichenfolge (Zeichenfolge) entsprechen..format​(String data, Object... arguments)Die von zurückgegebene Zeichenfolge wird angezeigt.
void writeln(int row, String data)
void writeln(int row, String data, LCDTextAlignment alignment)
void writeln(int row, String data, LCDTextAlignment alignment, Object... arguments)
void writeln(int row, String data, Object... arguments)
Ersetzt die angegebene Zeile durch eine Zeichenfolge (der andere Teil als die Zeichenfolge wird durch Überschreiben des Leerzeichens gelöscht).
int getColumnCount()
Gibt die Anzahl der auf dem Bildschirm angezeigten Ziffern zurück (16).
int getRowCount()
Gibt die Anzahl der auf dem Bildschirm angezeigten Zeilen zurück (2).
void setBacklight(boolean backlight)
Gibt an, ob die Hintergrundbeleuchtung eingeschaltet (wahr) oder ausgeschaltet (falsch) ist. Die Einstellungen werden nicht sofort wiedergegeben, sondern beim Bedienen des Bildschirms (Schreiben von Zeichen, Bewegen des Cursors usw.).
boolean isBacklight()
Gibt den aktuellen Status der Hintergrundbeleuchtung ein / aus zurück.

Demo mit LCD-Steuerklasse

Ich habe ein Demo-Programm mit den oben eingeführten Klassen und Methoden erstellt. Wenn Sie es tatsächlich verschieben möchten, ändern Sie bitte den folgenden fettgedruckten Teil der I2C-Busnummer und des Moduladressens entsprechend Ihrer Umgebung, wie im Abschnitt "Erstellen einer Instanz" beschrieben. ..

I2CLcdDisplay lcd = new I2CLcdDisplay(2, 16, 1, 0x27, 3, 0, 1, 2, 7, 6, 5, 4);

I2C1602LCDDemo.java


import java.text.SimpleDateFormat;
import java.util.Date;

import com.pi4j.component.lcd.LCDTextAlignment;
import com.pi4j.component.lcd.impl.I2CLcdDisplay;

public class I2C1602LCDDemo {
    public static final int LCD_ROW_1 = 0;
    public static final int LCD_ROW_2 = 1;

    public static final String DEMO_TITLE = "[I2C 1602  DEMO]";

    public static void main(String[] args) throws Exception {

        // for 1602 LCD + PCF8574 I2C module
        I2CLcdDisplay lcd = new I2CLcdDisplay(2, 16, 1, 0x27, 3, 0, 1, 2, 7, 6, 5, 4);

        lcd.write(LCD_ROW_1, DEMO_TITLE);
        Thread.sleep(3000);

        lcd.clear();
        Thread.sleep(1000);

        // show all characters
        for (int ch = 0x10; ch <= 0xFF; ch += 4) {
            lcd.write(LCD_ROW_1, "%02XH %02XH %02XH %02XH", ch, ch + 1, ch + 2, ch + 3);
            lcd.write(LCD_ROW_2, " %c   %c   %c   %c",      ch, ch + 1, ch + 2, ch + 3);
            Thread.sleep(800);
        }

        // show characters at specified positions
        lcd.setCursorHome();

        for (int column = 0; column < lcd.getColumnCount(); column++) {
            lcd.write((byte)0xFF);
            Thread.sleep(100);
        }
        for (int column = lcd.getColumnCount() - 1; column >= 0; column--) {
            lcd.write(LCD_ROW_2, column, (byte)0xFF);
            Thread.sleep(100);
        }

        lcd.setCursorHome();
        for (int column = 0; column < lcd.getColumnCount(); column++) {
            lcd.write(DEMO_TITLE.charAt(column));
            Thread.sleep(100);
        }

        for (int column = lcd.getColumnCount() - 1; column >= 0; column--) {
            lcd.write(LCD_ROW_2, column, ' ');
            Thread.sleep(100);
        }

        // show text alignment
        lcd.writeln(LCD_ROW_2, "< LEFT", LCDTextAlignment.ALIGN_LEFT);
        Thread.sleep(2000);

        lcd.writeln(LCD_ROW_2, "RIGHT >", LCDTextAlignment.ALIGN_RIGHT);
        Thread.sleep(2000);

        lcd.writeln(LCD_ROW_2, "< CENTER >", LCDTextAlignment.ALIGN_CENTER);
        Thread.sleep(2000);

        // show clock
        SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss");
        while (true) {
            lcd.writeln(LCD_ROW_2, formatter.format(new Date()), LCDTextAlignment.ALIGN_CENTER);
            Thread.sleep(1000);
        }
    }
}

Um dieses Programm auszuführen, legen Sie die obige Datei in einem Verzeichnis Ihrer Wahl ab und kompilieren Sie sie.

pi@raspberrypi:~ $ pi4j -c I2C1602LCDDemo.java
--------------------------------------------
Pi4J - Compiling: I2C1602LCDDemo.java
--------------------------------------------
+ javac -classpath '.:classes:*:classes:/opt/pi4j/lib/*' -d . I2C1602LCDDemo.java
pi@raspberrypi:~ $
 

Führen Sie nach dem Kompilieren die Root-Berechtigungen aus. Wenn die Zeichen nicht angezeigt werden, versuchen Sie, den Kontrast anzupassen, indem Sie den + -Knopf auf der Rückseite des Moduls mit einem Treiber drehen.

Wenn die Demo beendet ist, wird die Uhr angezeigt. Drücken Sie daher zum Beenden Strg + C.

pi@raspberrypi:~ $ sudo pi4j I2C1602LCDDemo
+ java -classpath '.:classes:*:classes:/opt/pi4j/lib/*' I2C1602LCDDemo
^Cpi@raspberrypi:~ $

1602Demo.JPG

Anzeige von benutzerdefinierten Zeichen

Das 1602 LCD hat auch eine Funktion, um Zeichenmuster (benutzerdefinierte Zeichen) aus dem Programm zu registrieren und anzuzeigen.

lcd.png

Lesen Sie auch den folgenden Artikel, der die Klasse der diesmal eingeführten Universalbibliothek erweitert, um diese Funktion zu aktivieren.

Benutzerdefinierte Zeichen auf dem I2C 1602 LCD mit Raspberry Pi 3 und Java anzeigen

Recommended Posts

Zeigen Sie Zeichen auf dem I2C 1602 LCD mit Raspberry Pi 3 und Java an
Zeigen Sie benutzerdefinierte Zeichen auf dem I2C 1602 LCD mit Raspberry Pi 3 und Java an
Wie man javafx mit Raspeye ausführt veröffentlicht am 12.07.2020
Lesen Sie Temperatur / Luftfeuchtigkeit von Raspberry Pi 3 & DHT11 mit Java ab
Installieren Sie Docker auf Raspberry Pi
Setzen Sie Ubuntu 20.04.1 in Raspberry 4 ein
Minecraft Server auf Raspberry Pi 4
Saisonale Anzeige mit Java-Schalter
Installieren Sie MariaDB unter Raspberry Pi OS
Versuchen Sie, CentOS 8 in Raspberry Pi 3 zu integrieren
Hinweis: JavaMail-Einstellungen in Raspeye
Verarbeiten Sie die vom menschlichen Sensor HC-SR501 erkannte Bewegung mit Raspberry Pi 3 & Java
Lesen Sie Druck und Temperatur von Raspberry Pi 3 & BMP180 mit Java ab
Headless Installation von Ubuntu 20.10 auf Raspberry Pi
Raspberry Pi Zero mit Ubuntu-artigem Yocto-gcc mit libusb
Verwenden von JupyterLab + Java mit WSL unter Windows 10
Versionsverwaltung von Java mit jenv von OSX
Finden Sie Raspberry Pi von Android mit mDNS
Installieren Sie Java8 mit Yum unter Amazon Linux
Installieren Sie CentOS 7 auf Raspberry pi 4 Model B.
Erstellen Sie OpenCV mit Java Wrapper unter Ubuntu 18.04
Stellen Sie auf Raspberry Pi eine serielle Verbindung zu Ubuntu her
Herausforderung, mit verstümmelten Zeichen mit Java AudioSystem.getMixerInfo () umzugehen
Installieren Sie Docker auf Raspberry Pi 4 und Raspberry Pi OS 64bit
Wechseln Sie einfach die Java-Versionen mit Alias unter macOS
Radiko Aufnahmeserver mit Raspberry Pi 4 (Docker nicht verwendet)
Ich konnte Docker nicht mit Himbeer pi2 b + installieren.
Installieren Sie Java 14 (OpenJDK: AdoptOpenJDK) unter macOS mit Homebrew
Zeigen Sie mit Swing ein Bild vom Typ Mat auf der GUI an
Anmerkung: [Java] Raspberry Pi-Daten mit SFTP abrufen