serveur LCDd sur Raspberry

Voici un projet mené à titre de hobby mais qui pourrait fournir la matière d'un atelier permettant d'acquérir un peu de savoir-faire dans les domaines suivants:

  • fabrication d'un support (ici en bois, mais pourquoi pas en impression 3D?); soudure;
  • configuration d'un système Linux (dont le démarrage automatique d'un service);
  • chaîne de compilation; application client-serveur.

Il y a quelques années j'avais acheté un écran LCD chez Crystalfontz. Il communiquait alors avec un PC par le "port série" (RS232, DB9) et répondait aux commandes envoyées par LCDproc, dont le serveur et le client tournaient sur le même PC. Je vous propose maintenant un montage où la partie serveur du PC est remplacé par un Raspberry Pi Zero W, simplement fixé avec du Velcro sur le support en contreplaqué fabriqué à l'époque pour l'écran LCD. Ce Raspberry est indiqué par la lettre A sur la figure suivante:

    LCD screen (back)

    La carte microSD (à côté du A) contient le système d'exploitation raspbian-stretch-lite configuré de la façon suivante (raspi-config):

    • mot de passe du réseau wifi domestique;
    • activation du serveur ssh (avec IP fixe via le dhcpd.conf);
    • désactivation de la console (afin de dédier les broches GPIO 14 et 15 à la liaison série).

    La communication RS232 (B) se fait par les entrées suivantes de la carte Crystalfontz (C):

    • data in (fil jaune);
    • ground (fil noir);
    • 5V (fil rouge).

    Le projet comporte donc aussi un peu de soudure... et pas seulement pour les fils, car il se trouve que l'UART du Raspberry envoie un signal dont la logique est inversée! Heureusement la carte Crystalfontz est compatible à condition fermer un contact avec un point de soudure (indiqué par une flèche sur la figure précédente). J'ai d'abord commencé par tester mes soudures avec le programme fourni par Crystalfontz, ce qui a donné l'écran attendu:

    LCD screen (front)

    Pour cela il a suffit de compiler le programme directement sur le Raspberry: comme il s'agit d'un système Linux complet, pas besoin de cross-compiler! L'étape suivante a aussi consisté en une compilation, plus sophistiquée cette fois, des programmes LCDproc (v0.5.6): ./config --enable-drivers=CFontz --enable-seamless-hbars; make. J'ai ensuite procédé à une installation "à la main":

    • copier les binaires LCDd et CFontz.so dans /usr/local/bin/ et le fichier de configuration LCDd.conf dans /usr/local/etc/;
    • démarrer automatiquement le serveur grâce la commande update-rc.d (appliquée à un script fourni avec les sources et préalablement copié dans /etc/init.d/).

    Le Raspberry se met ensuite à l'écoute du réseau (local) en attendant d'afficher les informations envoyées par un ou plusieurs clients (j'ai utilisé lcdproc). Le système a été testé avec deux connections simultanées provenant du même PC ou de deux PC différents, ça fonctionne très bien: bravo LCDproc!

    welcome screen
    Écran d'accueil LCDd (pas encore de client connecté)

    goodbye screen
    Écran affiché par la carte Crystalfontz quand on a fait un sudo shutdown now sur le Rasberry