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





Personnaliser

Google Analytics

Google Analytics est un service utilisé sur notre site Web qui permet de suivre, de signaler le trafic et de mesurer la manière dont les utilisateurs interagissent avec le contenu de notre site Web afin de l’améliorer et de fournir de meilleurs services.

Facebook

Notre site Web vous permet d’aimer ou de partager son contenu sur le réseau social Facebook. En l'utilisant, vous acceptez les règles de confidentialité de Facebook: https://www.facebook.com/policy/cookies/

Twitter

Les tweets intégrés et les services de partage de Twitter sont utilisés sur notre site Web. En activant et utilisant ceux-ci, vous acceptez la politique de confidentialité de Twitter: https://help.twitter.com/fr/rules-and-policies/twitter-cookies