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 :

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 :

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

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 

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 :

Puisque Docker fonctionne, on va ajouter portainer pour pouvoir gérer tout ça avec une interface web :

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 :

renaudrenaud/lcdtainer:arm64

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

Pour configurer le container, 

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:

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 : 

En conclusion

On a vu :