Pour le déroulement de Distro Recipes qui a eu lieu jeudi et vendredi dernier, nous voulions afficher un compteur de temps pour chaque conférencier. Quelque chose que l’on puisse piloter facilement depuis la régie.

Panneaux de LEDs et EFIKA MX

Photo par Erwan Velu

  • Objectif fixé :

Fournir un compteur affichant le temps restant au confériencier.

  • Description du matériel à dispo :

Nous avions deux afficheurs à LEDs qui “trainaient” sur nos bureaux.

L’idée était donc de les réutiliser et de coder notre propre solution logicielle pour gérer l’affichage.
La solution initiale envisagée était de se servir d’un ordinateur portable, mais pour des contraintes techniques et pratiques (impossible d’accéder aux dalles depuis la régie) il a fallu penser à une manière de contrôler tout cela à distance. J’avais pris, en secours, la première box sous la main qui pouvait faire office de point d’accès WiFi : Genesi EfikaMX

  • Schéma de fonctionnement :

Le montage est le suivant :

Schéma de l'installation

Schéma de l’installation

Nous avons utilisé un ordinateur portable pour nous connecter par ssh sur la machine de contrôle (une efika MX en ARM) et exécuter le programme. Cette dernière est connectée aux deux panneaux par deux ports USB. Les panneaux auraient pu être connectes entre eux si nous avait eu le cable adéquat. Ici, ils ont donc été gérés comme deux panneaux independants de 32×16 pixels.

  • Softs utilisés et pourquoi :

Les panneaux sont fournis avec du code source en python mais préférant gstreamer, ce dernier a été utilisé. De plus, cela permettait de regarder comment écrire son propre plugin gstreamer dans un cas simple.

  • Ce qu’il a fallu développer (plugin gstreamer) et pourquoi :

Un plugin gstreamer a été développé :

Ce plugin ne gère qu’un panneau de 32×16 pixels et n’admet que des flux en RGB. Dans un premier temps, nous sommes partis du template de plugins gstreamer. La documentation manquait de clarté sur la manière de créer son “sink” gstreamer. L’élément “cacasink” étant très simple, il a servi d’inspiration pour coder le plugin.

En plus de ce plugin, nous avons développé un petit programme utilisant l’élément videotestsrc en entrée et l’élément textoverlay pour afficher du texte. Ensuite, la video est réduite à 64×16 pixels et découpée en 2 pour obtenir deux flux de 32×16 pixels.
Nous aurions pu utiliser un script shell et gst-launch-1.0 mais cela n’aurait pas permis, par exemple, d’avoir la balle de l’élément videotestsrc (effet visuel qui simule le rebondissement d’une balle sur le panneau) et le texte qui se met à jour.
Voici le pipeline gstreamer généré :

Pipeline gstreamer

Pipeline gstreamer

Lors de la première journée d’utilisation, il s’est avéré que l’affichage “bloquait” régulièrement. Sachant que le code de référence utilisait une temporisation, une temporisation a été ajoutée le lendemain matin et a permis de rendre l’affichage stable (on a eu aussi un crash kernel mais ce n’était pas lié à la gestion des panneaux). En même temps, un message à la fin du compte à rebours a été ajouté car plus explicite que “00:00”. Au départ ce texte était en français ; il a du être changé plus tard pour être dans la langue de Shakespeare.

  • Points d’amélioration :

Il serait intéressant de pouvoir changer les couleurs, qui sont actuellement codées en dur. Tout comme il serait bien de développer un plugin gstreamer afin de gérer le défilement du texte sur les panneaux.

  • Liens utiles :

Le projet gstreamer : http://gstreamer.freedesktop.org/