Raspberry - Afficheur LCD 1602
Les afficheurs LCD existent sous toutes tailles, de couleurs différentes et pouvant afficher plusieurs lignes et plusieurs caractères par lignes.
Les afficheurs LCD utilisent deux types de controleurs:
- le controleur HD44780
- le controleur ST7032
Le HD44780 utilise un bus de data de 8 bits, qu'il faut relier au GPIO.
soit en mode 8 bits, et il utilisera 11 pins du GPIO
sans oublier les 3 pins pour le controle , l'alimentation et la luminosité
Le ST7032 utilise l'interface I2C (qui est présente sur le Raspberry - SDA - GPIO2 - pin 3 et SCL - GPIO3 - pin 5), il n'a besoins que de :
2 pins pour l'alimentation
Le LCD 1602 utilise le contrôleur HD44780 et 1602 signifie que l'afficheur va pouvoir afficher 16 caractères sur chacune des 2 lignes.
Le Brochage du lcd 1602 - HD44780
Broches | Noms | Roles |
---|---|---|
1 | Vss | Gnd - Masse |
2 | Vdd | +5 volts |
3 | V0 | Réglage du contraste |
4 | RS | Sélection du registre (commande ou donnée) |
5 | R/W | Lecture ou Ecriture (du registre) |
6 | E | Entrée de validation |
7 | DB0 | Bit de données 0 (data) |
8 | DB1 | Bit de données 1 (data) |
9 | DB2 | Bit de données 2 (data) |
10 | DB3 | Bit de données 3 (data) |
11 | DB4 | Bit de données 4 (data) |
12 | DB5 | Bit de données 5 (data) |
13 | DB6 | Bit de données 6 (data) |
14 | DB7 | Bit de données 7 (data) |
15 | A | Anode du rétro-éclairage (+5v) |
16 | K | Cathode du rétro-éclairage (Gnd - Masse) |
Le schema
- Mode 8bit – data - DB0 jusqu’à DB7
- Mode 4 bit – data - DB4 jusqu’à DB7
Nous utiliserons le mode 4 bits
LCD1602 - Raspberry (Mode Board)
- Broche 1 (Vss) sur Pin 6 (Masse)
- Broche 2 (Vdd) sur Pin 2 (+5v)
- Broche 3 (V0) sur curseur du potentiomètre 10 KOhms
- Broche 4 (RS) sur Pin 37
- Broche 5 (R/W) sur le Gnd - Masse
- Broche 6 (E) sur Pin 35
- Broche 11 (DB4 - Data) sur Pin 33
- Broche 12 (DB5 - Data) sur Pin 31
- Broche 13 (DB6 - Data) sur Pin 29
- Broche 14 (DB7 - Data) sur Pin 23
- Broche 15 (A - Anode rétro-éclairage) sur résistance de 220 Ohms puis +5v
- Broche 16 (K - Cathode rétro-éclairage) sur le Gnd - Masse
Installation de la librairie RPLCD
Pour utiliser le LCD 1602, nous utiliserons la bibliothèque RPLCD
Ouvrir un terminal [crtl]+[alt]+[t] et saisir les commandes ci-dessous:
- sudo apt-get install python-pip # Si cela n’a pas déjà était fait
- sudo pip install RPLCD
Utilisation de la librairie RPLCD
Les paramètres donnés à la fonction CharLCD() renseignent la librairie sur le type d'écran utilisé (16x02), et les numéros de pins sur lesquels l'écran est relié
lcd = CharLCD(cols=16, rows=2, pin_rs=37, pin_e=35, pins_data=[33, 31, 29, 23])
Le code
# coding:utf-8
# Utilisation d'un afficheur LCD 1602 sur Raspberry 3 B+
#
# Importation fonction CharLCD de la bibliotheque RPLCD
from RPLCD.gpio import CharLCD
import time
lcd = CharLCD(cols=16, rows=2, pin_rs=37, pin_e=35, pins_data=[33, 31, 29, 23])
while True:
lcd.cursor_pos = (0, 2) # 0 = 1ère ligne / 2 = 3ème colonne
lcd.write_string(u'Le Blog de')
lcd.cursor_pos = (1, 4) # 1 = 2ème ligne / 4 = 5ème colonne
lcd.write_string(u'Claude')
time.sleep(2)
lcd.clear() # Effacement LCD
time.sleep(2)
Si Message d'erreur ...
Lors de l’exécution du script, il est possible d'obtenir le message d'erreur:
ValueError: Invalid GPIO numbering mode: numbering_mode=None, must be either GPIO.BOARD or GPIO.BCM
Il suffit simplement d'éditer le fichier gpio.py
cd /usr/local/lib/python2.7/dist-packages/RPLCD/
sudo nano gpio.py
Chercher la variable numbering_mode dans le fichier
Remplacer numbering_mode=none par numbering_mode=GPIO.BOARD
Sauvegarder et quitter
Afficher la date et l'heure sur le lcd
Nous allons afficher la date et l'heure sur le LCD
Le code
# coding:utf-8
# Utilisation d'un afficheur LCD 1602 sur Raspberry 3 B+
# Affichage de la date et l'heure
from RPLCD.gpio import CharLCD
import time
lcd = CharLCD(cols=16, rows=2, pin_rs=37, pin_e=35, pins_data=[33, 31, 29, 23])
while True:
lcd.cursor_pos = (0, 0)
lcd.write_string("Date: %s" %time.strftime("%d/%m/%Y"))
lcd.cursor_pos = (1, 0)
lcd.write_string("Heure: %s" %time.strftime("%H:%M:%S"))
afficher l'adresse IP Ethernet/Wifi sur le Lcd
Si vous êtes connecté en Wifi ou par câble Ethernet, il faut mettre l'argument de obtenirIP() respectivement sur wlan0 ou eth0.
Le code
# coding:utf-8
# Utilisation d'un afficheur LCD 1602 sur Raspberry 3 B+
# Affichage Adresse IP Wifi ou Ethernet
from RPLCD.gpio import CharLCD
import socket
import fcntl
import struct
lcd = CharLCD(cols=16, rows=2, pin_rs=37, pin_e=35, pins_data=[33, 31, 29, 23])
def obtenirIP(wlan0): # si Wifi = wlan0 / si Ethernet = eth0
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
return socket.inet_ntoa(fcntl.ioctl(
s.fileno(),
0x8915,
struct.pack('256s', wlan0[:15]) # si Wifi = wlan0 / si Ethernet = eth0
)[20:24])
lcd.write_string(u"Adresse IP :")
lcd.cursor_pos = (1, 0)
lcd.write_string(obtenirIP('wlan0')) # Si connexion Ethernet : obtenirIP('eth0')