OPZ2-0822-LCD

Comment utiliser un écran LCD en Août 2022 ?

Ce qui était vrai en novembre 2020 ne l'est plus en août 2022. Xunlung a continué à mettre à jour le Linux pour la carte, on a même maintenant deux versions, une Debian et une Ubuntu. Utiliser un ou deux LCD communicant sur le port I2C pour afficher l'heure, cela ne fonctionne plus alors qu'en 2020, cela fonctionnait : on a trouvé pourquoi !

Communiquer avec le LCD via I2C

La version la plus récente du système d'exploitation pour la Orange Pi Zero 2 a été installée. Alors que sur ma machine la communication avec les écrans LCD selon le protocole I2C fonctionnait, désormais rien ne fonctionne. Après une heure de tests, je que quelque chose m'échappe. I2C est un protocole de communication qui permet par exemple à la Orange Pi Zero 2 de communiquer avec un LCD 16x2 ou un 20*4. Je veux le faire fonctionner !

i2cdetect

Il existe un petit utilitaire qui permet de vérifier l'I2C et qui se nomme i2cdetect. Dans cette version de Linux (Debian 5.16) il est présent par défaut. Si on le lance, on obtient l'information suivante :

renaud@orangepizero2:~$ sudo i2cdetect -l

i2c-1 i2c DesignWare HDMI I2C adapter

i2c-0 i2c mv64xxx_i2c adapter I2C adapter

renaud@orangepizero2:~$

On voit que l'on a un i2c-1 pour le HDMI et un autre, i2c-0, je ne sais pas pourquoi. On peut regarder à quelle adresse se trouve le composant pour le HDMI avec la commande suivante :

renaud@orangepizero2:~$ sudo i2cdetect -y 1

0 1 2 3 4 5 6 7 8 9 a b c d e f

00: -- -- -- -- -- -- -- --

10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

30: 30 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

70: -- -- -- -- -- -- -- --

renaud@orangepizero2:~$

Bon, j'ai deux écrans LCD de connectés à la OPZ2 mais je ne les vois pas via le système. Quelque chose cloche. Après plusieurs dizaines de minutes à réfléchir et 8 cafés, les neurones finissent par se connecter et je me souviens de deux points :

  • il y avait un i2c3

  • il y avait une documentation formidable

RTFM !

Le manuel se trouve ici !

A la page 9 on apprend qu'il y a eu des modifications pour le Linux 5.16 que l'on utilise, notamment pour l'I2C !

Ha, ça change tout, il suffit de lire la généreuse documentation pour comprendre !


Et voilà, page 142, mes souvenirs sont confirmés : le port I2C disponible sur la OPZ2 est i2c3 !

Est-ce que c'est comme pour armbian avec le fichier dans le dossier boot à modifier ?

C'est ça.

Voilà l'explication : i2c3 est désormais désactivé par défaut et il faut modifier le fichier orangepiEnv.txt pour l'activer !

verbosity=1

bootlogo=false

console=both

disp_mode=1920x1080p60

overlay_prefix=sun50i-h616

rootdev=UUID=5dd5b836-fb32-4678-908e-d23f7a028780

rootfstype=ext4

usbstoragequirks=0x2537:0x1066:u,0x2537:0x1068:u,0x1058:0x2627:u

overlays=i2c3

On va taper la commande suivante pour éditer le fichier :

sudo nano /boot/orangepiEnv.txt

Et à la fin du fichier on ajoute ce qu'indique la documentation.

Ensuite on gagne un reboot (et un café) :

sudo reboot

renaud@orangepizero2:~$ sudo i2cdetect -l

[sudo] password for renaud:

i2c-3 i2c mv64xxx_i2c adapter I2C adapter

i2c-4 i2c mv64xxx_i2c adapter I2C adapter

i2c-5 i2c DesignWare HDMI I2C adapter

renaud@orangepizero2:~$ sudo i2cdetect -y 3

0 1 2 3 4 5 6 7 8 9 a b c d e f

00: -- -- -- -- -- -- -- --

10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

20: -- -- -- -- -- -- -- 27 -- -- -- -- -- -- -- --

30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- 3e --

40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

70: -- -- -- -- -- -- -- --

renaud@orangepizero2:~$


Holala, la détection renvoie tout autre chose qu'avant le reboot :

sudo i2cdetect -l

Et si je regarde sur i2c3 avec la commande

sudo i2cdetect -y 3

je vois bien mes deux écrans LCD aux adresses 27 et 3e !

Bon, il suffisait de lire la documentation finalement.

Je vais utiliser le code sur le repo github suivant pour animer mes deux LCD !