Note
Bonjour et bienvenue dans la communauté des passionnés de Raspberry Pi & Arduino & ESP32 de SunFounder sur Facebook ! Plongez dans l’univers de Raspberry Pi, Arduino et ESP32 avec d’autres passionnés.
Pourquoi nous rejoindre ?
Support d’experts : Résolvez les problèmes après-vente et les défis techniques avec l’aide de notre communauté et de notre équipe.
Apprendre et partager : Échangez des astuces et des tutoriels pour améliorer vos compétences.
Aperçus exclusifs : Profitez d’un accès anticipé aux nouvelles annonces de produits et aux avant-premières.
Réductions spéciales : Bénéficiez de réductions exclusives sur nos derniers produits.
Promotions festives et concours : Participez à des concours et des promotions spéciales lors des fêtes.
👉 Prêt à explorer et créer avec nous ? Cliquez sur [Ici] et rejoignez-nous dès aujourd’hui !
1.1.7 I2C LCD1602
Introduction
Le LCD1602 est un écran à cristaux liquides de type caractère, capable d’afficher simultanément 32 caractères (16*2).
Composants
Principe
I2C LCD1602
GND: Masse
VCC: Alimentation en tension, 5V.
SDA: Ligne de données série. Connectez-la à VCC via une résistance pull-up.
SCL: Ligne d’horloge série. Connectez-la à VCC via une résistance pull-up.
Comme vous le savez, bien que les écrans LCD et d’autres affichages améliorent grandement l’interaction homme-machine, ils partagent une faiblesse commune. Lorsqu’ils sont connectés à un contrôleur, plusieurs E/S sont occupées, ce qui réduit le nombre de ports disponibles pour d’autres fonctions.
Pour remédier à ce problème, le LCD1602 avec un module I2C a été développé. Le module I2C intègre une puce PCF8574 qui convertit les données série I2C en données parallèles pour l’affichage LCD.
Adresse I2C
L’adresse par défaut est généralement 0x27, dans certains cas, elle peut être 0x3F.
Prenons l’exemple de l’adresse par défaut 0x27. L’adresse du périphérique peut être modifiée en court-circuitant les broches A0/A1/A2 ; à l’état par défaut, A0/A1/A2 est à 1, et si le cavalier est enlevé, A0/A1/A2 est à 0.
Rétroéclairage/Contraste
Le rétroéclairage peut être activé via un cavalier, et en enlevant le cavalier, le rétroéclairage est désactivé. Le potentiomètre bleu à l’arrière est utilisé pour ajuster le contraste (la différence de luminosité entre le blanc le plus clair et le noir le plus sombre).
Cavalier de court-circuit : Le rétroéclairage peut être activé par ce cavalier, retirez-le pour le désactiver.
Potentiomètre : Utilisé pour ajuster le contraste (la clarté du texte affiché), augmentez-le en tournant dans le sens des aiguilles d’une montre et diminuez-le dans le sens inverse.
Schéma
T-Board Name |
physical |
SDA1 |
Pin 3 |
SCL1 |
Pin 5 |
Procédures expérimentales
Étape 1 : Montez le circuit.
Étape 2 : Configurez l’I2C (voir Configuration I²C. Si vous avez déjà configuré l’I2C, passez cette étape.)
Pour les utilisateurs du langage C
Étape 3 : Changez de répertoire.
cd ~/davinci-kit-for-raspberry-pi/c/1.1.7/
Étape 4 : Compilez.
gcc 1.1.7_Lcd1602.c -lwiringPi
Étape 5 : Exécutez.
sudo ./a.out
Après l’exécution du code, vous verrez « Greetings », « From SunFounder » affiché sur le LCD.
Note
Si une erreur du type
wiringPi.h: No such file or directoryapparaît, veuillez vous référer à Installer et vérifier WiringPi.Si vous obtenez l’erreur
Unable to open I2C device: No such file or directory, vous devez vous référer à Configuration I²C pour activer l’I2C et vérifier si le câblage est correct.Si le code et le câblage sont corrects, mais que l’écran LCD ne s’affiche toujours pas, vous pouvez ajuster le potentiomètre à l’arrière pour augmenter le contraste.
Code
#include <stdio.h>
#include <wiringPi.h>
#include <wiringPiI2C.h>
#include <string.h>
int LCDAddr = 0x27;
int BLEN = 1;
int fd;
void write_word(int data){
int temp = data;
if ( BLEN == 1 )
temp |= 0x08;
else
temp &= 0xF7;
wiringPiI2CWrite(fd, temp);
}
void send_command(int comm){
int buf;
// Envoyer d'abord les bits 7-4
buf = comm & 0xF0;
buf |= 0x04; // RS = 0, RW = 0, EN = 1
write_word(buf);
delay(2);
buf &= 0xFB; // Mettre EN = 0
write_word(buf);
// Envoyer ensuite les bits 3-0
buf = (comm & 0x0F) << 4;
buf |= 0x04; // RS = 0, RW = 0, EN = 1
write_word(buf);
delay(2);
buf &= 0xFB; // Mettre EN = 0
write_word(buf);
}
void send_data(int data){
int buf;
// Envoyer d'abord les bits 7-4
buf = data & 0xF0;
buf |= 0x05; // RS = 1, RW = 0, EN = 1
write_word(buf);
delay(2);
buf &= 0xFB; // Mettre EN = 0
write_word(buf);
// Envoyer ensuite les bits 3-0
buf = (data & 0x0F) << 4;
buf |= 0x05; // RS = 1, RW = 0, EN = 1
write_word(buf);
delay(2);
buf &= 0xFB; // Mettre EN = 0
write_word(buf);
}
void init(){
send_command(0x33); // Doit initialiser en mode 8 bits en premier
delay(5);
send_command(0x32); // Puis passer en mode 4 bits
delay(5);
send_command(0x28); // 2 lignes et caractères de 5*7 points
delay(5);
send_command(0x0C); // Activer l'affichage sans curseur
delay(5);
send_command(0x01); // Effacer l'écran
wiringPiI2CWrite(fd, 0x08);
}
void clear(){
send_command(0x01); // Effacer l'écran
}
void write(int x, int y, char data[]){
int addr, i;
int tmp;
if (x < 0) x = 0;
if (x > 15) x = 15;
if (y < 0) y = 0;
if (y > 1) y = 1;
// Déplacer le curseur
addr = 0x80 + 0x40 * y + x;
send_command(addr);
tmp = strlen(data);
for (i = 0; i < tmp; i++){
send_data(data[i]);
}
}
void main(){
fd = wiringPiI2CSetup(LCDAddr);
init();
write(0, 0, "Greetings!");
write(1, 1, "From SunFounder");
}
Explication du Code
void write_word(int data){……}
void send_command(int comm){……}
void send_data(int data){……}
void init(){……}
void clear(){……}
void write(int x, int y, char data[]){……}
Ces fonctions sont utilisées pour contrôler le code source ouvert de l’I2C LCD1602. Elles nous permettent d’utiliser facilement l’I2C LCD1602. Parmi ces fonctions, init() est utilisée pour l’initialisation, clear() pour effacer l’écran, write() pour écrire ce qui est affiché, et les autres fonctions soutiennent ces opérations.
fd = wiringPiI2CSetup(LCDAddr);
Cette fonction initialise le système I2C avec le périphérique spécifié. Le prototype de la fonction :
int wiringPiI2CSetup(int devId);
Le paramètre devId est l’adresse du périphérique I2C, elle peut être trouvée avec la commande i2cdetect (voir annexe) et l’adresse de l’I2C LCD1602 est généralement 0x27.
void write(int x, int y, char data[]){}
Dans cette fonction, data[] est le texte à imprimer sur l’écran LCD, et les paramètres x et y déterminent la position d’impression (ligne y+1, colonne x+1 comme position de départ du texte à imprimer).
Pour les utilisateurs de Python
Étape 3: Changer de répertoire.
cd ~/davinci-kit-for-raspberry-pi/python/
Étape 4: Exécuter.
sudo python3 1.1.7_Lcd1602.py
Après l’exécution du code, vous verrez « Greetings », « From SunFounder » s’afficher sur l’écran LCD.
Note
Si vous obtenez l’erreur
FileNotFoundError: [Errno 2] No such file or directory: '/dev/i2c-1', vous devez consulter Configuration I²C pour activer l’I2C.Si vous obtenez l’erreur
ModuleNotFoundError: No module named 'smbus2', exécutez la commandesudo apt install python3-smbus2.Si l’erreur
OSError: [Errno 121] Remote I/Oapparaît, cela signifie que le module est mal câblé ou endommagé.Si le câblage et le code sont corrects mais que l’écran LCD n’affiche toujours rien, essayez d’ajuster le potentiomètre à l’arrière pour augmenter le contraste.
Code
Note
Vous pouvez Modifier/Réinitialiser/Copier/Exécuter/Arrêter le code ci-dessous. Mais avant cela, vous devez aller dans le répertoire du code source tel que davinci-kit-for-raspberry-pi/python.
import LCD1602
import time
def setup():
LCD1602.init(0x27, 1) # init(adresse du périphérique, lumière de fond)
LCD1602.write(0, 0, 'Greetings!!')
LCD1602.write(1, 1, 'from SunFounder')
time.sleep(2)
def destroy():
LCD1602.clear()
if __name__ == "__main__":
try:
setup()
except KeyboardInterrupt:
destroy()
Explication du Code
import LCD1602
Ce fichier est un fichier open source pour contrôler l’I2C LCD1602. Il permet d’utiliser facilement l’I2C LCD1602.
LCD1602.init(0x27, 1)
Cette fonction initialise le système I2C avec le périphérique désigné. Le premier paramètre est l’adresse du périphérique I2C, détectable par la commande i2cdetect (voir l’annexe pour les détails). L’adresse de l’I2C LCD1602 est généralement 0x27.
LCD1602.write(0, 0, 'Greetings!!')
Dans cette fonction, le texte “Greetings!!” est imprimé sur la ligne 0+1, colonne 0+1 de l’écran LCD. Vous verrez maintenant « Greetings! From SunFounder » affiché sur l’écran LCD.
Image du Résultat