OPi5 LCD 2*16
General Purpose Input Output (GPIO)
Comme toute bonne SBC (Single Board Computer) qui se respecte, la Orange Pi 5 (OPi5) arrive avec son lot de GPIO, les papattes que l'on voit sur le bord de la carte. C'est la différence avec un ordinateur classique: avec un SBC on a accède au monde physique via des capteurs et des actuateurs.
Les GPIOs permettent de communiquer avec des objets soit en analogique, soit en digital. Par exemple, un capteur de température va renvoyer une valeur analogique comprise entre 0 et 5V et avec une règle de trois on calcule la température renvoyée par le capteur.
Pour la partie numérique, c'est un peu différent : en général les papattes d'une SBC ou d'un micro contrôleur (tel qu'un Raspberry Pico) implémentent différents protocoles, par exemple I2C ou SPI.
Avec la Orange Pi 5, une carte qui vient juste de toucher le marché décembre 2022, début janvier 2023, il est intéressant de savoir si "ça marche". EN général les cartes qui sortent ont un Linux incomplet : il manque un driver ou il faut aller chercher profond dans une documentation de 300 pages pour savoir comment faire. Lançons nous avec la OPi5 et voyons si nous rencontrons des difficultés : au pire, même si cela ne fonctionne pas, nous aurons appris quelque chose.
Ecran LCD I2C
Pour tester les GPIOs de la Orange Pi 5, nous allons utiliser un écran 16 caractéres sur 2 lignes, un "1602", avec le "backpack", le petit circuit complémentaire qui implémente le protocole I2C pour l'écran. Ce type d'écran :
est très peu cher, entre 2 et 4 €uros
existe avec et sans le backpack : sans le backpack c'est un enfer de câbles et c'est donc à éviter
est disponible en plusieurs couleurs
existe en 16 caractères sur deux lignes, ou 20*4, et même 40*2. Au delà ce ne sont plus les mêmes bibliothèques de mise en oeuvre et les tracas arrivent
chez audiofolies on l'utilise pour afficher des informations du Logitech Media Server et en tant qu'horloge quand la musique n'est pas lue, ou d'écran de "monitoring" de la machine (CPU, RAM et disques).
Le protocole I2S est un vieux truc du début des années 80 proposé par Phillips à l'industrie. Il permet d'avoir un bus sur lequel 256 périphériques sont adressables. C'est un protocole lent mais peu onéreux à mettre en oeuvre. Il repose sur deux signaux : un data et un d'horloge, souvent notés SDA et SCL (Signal DAta et Signal CLock).
Sur github se trouve un projet de votre serviteur (il existe une version docker) permettant d'afficher sur le LCD des informations du LMS : le morceau en cours de lecture, le volume, la fréquence et le nombre de bits du morceau etc...
Dans les lignes suivantes, nous allons tenter de faire fonctionner tout ça : la Orange Pi 5 avec un LCD 16*2 pour afficher les informations du LMS.
Activer et tester I2C
C'est la documentation de la carte qui nous informe, page 150, de comment activer l'i2c :
il faut modifier le fichier /boot/orangepiEnv.txt pour ajouter une ligne overlays.
Pour ce faire, on va utiliser l'éditeur nano :
sudo nano /boot/orangepiEnv.txt
Ensiute, dans l'éditeur on ajoute la ligne suivante :
overlays=spi4-m0-cs1-spidev i2c1-m2 i2c3-m0 i2c5-m3
Ctrl S + Ctrl X pour enregistrer et quitter, et ensuite il faut rebooter pour que la déclaration soit prise en compte.
La commande suivante :
ls /dev/i2c-*
permet de voir si les l'I2C est reconnu. Dans notre copie d'écran tel est le cas.
Du coup, on va pouvoir passer aux choses sérieuses.
On installe les outils i2c avec la commande suivante :
sudo apt install i2c-tools
Ensuite il faut câbler l'écran... On a deux schémas dans la documentation.
On va utiliser :
la broche GPIO 12 - i2C1_SDA_M2 - pour SDA
la broche GPIO 15 - i2C1_SCL_M2 - pour SCL
Et on branche l'alimentation de l'écran sur 5V et le GND, GPIO 4 et 6.
Et maintenant on va lancer la commande qui permet de nous montrer les périphériques sur le port i2c n°1 :
sudo i2cdetect -y 1
Et voilà, on a un périphérique connecté sur l'adresse H27.
Bon, ça fonctionne.
Résumé des opérations
On active l'I2C dans le fichier orangepiEnv.txt : overlays=spi4-m0-cs1-spidev i2c1-m2 i2c3-m0 i2c5-m3
On installe les outils i2c avec la commande : sudo apt install i2c-tools
on teste : sudo i2cdetect -y 1
on va boire un café parce que ça fonctionne et que cela n'a pris que 5 minutes !
Utiliser l'écran... Avec Docker !
Nous avons en stock un container qui affiche les information du Logitech Media Server sur l'écran LCD. Puisque tout est fluide sur cette carte, on va installer
Docker avec fluidité,
portainer dans la foulée
et enfin le container pour afficher les informations du LMS
Oui, tout cela est un peu overkill pour quelques lignes de code pour gérer un LCD, mais on teste, on teste, on teste...
Allons-y :
Installer docker : sudo apt install docker.io
ajouter l'utilisateur courant au groupe : sudo usermod -aG docker $USER
tester l'installation : docker -v
Puisque Docker fonctionne, on va ajouter portainer pour pouvoir gérer tout ça avec une interface web :
sudo docker pull portainer/portainer-ce:latest
sudo docker run -d -p 9051:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest
Ensuite avec le navigateur on se rend sur l'adresse ip de la Orange Pi 5, sur le port 9051, par exemple chez moi c'est : 192.168.1.161:9051
Portainer nous demande de créer un compte utilisateur et un mot de passe d'au moins 12 caractères.
Passons quelques détails pour aller directement dans la création d'un container.
On veut récupérer le container qui se trouve à l'adresse suivante :
https://hub.docker.com/repository/docker/renaudrenaud/lcdtainer/general
En particulier la version arm64 :
renaudrenaud/lcdtainer:arm64
(cf la copie d'écran ci-contre)
Retour dans portainer, avec ci-contre, la partie Création de Container :
On donne un nom au container
on indique quel container on veut utiliser et son tag :
renaudrenaud/lcdtainer:arm64
On clique sur le bouton Deploy the Container
Il y a quelques réglages à faire que l'on fera plus tard... Le container est téléchargé et cela prend quelques dizaines de secondes ou plus selon le débit de l'accès internet.
Voilà, l'image a été téléchargée et le container créé, mais il ne fonctionne pas encore.
C'est normal, il faut le configurer, avec les points suivants
les variables d'envirronement
le mode privilégié pour avoir le droit d'accéder au "device", l'écran LCD
le mapping du device depuis la machine vers le container.
Pour configurer le container,
cliquez sur son nom (ici LMS_LCD).
puis cliquez sur Duplicate / Edit en haut à droite
Dans la partie Env, cliquez sur Advanced Mode et ensuite ajouter les variables suivantes (en bleu ci-contre) :
TZ=France/Paris
LMS_SERVER=192.168.1.120:9000
DISPLAY_MODE=cpu
PLAYER_NAME=
Dans la partie Runtime & Resouces:
activez le mode Privileged mode
ajouter un device /dev/i2c-1 - /dev/i2c-1
Notez que le device dépend de la carte utilisée et de comment vous l'avez configuré. Sur certaines cartes on est sur /dev/i2c-0, d'autres /dev/i2c-2 etc...
Eventuellement, si quelque chose est écrit dans la partie Entrypoint, supprimez-le pour avoir une configuration identique à l'image ci-contre.
Ensuite cliquez sur le bouton "Deploy Container" et profitez.
Quelques informations complémentaires sur les paramètres :
TZ c'est pour la Time Zone
LMS_SERVER sert à indiquer l'adresse du serveur et il est impératif d'indiquer le port (le réseau doit être configuré en mode bridge)
DISPLAY_MODE :
volume : affiche le volume
cpu : affiche des informations sur le CPU, la RAM et les disques quand aucun morceau n'est lu
clock : affiche la date et l'heure quand aucun morceau n'est lu
PLAYER_NAME pour verrouiller l'afficheur sur un player : s'il rien n'est spécifié alors le LCD affiche les informations du premier lecteur en train de lire
En conclusion
On a vu :
comment activer le I2C sur la Orange Pi 5, cela fonctionne et c'est facile
comment installer docker et portainer : c'est fluide, il n'y a pas de dépendances qui manquent, tout va bien
comment installer le container pour afficher les informations du serveur audio Logitech Media Server (LMS)