Compiler serdisplib pour contrôler un afficheur LCD sous Linux

Compiler serdisplib pour contrôler un afficheur LCD sous Linux

Contrôler un écran LCD sous Linux ça peut être sympa. Si vous avez des infos utiles à afficher voici une lib qui vous facilitera grandement la vie.

Pour la petite histoire (facultatif)

Ayant monté mon NAS dans un boîtier SilverStone ML-03, je n’avais pas encore trouvé d’idée pour utiliser l’emplacement réservé au lecteur CD/DVD/Bluray de ce boîtier joliment conçu pour un usage type HTPC (Home Theater Personal Computer).

Lors d’une discussion un peu geek avec mes collègues, je partageai mon projet de monter un écran LCD sur mon NAS pour afficher la date et l’heure de manière sympa, et lorsque je joue les couch potatoes, afficher le timecode et autres tags du film que je regarde depuis mon installation de Kodi (anciennement XBMC). C’est alors qu’un collègue me donna un coup de pouce en me cédant généreusement un écran LCD ALPHACOOL 200×64 au format 5″¼.

L’écran est sympa, d’une belle couleur bleue, affiche des pixels blanc, mais ne propose aucun SDK pour pouvoir interagir avec, ce qui le rend inutile pour beaucoup de gens… Seul un driver propriétaire disponible uniquement pour Windows vient avec une liste limitée de widgets et un éditeur difficilement configurable.

En recherchant sur le net une solution pour afficher ce que je voulais, je suis tombé sur le site de la bibliothèque serdisplib.

Descriptif de la bibliothèque

La bibliothèque serdisplib est un pilote d’affichage qui fournit une API haut niveau pour programmer un large éventail de contrôleurs LCD. Disponible sous Linux, elle est fournie sous la forme d’un tarball, ce qui veut dire que l’on doit la compiler de nos petites mains.

La bibliothèque gère aussi bien les écrans sur ports Parallel, Serial et USB. Les écrans USB sont gérés depuis la version 1.97, c’est celle-ci que nous allons utiliser aujourd’hui. Les écrans OLED sont supportés depuis la version 1.97.6.

A la rédaction de cet article, la version la plus récente est la version 1.97.9.

Avant la compilation

Il vous faut récupérer le tarball de la lib serdisplib : ici.

Décompresser l’archive à l’emplacement de votre choix puis se rendre dans le dossier :

tar xvzf serdisplib-1.97.9.tar.gz

cd serdisp-1.97.9

Afin de compiler la lib serdisplib, il vous faudra disposer des packages suivants :

  • libusb-dev : pour la prise en charge des périphériques USB. Nécessaire si vous avez un afficheur USB
  • libgd2-dev (facultatif) : pour la manipulation des images, nécessaire pour compiler l’outil permettant d’afficher des images et du texte sur l’afficheur

Pour des raisons pratiques je vous conseille l’installation de libgd2, ceci vous permettra de tester plus en détail le driver qu’avec l’outil de test fourni de base dans serdisplib.

Pour se faire, entrer les commandes suivantes :

apt-get install libusb-dev

Pour l’installation de libgd2, soit vous désirez avoir le support de X Pixmax (XPM) :

apt-get install libgd2-xpm-dev

Soit vous souhaitez vous en passer :

apt-get install libgd2-noxpm-dev

Encore une fois, l’installation de libgd2 est facultative mais conseillée.

Compilation de la bibliothèque

Avant la compilation il faut lancer le script de configuration avec une option particulière pour la prise en compte des headers C de libusb.

./configure --enable-libusb

A la fin de l’opération vous avez un résumé des lib supportées. Si tout s’est bien passé, alors vous devriez obtenir :

serdisplib version: 1.97.9

supported extra libraries

=========================

 * libusb support            ... yes

 * libSDL support            ... disabled

 * libgd >= 2 support        ... yes

enabled(+) / disabled(-) drivers

================================

 + sed153x, pcd8544, sed156x, i2c, t6963, sed133x, nokcol, ks0108, lh155, ssdoled, l4m, goldelox, stv8105, acoolsdcm, lc7981

 - directgfx

tools

=====

 * multidisplay              ... yes

   - with GIF support        ... yes

--- Now type "make" to build serdisplib

--- (on linux systems, 'make' and 'gmake' usually are the same)

---

--- For testing serdisplib use "src/testserdisp"

Si ce n’est pas le cas, vérifiez que vous avez bien installé les package de développement (suffixe « -dev ») ou bien que votre distribution est à jour au niveau de ces paquets.

Compilez et installez avec la commande suivante.

make && make install

Tester la lib avec votre afficheur

Pour tester la lib, connectez votre afficheur à votre machine Linux.

Pour un écran USB, vérifiez que l’afficheur est bien reconnu comme périphérique USB.

lsusb

Dans mon cas, le résultat de la commande est le suivant.

pi@raspberrypi:/home/pi# lsusb

Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp.

Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp.

Bus 001 Device 004: ID 060c:04eb EEH Datalink GmbH

Mon afficheur est reconnu comme étant le périphérique USB 004 connecté au bus 001 .

Notez l’ID du périphérique sur le bus, c’est lui qui servira à se connecter à l’afficheur.

Pour effectuer un simple test, vous pouvez utiliser l’outil basique fourni avec la lib : testserdisp.

Vous pouvez trouver les informations requises dans le tableau des afficheurs supportés par la lib.

Pour ma part, j’ai dû taper :

testserdisp -n ALPHACOOL -p "USB:060c/04eb"

-n : nom de l'afficheur (colonne display du tableau)

-p : ID du périphérique

Vous aurez un joli écran qui ressemble à ceci :

Testserdisp

Outil multidisplay

Avec cet outil, vous pourrez afficher des choses sympa comme du texte, une image ou encore une image et du texte simultanément.

Pour cela, le principe reste le même : utiliser les options « n » et « p » comme pour testserdisp 😛

Voici les options de l’outil :

    -n name          display name

    -p dev|port      output device or port

    -o options       options for driver, semicolon-separated key-value pairs

                     eg: -o "WIRING=1;CONTRAST=2;BACKLIGHT=ON"

    -D 0|1      [1]  dither (0: no, 1: auto (floyd steinberg))

    -S 0-3      [1]  scaling algorithm:

                     0: don't scale and don't correct aspect ratio

                     1: fit to display if larger but not if smaller (maintaining aspect ratio)

                     2: fit to display if larger or smaller (maintaining aspect ratio)

                     3: fill display (ignoring aspect ratio)

    -L 0|1|>1   [1]  loop count for animated images:

                     0: loops forever

                     1: loop once (default)

                    >1: loop given times

    -i               invert display

    -d delay    [0]  time to delay before program quits

    -r rotate   [0]  rotate display, valid values: 0, 90, 180, 270

    -B 0|1      [1]  backlight (0: no, 1: yes)

    -M message       message

    -m file          display content of file

    -c command       execute command and display its output (also set -y !!)

    -y               -c is only executed when -y is also set (security)

    -f imagefile     display an image

    -F font          text font ("tiny", "small", "mediumbold", "large", "giant")

                     or truetype font + optional size (eg: "/some/location/somefont.ttf:16")

    -Q               quit AND clear display after everything is displayed

    -s ms    [1000]  sleep ms milli seconds between two updates

    -v               verbose (-v repeated: <= 2: log to syslog, >= 3: log to stderr, >= 5: log to stdout)

    -V               version information

Dans un autre article, je vous montrerai comment appeler cette lib depuis vos scripts Python. Pour l’utilisation et la compilation en C, je vous laisse faire une petite visite sur la page de l’API. Vous verrez, c’est très simple 😀

  • blié le octobre 26, 2015 - 4:56
  • r lourderadj
  • blié dans

No comments yet

isser un commentaire



Tweets
    Optimization WordPress Plugins & Solutions by W3 EDGE