Afficheur LCD sur Raspberry Pi

UPDATE 4 (Décembre 2015) : Tutorial testé sur OSMC et Raspbian Jessie : normalement tout fonctionne sauf la partie démarrage auto il faut que je la mette à jour.

UPDATE 3 (Février 2014) : Tutorial testé sur Xbian 1.0 RC1, utilisé les lignes de code de UPDATE 2

UPDATE 2 (Décembre 2013) : Tutorial testé sur Xbian 1.0 Beta 2, pour qu’il fonctionne avant « sudo apt-get install python-dev » faites : « sudo apt-get install xbian-package-development »

UPDATE 1 (Septembre 2013) : Ce Tutorial a été testé sous Xbian Beta 1.0 et Beta 1.1, il fonctionne très bien…

Salut à tous, comment allez-vous?

Laissant l’Arduino de côté pour une ou deux semaines en attendant les pièces nécessaires pour le premier projet, qui j’espère donnera envie à plusieurs d’entre vous l’envie de tenter l’aventure, je me suis concentré sur le Raspberry Pi. Je dois vous le redire mais je suis totalement sous le charme… J’utilise Xbian comme distribution, c’est fluide, même après 15 jours d’utilisation sans avoir éteint le Pi c’est toujours aussi stable : le rêve. Mais (car il y en a toujours un), je trouvais le concept de chercher l’IP pour ce connecter en ssh un peu ennuyeux et long, parfois même vraiment barbare à configurer (windows). De plus, je n’avais pas d’horloge dans mon salon. Je me suis donc mis à chercher ce qu’il était possible de faire pour remédier à ces petits tracas…

Il s’avère qu’il est possible de faire tourner un afficheur LCD sur le Raspberry Pi via le port GPIO. Il s’agit plus précisément d’afficheur LCD 16×2, 20×4 etc… En gros vous pouvez connecter n’importe lequel du moment qu’il a 16 pin et fonctionne en 5V. Le LCD que j’utilise ici n’est autre que celui fournit dans le Starter Pack de l’Arduino.

J’ai réalisé cet article grâce au câblage trouvé sur raspberrypi-spy.co.uk : http://www.raspberrypi-spy.co.uk/2012/07/16×2-lcd-module-control-using-python/ et grâce à la librairie de adafruit.cc : http://learn.adafruit.com/drive-a-16×2-lcd-directly-with-a-raspberry-pi/overview

Allez avant toute chose pour vous mettre l’eau à la bouche :

0 – Ce qu’il nous faut :

  • un Raspberry Pi connecté à internet pour récupérer l’heure.
  • un Afficheur LCD 16×2
  • des câbles de préférence avec une cosse sur un côté pour un raccord facile au Pi. (J’ai utilisé de vieux câbles audio d’un vieux pc que j’ai dénudés et coupés à la bonne taille)
  • une Breadboard pour un câblage facile
  • un potentiomètre
  • une résistance 220 ohm

J’ai testé le montage sur Xbian et Raspbian, tout fonctionne sur les deux distributions. Il faut juste adapter le code en fonction de l’utilisateur que vous utilisez. Ici, l’exemple sera pour un utilisateur root sur Xbian

1 – Le câblage :

Pour vous expliquez de manière simple, j’ai utilisé Fritzing qui est un très bon logiciel de schéma électronique… Cela offre aussi la possibilité de partager facilement les projets que vous réalisez… Ah j’oubliais, il est gratuit 😉 http://fritzing.org/

rasplcdcorrige

1.1 – Afficheur LCD à 16 broches :

1: Ground (masse ou borne – )
2: VCC (+5v ou borne + )
3: VO (réglage du contraste)
4: Register Select (RS) si RS = 0 : Commande si RS = 1 : Données (0 : pas de câble branché)
5: Read / Write (R/W) si R/W = 0 : Write si R/W = 1 : Read (0 : pas de câble branché)
6: Activation (je n’ai pas plus d’informations…)
7: Bit 0 (Pas utiles pour les opération 4 bits)
8: Bit 1 (Pas utiles pour les opération 4 bits)
9: Bit 2 (Pas utiles pour les opération 4 bits)
10: Bit 3 (Pas utiles pour les opération 4 bits)
11: Bit 4 (Nos données passent pas là)
12: Bit 5 (Nos données passent pas là)
13: Bit 6 (Nos données passent pas là)
14: Bit 7 (Nos données passent pas là)
15: LED Backlight Anode (borne + du rétroéclairage du LCD j’ai mis une résistance histoire de le protéger)
16: LED Backlight Cathode (borne – du rétroéclairage du LCD)

1.2 – Port Gpio Raspberry Pi :

Raspberry-Pi-GPIO

Une fois que tout est bien connecté, (vérifiez deux ou trois fois 😉 ), car le pin R/W (pin 5 sur le LCD) permet de mettre l’afficheur en mode Read ou Write (Ecriture / Lecture). Comme on veut envoyer des données depuis le Pi vers le LCD il faut le brancher à la masse pour être sûr que le LCD est bien en mode Read. De plus si vous vous trompez et que vous branché ce pin sur la borne + (la partie câblée en rouge sur le schéma) vous pouvez endommager votre Pi…

Alors faites bien attention !!!

2 – Le code :

Ce sont les commandes pour Xbian en étant identifié avec l’utilisateur  root. (J’aime bien avoir le contrôle total) :

ssh -l root 192.168.1.39

On se connecte en ssh au Pi

votre mot de passe root

2.1 – Installations des paquets pour piloter l’afficheur LCD :

Soyez patient, les installations peuvent être longues…

sudo apt-get install python-dev

On installe tout ce qui faut pour développer sur Python

sudo apt-get install python-setuptools

On installe les outils pour développer sur Python

sudo easy_install -U distribute

On configure tout cela facilement grâce à l’automatisation du script

sudo apt-get install python-pip

On installe le canal de communication sur Python

sudo pip install rpi.gpio

On installe le pilote pour le port GPIO

apt-get install git

On installe git si cela n’était pas déja fait…

git clone git://github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code.git

On copie la librairie de Adafruit sur le Pi

sudo reboot

On redémarre pour finaliser l’installation, pensez bien à vous identifiez de nouveau en root après le redémarrage

2.2 – Modification des Pins :

cd Adafruit-Raspberry-Pi-Python-Code

On se rend dans le dossier Adafruit-Raspberry-Pi-Python-Code après le reboot

cd Adafruit_CharLCD

On se rend dans le dossier Adafruit_CharLCD

sudo nano Adafruit_CharLCD.py

On édite Adafruit_CharLCD.py pour changer l’adresse des pins, je vous rappelle que nous n’avons pas câblé l’écran LCD comme les gars de Adrafruit… Il faut juste modifier les numéro des pins dans Adafruit_CharLCD.py. En rouge la version originale, en vert la version que vous devez obtenir.

pinoriginal
Version Adafruit avec les mauvais Pins
pinmodifier
Version Perso avec les bons Pins

Puis on tape sur le clavier : Control + O pour sauvegarder les modifications, Entrée pour confirmer l’enregistrement et Control + X pour sortir de nano.

2.3 – Vérification :

cd Adafruit-Raspberry-Pi-Python-Code

On se rend dans le dossier Adafruit-Raspberry-Pi-Python-Code

cd Adafruit_CharLCD

On se rend dans le dossier Adafruit_CharLCD

sudo ./Adafruit_CharLCD_IPclock_example.py

On lance Adafruit_CharLCD_IPclock_example.py, si tout va bien, vous devriez voir s’afficher la date, l’heure et l’ip du Pi sur le LCD :
timeip
Puis Control + C sur votre clavier pour arrêter le script Adafruit_CharLCD_IPclock_example.py

2.4 – Lancement de Adafruit CharLCD IPclock example.py à chaque démarrage :

Dans l’état actuel des choses, vous devez à chaque fois que vous rebootez le Pi vous identifiez en root et répétez le paragraphe 2.3 – Vérification pour lancer le script Adafruit_CharLCD_IPclock_example.py. C’est un peu désagréable du coup on va maintenant voir comment faire pour que le script se lance tout seul au démarrage.

sudo nano /etc/init.d/lcd

On ouvre et on crée un nouveau fichier lcd dans le dossier /etc/init.d .C’est normal qu’il soit vide vous venez de le créé…

#!/usr/bin/python

from Adafruit_CharLCD import Adafruit_CharLCD
from subprocess import *
from time import sleep, strftime
from datetime import datetime

lcd = Adafruit_CharLCD()

cmd = "ip addr show eth0 | grep inet | awk '{print $2}' | cut -d/ -f1"

lcd.begin(16,1)

def run_cmd(cmd):
p = Popen(cmd, shell=True, stdout=PIPE)
output = p.communicate()[0]
return output

while 1:
lcd.clear()
ipaddr = run_cmd(cmd)
lcd.message(datetime.now().strftime('%b %d %H:%M:%S\n'))
lcd.message('IP %s' % ( ipaddr ) )
sleep(2)

Copiez/collez ce code dans votre fichier lcd. Puis Control + O pour sauvegarder, Entrée pour valider et Control + X sur votre clavier pour sortir du fichier lcd.

sudo chmod +x /etc/init.d/lcd

On rend le fichier lcd éxécutable

sudo update-rc.d lcd defaults

Fait reconnaître le script lcd par le système pour qu’il le charge à chaque démarrage

sudo reboot

Normalement après le redémarrage, votre LCD doit afficher les informations tout seul…

2.5 – Régler la date et l’heure :

sudo dpkg-reconfigure tzdata

Sélectionnez l’endroit où vous vous situé dans le monde et l’heure se règle toute seule si vous êtes connecté à internet sur votre Pi

2.6 – Modification Personelles :

Comme l’afficheur LCD clignote quand il se rafraichit, je trouve agaçant de le voir clignoter toutes les deux secondes. De plus afficher les secondes ne m’intéresse pas plus que ça. J’ai donc modifié le fichier Adafruit_CharLCD_IPclock_example.py pour que l’afficheur LCD ressemble à cela et soit raffraichit une fois par minute :

cd Adafruit-Raspberry-Pi-Python-Code

On se rend dans le dossier Adafruit-Raspberry-Pi-Python-Code

cd Adafruit_CharLCD

On se rend dans le dossier Adafruit_CharLCD

sudo nano ./Adafruit_CharLCD_IPclock_example.py

On édite Adafruit_CharLCD_IPclock_example.py

Mon Raspberry Pi est connecté via un câble éthernet c’est pourquoi il y a :lan_config.

Si votre Raspberry Pi est connécté Via le Wifi il faut changer eth0 par wlan0

Version Originale : originale_adafruit
Version Personnelle : modifier_perso

Puis une dernière fois on fait un petit Control + O, Entrée et Control + X sur son clavier histoire d’enregistrer ces modifications

sudo reboot

Normalement votre afficheur LCD est maintenant configuré comme le mien 🙂
J’espère que cet article vous aura plus. Merci de m’avoir lu et n’oubliez pas que ce soit sur Raspberry Pi ou Arduino, la seule limite c’est votre cerveau…

37 réponses sur “Afficheur LCD sur Raspberry Pi”

  1. Beau boulot bien décanté…
    Juste deux remarques :
    – Tu inverses masse et alim sur la bread, un noveice peut facilement se planter…
    – Et la 220 pojnte sur la masse sur ton schéma, pas sur le +5.
    Sinon, keep up the good job 😉

    +++

    1. Effectivement, j’avais inversé la masse et le +5V sur la breadboard et la résistance 220 ohm pointaint sur une masse…

      Aucun soucis à avoir, vous ne pouviez rien grillé, c’est l’alimentation du rétroéclairage…

      Le schéma a été corrigé merci X-Calibur

  2. De rien A., on est là pour s’entraider 😉
    Je disais ça surtout si jamais la personne câble suivant la couleur ensuite, tout le monde peut se tromper, et pas que sur le B/L 🙁
    Par contre, ton script affiche l’IP sur un réseau cablé… Si la personne est en WiFi, pense à souligner d’y remplacer « eth0 » par « wlanX » (avec X valeur de la co)…
    +++

    1. Ah bah si j’insiste : Merci c’est bien de voir que quelqu’un essaie et donne des retours ou tout simplement fait partager son expérience…

      J’ai rajouté la configuration pour une connection en wlan…

      Encore MERCI X-Calibur

  3. Bah à vrai dire, à part L’Ard., j’ai déjà fait pas mal de trucs avec mon Pi.
    Je suis tombé ici par hasard en cherchant des infos sur le Pi, mais c’est un montage que j’avais déja réalisé…
    Ce qui m’a attiré, c’est que tu utilise Fritzing, comme moi, et que tu as super bien détaillé le truc…
    Et j’aime quand c’est détaillé 😉
    Je cherche justement à ce que mon site soit le plus détaillé possble, alors j’aime quand c’est bien expliqué 😉

    +++

    1. Salut, ça va?
      As-tu d’autres exemples pour le Pi? J’ai un peu de mal à en trouver des biens…
      Fritzing est un programme vraiment très utiles lorsque l’on veut partager des montage électronique c’est un must have…
      As-tu l’url de ton site? Je serai ravi d’y faire un tour…

      ++

  4. ‘Lo,

    Ca va merci, et toi même ?
    Mon url est : http://www.back2roots.fr/forums/
    Pas du tout garni pour le moment, l’idée est de regrouper toutes les docs et astuces des machines passées à nos jours. Donc une rubrique pour le Pi 🙂
    N’hésite pas à t’inscrire… Pis t’es chimiste, et j’aime bien les chimistes 😉
    Mais je manque vraiment de temps et de collaborateurs pour poster les tutos…
    J’ai pas mal d’exemples, mais pas postés encore, va faire un tour sur le blog d’Idleman pour les exemples basiques, beaucoup sont sommaires, mais il va à l’essentiel, et j’aime bien comme il présente 😉

    A tte

    +++

  5. Bonjour,

    Très bien fait le tuto. Merci.

    Quand je lance sudo ./Adafruit_CharLCD_IPclock_example.py, j’obtiens l’erreur suivante :

    Traceback (most recent call last):
    File « ./Adafruit_CharLCD_IPclock_example.py », line 8, in
    lcd = Adafruit_CharLCD()
    File « /home/pi/Adafruit-Raspberry-Pi-Python-Code/Adafruit_CharLCD/Adafruit_CharLCD.py », line 68, in __init__
    self.GPIO.setmode(GPIO.BCM)
    AttributeError: ‘module’ object has no attribute ‘setmode’

    Un spécialiste aurait une idée. Ma distrib est à jour et j’ai suivi le tuto à la lettre.

    Merci pour vos lumières.

    1. Bonsoir, comment allez-vous?
      Désolé pour ma réponse tardive, j’ai été pas mal en mode recherche ce qui m’a prit tout mon temps….
      Je pense que l’erreur vient d’un problème de copier/coller qui n’est pas de votre faute j’ai modifié le script python sur le site, essayer de le remettre et tout devrait fonctionner…

  6. Salut,
    Petit souci pour ma part… L’adresse IP s’affiche mal
    Je pense que je doit passer de ISO à UTF-8 puis de le rengegistrer mais il ne reconnais pas la commande « change_locale » je suis sur une raspbmc

      1. Je vois que vous avez trouvé la commande pour changer le locales sur raspBMC…

        Pouvez confirmer que ce tuto fonctionne sous RaspBmc et si oui qu’elle est votre version?

  7. Salut Super tuto j’attend de recevoir mon rpi et l’ecran pour tester mais la vidéo youtube au debut du tuto ne marche pas :/.
    ++

  8. Salut, je recherchais sur internet à voir comment fonctionner un écran LCD et après beaucoup de recherche je tombe sur ton site!! Super bien détaillé, impeccable !! jolie boulot ça m’a bien aidé :).
    Es-que tu aurai un site ou un petit tuto expliquant comment changer l’affiche/ le faire défiler, comme afficher l’espace d’un disque ou autre en plus de l’heure et l’IP ^^.^

    Et j’ai regarder le reste de ton site il est pas mal du tout je vais surement faire quelques tuto, voir pas mal ^^.

    1. Bonjour Charles, comment allez-vous?

      Content que le site vous plaise . Il faut que je regarde ce qu’il est possible de faire pour le LCD. Mais à mon avis vu que le script est en python, le plus simple est de regardé du côté de la librarie psutils je pense…

      @+ Anders

    1. Bonjour Loris, j’espère que vous allez bien.

      Pour répondre à votre question, c’est un commentaire qui indique que l’on va attacher la variable de définition des pins à un nom plus facile à utiliser.

      @+ Anders

      1. Merci je vais bien mais mon problème est que quand j’ouvre le fichier nano (sudo nano Adafruit_CharLCD.py) je trouve un fichier vide donc je doit tout réécrire mais le problème c’est que quand vous avez entouré en verre votre ligne sur la photo vous avez coupé en deux une phrase en rouge juste en dessous que je n’arrive pas a lire merci de me réponde au plus vite. pour info je suis sur pi 3

        1. Bonsoir Loris.

          Si le fichier Adafruit_CharLCD.py est vide cela signifie que soit vous ne l’avez pas téléchargé, soit vous n’êtes dans bon le bon dossier.

          Avez-vous bien exécuter la commande git clone dans le paragraphe 2.1? Etes-vous bien dans le dossier Adafruit-Raspberry-Pi-Python-Code?

          Cordialement, Anders

  9. finalement mon véritable problème et que quand j’exécute la commande (git clone git://github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code.git) mon raspberry me répond fatal error comment peut-on régler se problème merci d’avance.

    1. Bonsoir Loris, j’espère que vous allez bien.

      Effectivement, le repo github de Adafruit a été bien modifié, il est donc normalement que rien ne ce passe lorsque vous essayez de cloner le repo…

      Pouvez-vous essayer ceci à la place :

      cd ~
      git clone https://github.com/adafruit/Adafruit_Python_CharLCD.git
      cd Adafruit_Python_CharLCD
      sudo python setup.py install

      Vous aurez alors accès au fichier char_lcd.py qui se situe dans le dossier examples. Tout le reste du tuto reste inchangé normalement.

      Si jamais cela ne fonctionnait pas, je vous conseille ce tutoriel d’Adafruit qui va de pair avec le repo github : https://learn.adafruit.com/character-lcd-with-raspberry-pi-or-beaglebone-black/overview

      Bon week-end, Anders

  10. Salut,

    Lorsque je mets « cd Adafruit_CharLCD » je reçois une erreur du style no directory. Qu’est ce que ça pourrait être ?

    1. Bonjour, j’espère que vous allez bien.

      La réponse à votre question, ce trouve dans ma réponse juste au dessus de votre commentaire.

      Adafruit à changer l’adresse du repo github. Du coup il n’est pas possible de le cloner et ensuite de ce rendre dans le dossier.

      @Bientôt, Anders

  11. bonjour

    apres avoir suivi ton tuto , et readapter en fonction des dernier commentaire je tombe sur un fichier Adafruit_CharLCD.py qui est tres different . je suis en plein doute , estceque c est le bon fichier, est ce que je dois le reecrire , est ce qu il existe un autre fichier et celui ci ne serait pas le bon ?

    LCD_4BITMODE = 0x00
    LCD_2LINE = 0x08
    LCD_1LINE = 0x00
    LCD_5x10DOTS = 0x04
    LCD_5x8DOTS = 0x00

    # Offset for up to 4 rows.
    LCD_ROW_OFFSETS = (0x00, 0x40, 0x14, 0x54)

    # Char LCD plate GPIO numbers.
    LCD_PLATE_RS = 15
    LCD_PLATE_RW = 14
    LCD_PLATE_EN = 13
    LCD_PLATE_D4 = 12
    LCD_PLATE_D5 = 11
    LCD_PLATE_D6 = 10
    LCD_PLATE_D7 = 9
    LCD_PLATE_RED = 6
    LCD_PLATE_GREEN = 7
    LCD_PLATE_BLUE = 8

    # Char LCD plate button names.
    SELECT = 0
    RIGHT = 1
    DOWN = 2
    UP = 3
    LEFT = 4

    class Adafruit_CharLCD(object):
    «  » »Class to represent and interact with an HD44780 character LCD display. » » »

    def __init__(self, rs, en, d4, d5, d6, d7, cols, lines, backlight=None,
    invert_polarity=True,
    enable_pwm=False,
    gpio=GPIO.get_platform_gpio(),
    pwm=PWM.get_platform_pwm(),
    initial_backlight=1.0):

    je n ai mis que la partie qui me parait a editer .

    bonne journée

    1. Bonjour Tibo, j’espère que vous allez bien.

      Vous avez effectivement trouvé le bon fichier et la bonne partie du code à modifier. Les lignes à changer étant dans le paragraphe :

      # Char LCD plate GPIO numbers
      LCD_PLATE_RS = 15
      LCD_PLATE_RW = 14
      LCD_PLATE_EN = 13
      LCD_PLATE_D4 = 12
      LCD_PLATE_D5 = 11
      LCD_PLATE_D6 = 10
      LCD_PLATE_D7 = 9

      @+ Anders

  12. Bonjour !

    Merci pour vos tutos !

    Je souhaiterai savoir si il est possible de brancher 2 lcd en i2c ?

    sudo pip install RPLCD

    J’ai vu des posts parler de cela,

    Pourriez vous répondre à l’occaz ?

    A plus

    1. Bonjour agagagougogu, j’espère que vous allez bien.

      Il est possible de brancher deux LCD en I2C sur un Raspberry Py si ceux-ci n’ont pas la même adresse I2C…

      @Bientôt, Anders

        1. Re Bonsoir agagagougogu

          Oui c’est possible de brancher vos deux écrans sur les mêmes ports du Raspberry Pi. Mais si la puce qui gère chaque LCD est définie avec la même adresse I2C, il est normal que vous ne pouvez pas piloter les deux en même temps…

          Cordialement, Anders

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

Traduction :