Tutoriel Raspberry Pi
Utiliser un écran LCD 16x02


03 octobre 2019 • 14 • 4.5

Dans de nombreux projets, afficher des informations sur un écran peut être quelque chose d'indispensable. Heureusement, il est possible, avec le Raspberry Pi, d'afficher tout un tas d'informations sur un "petit" écran. Le plus connu est l'écran LCD dit 16x02. Ce qu'il faut retenir de son nom est qu'on va pouvoir afficher 16 caractères sur chacune des deux lignes.
Nous allons donc voir dans ce tutoriel comment brancher l'écran au Raspberry Pi, puis, en utilisant des librairies, nous pourrons afficher une multitude d'informations envoyées par le Raspberry.

Utiliser un écran LCD 16x02 sur Raspberry Pi - Raspberry Lab

Prérequis

Pour utiliser l'écran 16x02 avec un Raspberry, il faut :

Une fois tous les éléments réunis, on peut passer au branchement.

Connexion au Raspberry

Avant de pouvoir afficher quelque chose sur l'écran, il faut le brancher comme suit aux ports du Raspberry. Un potentiomètre est ajouté pour ajuster le contraste.

Schéma de branchement d'un écran LCD 1602 sur Raspberry Pi 3

Installation de la librairie RPLCD

La librairie écrite en Python que nous allons utiliser pour contrôler notre afficheur LCD s'installe directement avec le Python Package Index. Commençons donc par être sûr que le système de récupération des librairies Python est bien installé en entrant cette commande dans le terminal. (Il est généralement déjà installé de base sur Raspbian)

sudo apt-get install python-pip

Maintenant que tout est OK, installons la libraire. Bonne nouvelle, une simple commande s'occupe de tout.

sudo pip install RPLCD

La librairie est donc enfin prête à être utilisé, et notre écran aussi ! Nous utiliserons dans ce tutoriel une partie des fonctions de la librairie RPLCD (écrite par Danilo Bargen). La documentation complète de sa librairie est disponible ici. (en anglais)

Fonctions principales de la librairie RPLCD

Écrire un texte statique sur l'écran

Pour afficher un texte statique comme votre nom et votre date de naissance par exemple, il va falloir rédiger un très court script Python. Il va donc falloir dans un premier temps importer la librairie, puis appeler une fonction paramétrée. Voici le code pour afficher Raspberry Lab (sur deux lignes et centré) :

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


Information

Message d'erreur ?

Lors de l'exécution de ce 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.
Pas de panique ! Il suffit de suivre ces étapes :

  • Entrez dans le terminal :

    sudo nano /usr/local/lib/python2.7/dist-packages/RPLCD/gpio.py

  • Cherchez la variable numbering_mode dans le fichier (ligne 46, deuxième argument de la fonction def __init__),
  • Remplacez le none affecté à cette variable en GPIO.BOARD (en utilisant les flèches pour se déplacer dans le fichier),
  • Sauvegardez et quittez : Ctrl+X, Y, Enter (ou Ctrl+X, O, Enter si le Raspberry est en français).

Positionner le texte

Plutôt que de simplement afficher du texte sur l'écran en partant de la première case (ligne 0, colonne 0), on peut demander de commencer ou on veut. On utilise pour ceci l'instruction lcd.cursor_pos = (ligne, colonne). Attention, en informatique, on commence toujours à compter par 0 et non par 1. Si on veut écrire sur la première ligne, ligne=0 alors que si on veut écrire sur la deuxième ligne : ligne=1 et c'est la même chose pour les colonnes.
Prenons donc l'exemple où on veut écrire Raspberry sur la deuxième ligne en laissant deux cases vides avant le mot. On aura donc :

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


Remettre l'écran à zéro (effacer les caractères)

Si on souhaite changer un mot à l'écran ou simplement ne plus rien afficher, on va utiliser la fonction lcd.clear(). Celle-ci ne prend pas d'arguments et efface tous les caractères qui sont affichés à l'écran. (L'écran reste tout de même allumé). On va pouvoir par la suite utiliser cette fonction pour faire clignoter du texte à l'écran. Faisons tout d'abord l'essai d'afficher un texte pendant 5 secondes. Il faut par conséquent importer le module time.


Faire clignoter du texte

La fonction vue précédemment nous permet de facilement faire clignoter du texte à l'écran, avec une boucle while.


Passer une ligne

Lorsqu'un texte est trop long, la librairie continue le texte à la ligne suivante. Si l'on souhaite forcer le passage de ligne, il suffit de rajouter \n\r à l'endroit voulu. Voici un exemple :


Quelques applications plus concrètes

On connait maintenant les fonctions de base de l'affichage sur cet écran LCD. On va donc maintenant pouvoir afficher de réelles informations comme la date et l'heure, l'adresse IP, puis dans un autre tutoriel, nous verrons comment afficher la température sur cet écran !

Afficher la date et l'heure

La première chose qu'il peut être intéressant de faire est d'afficher la date actuelle sur notre écran. Pour ceci, on va simplement utiliser la bibliothèque time de Python.


Afficher son adresse IP

Pour afficher l'adresse IP de son Raspberry Pi à l'écran, il va simplement falloir récupérer l'adresse IP à l'aide d'une fonction, et afficher la valeur de sortie sur l'écran.
En fonction de si vous êtes connecté en Wifi ou par câble, il faut mettre l'argument de obtenirIP() respectivement sur wlan0 ou eth0.


Afficher des caractères personnalisés

En plus des caractères de l'alphabet, on peut afficher ce qu'on veut sur chacune des 32 cases (16x2). Chacune de ces case est en réalité une matrice 5x8. Voici le code qui permet d'afficher une case remplie en damier et une autre qui affiche un smiley.

Ce site permet de créer des caractères spéciaux facilement.

A lire

Branchement caméra - présentation

Choisir et utiliser une caméra sur un Raspberry Pi


Branchement caméra - présentation

Obtenir la température avec une sonde DS18B20






Ce tutoriel vous a plu ?

starstarstarstarstar

4.5/5 | 17 votes




Commentaires

13 commentaires publiés.

maxibud, le 10/12/2020 à 19h12
Bonjour

Je rencontre un problème lors de l'exécution du premier script :
La console me renvois le msg suivant :
/usr/local/lib/python3.7/dist-packages/RPLCD/gpio.py:149: RuntimeWarning: This channel is already in use, continuing anyway. Use GPIO.setwarnings(False) to disable warnings.
GPIO.setup(pin, GPIO.OUT)

merci de votre aide SVP.


Jiboux, le 22/06/2020 à 21h48
Bonjour,

Une réponse qui arrive un peu tard, mais qui pourra peut-être servir à d'autres.
si le module est installé via pip, qui pointe vers python 2.7 alors que le programme est exécuté sous python 3.x le module n'est pas reconnu.
Essayez la commande sudo pip3 install RPLCD.
pip3 installe les modules sous python3. Peut être faudra t'il installer préalablement pip3. Sous une Pi0 fraîchement installé, je n'ai pas eu à le faire.
Bien à vous.
Totogoto, le 31/03/2020 à 20h12
Bonjour, je n'arrive pas à poursuivre le projet à cause de ce message d'erreur:
Traceback (most recent call last):
File "/home/pi/Documents/Projet LCD/1.", line 1, in
from RPLCD.gpio import CharLCD
ModuleNotFoundError: No module named 'RPLCD'
Pourtant j'ai bien installé la librairie.Pouvez vous m'aidez? merci
Raspberry Lab, le 31/03/2020 à 23h05
Bonsoir @Totogoto,
Je viens de refaire le début du tuto sur mon Raspberry Pi avec une installation fraîche de Raspbian, et je ne rencontre pas le problème que vous décrivez :/
Lors de l'installation de la librairie, êtes-vous bien arrivé à Successfully installed RPLCD-1.2.2 ?
Sinon, peut-être que le problème peut venir du chemin où est stocké votre .py, même s'il n'y a pas vraiment de raisons.
Pouvez-vous tester ces commandes pour voir si le problème persiste ?

cd ~
sudo pip install RPLCD
sudo nano test.py
Coller et enregistrer le fichier (Ctrl+X -> Y (ou O) pour enregistrer)
sudo python test.py



Dans l'attente de votre réponse,
Raspberry Lab.
Totogoto, le 01/04/2020 à 09h50
Bonjour, merci beaucoup de votre réactivité, voila ce qu'il me met:
pi@raspberrypi:~ $ sudo pip install RPLCD
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Requirement already satisfied: RPLCD in /usr/local/lib/python2.7/dist-packages (1.2.2)
pi@raspberrypi:~ $
Pouvez vous encore m'aider? Merci beaucoup

Raspberry Lab, le 01/04/2020 à 17h25
Bonjour @Totogoto,
D'accord la librairie est donc correctement installée.
En mettant le code dans ~/test.py comme je vous l'ai précédemment indiqué, rencontrez-vous encore l'erreur No module named 'RPLCD' ?
Car normalement ça devrait fonctionner...
Raspto, le 16/12/2019 à 15h44
Bonjour,

J'ai exactement la même erreur :
Traceback (most recent call last):
File "/home/pi/Bureau/LED.py", line 1, in
from RPLCD import CharLCD
File "/usr/lib/python3/dist-packages/thonny/backend.py", line 305, in _custom_import
module = self._original_import(*args, **kw)
ImportError: No module named 'RPLCD'

J'ai pourtant utilisé la derniere mise à jours du script, j'ai réalisé les deux commandes pour installer la librairie RPLCD :
sudo apt-get install python-pip et sudo pip install RPLCD, l'installation s'est faite correctement,

J'utilise un raspberry pi 3B+ je ne sais pas si cela a un impact....je suis debutant sur Raspberry Pi

Merci d'avance pour votre aide
vg765986, le 28/11/2018 à 15h57
bonjours, j'ai un problème avec la bibliothèque RPLCD.
Le "SHELL" de python m indique ceci :

Traceback (most recent call last)

File "/home/pi/documents/temperature.py", line2,
from RPLCD import CharLCD
importError : no module named 'RPLCD'

J'ai pourtant bien installer (sudo pip install RPLCD) !!!
on me dit que je l'ai installer sur le chemin d'accès suivant :
requierement already satisfied : RPLCD in /usr/local/lib/python2.7/dist-packages

est ce que vous savez pourquoi j 'ai toujours ce problème au niveau de ce RPLCD !!

RQ : J'ai pris le même script et toute les informations que donne espace-raspberry francais mais cela ne fonctionne pas.

MERCI
Raspberry Lab, le 03/10/2019 à 15h46
Bonjour @vg765986,
Ce problème est apparu à cause d'une mise à jour de la librairie utilisée. Désolé pour le dérangement occasionné. Je viens de mettre à jour les codes des différentes fonctions, tout devrait refonctionner normalement.

Cordialement,
RaspberryLab.
Kay, le 23/04/2018 à 16h02
Bonjour,

Lorsque je fais l'étape lV. 1 : j'ai cette erreur
Traceback (most recent call last):
File "script.py", line 4, in
lcd = CharLCD(cols=16, rows=2, pin_rs=37, pin_e=35, pins_data=[33, 31, 29, 23])
TypeError: this constructor takes no arguments

Alors que le contenu de mon script est copié-collé du votre.
Aled
seb, le 26/04/2018 à 20h17
bonjour,
j'ai eu le même problème et après avoir modifié /usr/local/lib/python2.7/dist-packages/RPLCD/gpio.py en mettant mes pin directement j'ai eu d'autres problèmes...
j'ai donc fini par utiliser ce script :
https://www.raspberrypi-spy.co.uk/2012/08/20x4-lcd-module-control-using-python/
Coleim, le 22/06/2018 à 16h03
Vous devez utiliser un autre import:
from RPLCD.gpio import CharLCD
(au lieu de from RPLCD import CharLCD)

-- cf: https://media.readthedocs.org/pdf/rplcd/latest/rplcd.pdf
Coleim, le 22/06/2018 à 16h36
Plutôt que de modifier le fichier "/usr/local/lib/python2.7/dist-packages/RPLCD/gpio.py", il vaut mieux passer en constructeur le numbering_mode:

lcd = CharLCD(numbering_mode=GPIO.BOARD, cols=16, rows=2, pin_rs=37, pin_e=35, pins_data=[33,31,29,23])



Commenter
Votre adresse mail ne sera pas visible sur le site.

Les commentaires sous soumis à vérification avant publication.