Raspberry - Afficheur LCD 1602

  • lcd1602
  • lcd-i2c


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 4 bits, et il utilisera 7 pins du 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 (SCL - GPIO3 - pin 5 / la clock et SDA - GPIO2 - pin 3 / les datas) 
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

Brochage du LCD 1602
Brochage du LCD 1602
BrochesNomsRoles
1
VssGnd - Masse
2
Vdd+5 volts
3
V0Réglage du contraste
4
RSSélection du registre (commande ou donnée)
5
R/WLecture ou Ecriture (du registre)
6
EEntrée de validation
7
DB0Bit de données 0 (data)
8
DB1Bit de données 1 (data)
9
DB2Bit de données 2 (data)
10
DB3Bit de données 3 (data)
11
DB4Bit de données 4 (data)
12
DB5Bit de données 5 (data)
13
DB6Bit de données 6 (data)
14
DB7Bit de données 7 (data)
15AAnode du rétro-éclairage (+5v)
16KCathode du rétro-éclairage (Gnd - Masse)

Le schema

lcd-schema

Nous utiliserons un potentiomètre de 10 KOhms pour le réglage du contraste et une résistance de 220 Ohms sur l'anode du LCD pour le rétro-éclairage

Mode d’utilisation :
  • Mode 8bit – data - DB0 jusqu’à DB7
  • Mode 4 bit – data - DB4 jusqu’à DB7

Nous utiliserons le mode 4 bits


Câblage avec le Raspberry en Mode 4 bit

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

 Avant de mettre sous tension, vérifier votre cablage, une erreur pourrait etre fatale pour le Raspberry et/ou le LCD 
 


 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

  • lcd-texte
  • lcd-code-texte


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é

# Importation de la fonction CharLCD de la librairie RPLCD
from RPLCD.gpio import CharLCD

# Définition du nombre de colonnes (cols) et lignes (rows) du LCD
# Définition des pins utilisées sur le GPIO
lcd = CharLCD(cols=16, rows=2, pin_rs=37, pin_e=35, pins_data=[33, 31, 29, 23])

# Texte à afficher
lcd.write_string(u' le texte à afficher ')


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

numbering



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

  • lcd-date-heure
  • lcd-code-date-heure

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

  • lcd-ip
  • lcd-code-ip


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')