Afficher les caractères sur l'écran LCD I2C 1602 avec Raspberry Pi 3 et Java

introduction

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.

Représentez graphiquement les informations du capteur de Raspberry Pi et préparez un environnement qui peut être vérifié avec un navigateur Web

Préparation

Le module utilisé cette fois est une combinaison de 1602 LCD et PCF8574 (probablement?) En tant que module I2C.

surface retour
1602 surface 1602facearrière

(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.

1602.png

Classe de contrôle LCD

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

Créer une instance

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:~ $

Méthode

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()
Effacez l'écran et déplacez le curseur vers le coin supérieur gauche de l'écran.
void clear(int row)
Efface la ligne spécifiée en écrasant le caractère d'espace.
void clear(int row, int column, int length)
Efface en écrasant le caractère espace de la longueur spécifiée à partir de la position spécifiée et déplace le curseur derrière lui.
void setCursorHome()
Déplacez le curseur en haut à gauche de l'écran
void setCursorPosition(int row)
Déplace le curseur au début de la ligne spécifiée.
void setCursorPosition(int row, int column)
Déplace le curseur à la position spécifiée.
void write(byte data)
void write(byte[] data)
void write(char data)
void write(char[] data)
void write(String data)
Remplace un caractère ou une chaîne à la position du curseur et déplace le curseur derrière lui.
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)
Remplace un caractère ou une chaîne depuis le début de la ligne spécifiée et déplace le curseur après lui.
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)
Remplace un caractère ou une chaîne de la position spécifiée et déplace le curseur derrière lui.
void write(int row, String data, LCDTextAlignment alignment)
Remplace la chaîne par la ligne spécifiée avec une justification gauche, centrale ou droite et déplace le curseur derrière elle. Les valeurs suivantes peuvent être spécifiées pour l'alignement.
  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)
Remplace la chaîne de caractères au niveau du curseur ou de la position spécifiée et déplace le curseur derrière elle. Pour les données, spécifiez la chaîne de format et pour les arguments, spécifiez la liste des objets correspondant à la chaîne de format (String)..format​(String data, Object... arguments)La chaîne renvoyée par s'affiche).
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)
Remplace la ligne spécifiée par une chaîne de caractères (la partie autre que la chaîne de caractères est effacée en écrasant le caractère espace).
int getColumnCount()
Renvoie le nombre de chiffres affichés à l'écran (16).
int getRowCount()
Renvoie le nombre de lignes affichées à l'écran (2).
void setBacklight(boolean backlight)
Spécifie si le rétroéclairage est activé (vrai) ou désactivé (faux). Les réglages ne sont pas reflétés immédiatement, mais sont reflétés lorsque l'écran est utilisé (écriture de caractères, déplacement du curseur, etc.).
boolean isBacklight()
Renvoie l'état actuel du rétroéclairage activé / désactivé.

Démo utilisant la classe de contrôle LCD

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:~ $

1602Demo.JPG

Affichage des caractères définis par l'utilisateur

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.

lcd.png

Veuillez également vous reporter à l'article ci-dessous qui étend la classe de la bibliothèque polyvalente introduite cette fois pour activer cette fonction.

Afficher les caractères définis par l'utilisateur sur l'écran LCD I2C 1602 avec Raspberry Pi 3 et Java

Recommended Posts

Afficher les caractères sur l'écran LCD I2C 1602 avec Raspberry Pi 3 et Java
Afficher les caractères définis par l'utilisateur sur l'écran LCD I2C 1602 avec Raspberry Pi 3 et Java
Comment exécuter javafx avec Raspeye publié le 12/07/2020
Lire la température / l'humidité avec Java de Raspberry Pi 3 & DHT11
Installez Docker sur Raspberry Pi
Mettez Ubuntu 20.04.1 dans Raspberry 4
Serveur Minecraft sur Raspberry Pi 4
Affichage saisonnier avec commutateur Java
Installez MariaDB sur le système d'exploitation Raspberry Pi
Essayez de mettre CentOS 8 dans Raspberry Pi 3
Remarque: paramètres javaMail dans Raspeye
Traitez le mouvement détecté par le capteur humain HC-SR501 avec Raspberry Pi 3 et Java
Lire la pression et la température de Raspberry Pi 3 et BMP180 avec Java
Installation sans tête d'Ubuntu 20.10 sur Raspberry Pi
Raspberry Pi Zero avec Yocto-gcc de style Ubuntu avec libusb
Utilisation de JupyterLab + Java avec WSL sous Windows 10
Gestion des versions de java avec jenv d'OSX
Trouvez Raspberry Pi d'Android avec mDNS
Installez Java8 avec Yum sur Amazon Linux
Installez CentOS 7 sur Raspberry pi 4 modèle B
Construire OpenCV avec Java Wrapper sur Ubuntu 18.04
Connectez-vous en série à Ubuntu sur Raspberry Pi
Défi pour gérer les caractères déformés avec Java AudioSystem.getMixerInfo ()
Installez Docker sur Raspberry Pi 4 et Raspberry Pi OS 64 bits
Changez facilement de version de Java avec un alias sur macOS
Serveur d'enregistrement Radiko avec Raspberry Pi 4 (Docker non utilisé)
Je n'ai pas pu installer docker avec raspberry pi2 b +.
Installez Java 14 (OpenJDK: AdoptOpenJDK) sur macOS avec Homebrew
Afficher l'image de type Mat sur l'interface graphique avec Swing
Mémo: [Java] Obtenez des données Raspberry Pi avec SFTP