Affichez les caractères sur l'écran LCD 1602 connecté au Raspberry Pi. Le langage de programmation utilise Java.
Nous utilisons Pi4J pour contrôler le GPIO du Raspberry Pi à partir de Java, qui comprend une bibliothèque générique pour contrôler l'écran LCD depuis le début. Cette fois, nous utiliserons cette bibliothèque.
Pour l'environnement Pi4J, reportez-vous à «Installation de Pi4J» dans l'article suivant.
Le module utilisé cette fois est une combinaison de 1602 LCD et PCF8574 (probablement?) En tant que module I2C.
surface | retour |
---|---|
(Référence) Fiche technique AMC1602A-I2C
Puisque ce module communique sur I2C, laissez la fonction de communication I2C du Raspberry Pi activée (elle est désactivée par défaut).
Pour l'activer à partir de l'interface graphique Raspbian, ouvrez le panneau des paramètres depuis "Paramètres" - "Paramètres Raspberry Pi" depuis le bouton "Menu" de la barre des tâches, et sélectionnez l'onglet "Interface" pour activer "I2C". Pour l'activer à partir de la ligne de commande, entrez la commande sudo raspi-config, sélectionnez Options d'interfaçage> I2C, puis sélectionnez Oui.
Après le réglage, redémarrez au cas où.
Le Raspberry Pi et le 1602 LCD ont été connectés comme suit.
Le contrôle d'un écran LCD avec une interface I2C utilise la classe I2CLcdDisplay dans le package com.pi4j.component.lcd.impl.
Documentation de la classe I2CLcdDisplay
Pour contrôler l'écran LCD par programme, créez d'abord une instance de la classe I2CLcdDisplay. Le constructeur a le format suivant.
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)
En plus de la taille de la zone d'affichage LCD, du numéro du bus I2C à utiliser et de l'adresse du module, le constructeur doit spécifier la configuration des bits pour interagir avec le module dans I2C. Spécifiez le 3ème paramètre (i2cBus) et le 4ème paramètre (i2cAddress) en fonction de votre environnement. Dans le module utilisé cette fois, spécifiez les valeurs suivantes pour les autres paramètres afin de créer une instance.
python
I2CLcdDisplay lcd = new I2CLcdDisplay(2, 16, 1, 0x27, 3, 0, 1, 2, 7, 6, 5, 4);
Utilisez la commande suivante pour vérifier l'adresse du module spécifié dans le 4ème paramètre. Il semble que certains des modules I2C utilisés soient reconnus comme 3F.
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:~ $
Les méthodes suivantes sont définies dans la classe I2CLcdDisplay. Celles utilisées dans le traitement interne et celles héritées de classes supérieures considérées comme inutiles sont omises.
Lorsque vous spécifiez les positions des lignes et des colonnes comme paramètres, spécifiez les valeurs comptées à partir de 0 pour chacune.
Méthodes et fonctionnalités |
---|
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() |
|
J'ai créé un programme de démonstration en utilisant les classes et les méthodes présentées ci-dessus. Si vous souhaitez réellement le déplacer, modifiez le numéro de bus I2C en gras et l'adresse du module suivant si nécessaire en fonction de votre environnement, comme indiqué dans la section "Créer une instance". ..
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);
}
}
}
Pour exécuter ce programme, placez le fichier ci-dessus dans un répertoire de votre choix et compilez-le.
pi@raspberrypi:~ $ pi4j -c I2C1602LCDDemo.java
--------------------------------------------
Pi4J - Compiling: I2C1602LCDDemo.java
--------------------------------------------
+ javac -classpath '.:classes:*:classes:/opt/pi4j/lib/*' -d . I2C1602LCDDemo.java
pi@raspberrypi:~ $
Après la compilation, exécutez avec les privilèges root. Si les caractères ne s'affichent pas, essayez de régler le contraste en tournant le bouton + à l'arrière du module avec un pilote.
Lorsque la démo est terminée, l'horloge s'affiche, appuyez donc sur Ctrl + C pour quitter.
pi@raspberrypi:~ $ sudo pi4j I2C1602LCDDemo
+ java -classpath '.:classes:*:classes:/opt/pi4j/lib/*' I2C1602LCDDemo
^Cpi@raspberrypi:~ $
L'écran LCD 1602 a également une fonction pour enregistrer des motifs de caractères (caractères définis par l'utilisateur) du programme et les afficher.
Veuillez également vous reporter à l'article ci-dessous qui étend la classe de la bibliothèque polyvalente introduite cette fois pour activer cette fonction.
Recommended Posts