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".
Das diesmal verwendete Modul war eine Kombination aus 1602 LCD und PCF8574 (wahrscheinlich?) Als I2C-Modul.
Oberfläche | zurück |
---|---|
(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.
Die Steuerung eines LCD mit einer I2C-Schnittstelle verwendet die I2CLcdDisplay-Klasse im Paket com.pi4j.component.lcd.impl.
Dokumentation der I2CLcdDisplay-Klasse
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:~ $
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() |
|
void clear(int row) |
|
void clear(int row, int column, int length) |
|
void setCursorHome() |
|
void setCursorPosition(int row) |
|
void setCursorPosition(int row, int column) |
|
void write(byte data) void write(byte[] data) void write(char data) void write(char[] data) void write(String data) |
|
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) |
|
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) |
|
void write(int row, String data, LCDTextAlignment alignment) |
|
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) |
|
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) |
|
int getColumnCount() |
|
int getRowCount() |
|
void setBacklight(boolean backlight) |
|
boolean isBacklight() |
|
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:~ $
Das 1602 LCD hat auch eine Funktion, um Zeichenmuster (benutzerdefinierte Zeichen) aus dem Programm zu registrieren und anzuzeigen.
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