LCD 2*16 Raspios

C'est quoi le sujet déjà ?

Début 2021 la banque JP Morgan est en difficulté. Sur quel sujet est-elle en difficulté et quel est le rapport avec l'audio ? Et quel rapport avec un LCD de 16 caractères sur 2 lignes ? (Si avec cette accroche vous continuer à lire, alors chapeau !)

Résumé des épisodes précédents

Le problème de JP Morgan, ce que leur coeur d'activité, leur application Athena, est composée de 35 millions de lignes de code. Et que ce code est en python 2.7 et que le python 2.7 n'est plus maintenu depuis au moins une année. Le problème de JP Morgan c'est d'avoir accumulé de la dette technologique.

De mon côté, j'avais écrit un peu de code en python pour afficher sur un LCD des informations en provenance du serveur LMS. Mais en quelques années, tout à changé !

Nouvelles technos

J'ai passé la semaine dernière mes soirées à ré-écrire quelque chose, mais "from scratch", en repartant d'une feuille blanche, avec les points suivants :

  • utililser python 3

  • utiliser requests qui est une méthode moderne pour gérer le http

  • utiliser les APIs du Logitech Media Server : manque de chance, la version précédente s'appuyait sur CLI et était copieusement documentée... Ce n'est pas le cas de la partie API du LMS et cela a été l'occasion de grosses frustrations. Heureusement la touche F12 du navigateur et l'application Postman nous ont bien aidé !

Le code sur le git

Le code est dans les mains du Diable, puisque sur Github, malheureusement racheté par Microsoft il y a quelques années (coup de poignard dans le dos très douloureux), les salauds.

Plateforme

J'ai utilisé une Raspberry Pi 400 pour effectuer le développement, sous Ubuntu. Ensuite, j'ai essayé de l'installer sur une Orange Pi Zero. J'ai perdu littéralement des heures avant de me rendre compte qu'il y trop de difficultés (il faudra tenter avec circuit python). C'est dommage parce que le OPZ n'est pas chère et que la fondation Raspberry vient de pactiser avec le diable.

Tant pis, je vais décrire les opérations avec ce qui marche, j'ai dans mes mains une Raspberry Pi 3B et Raspi OS.

Il y a plein de tutos pour démarrer une Raspberry, donc je ne vais pas recopier ici ce qu'il est facile de trouver sur le web, on va partir du fait que vous avez déjà une machine qui fonctionne.

Je ferais un autre tuto sous Ubuntu dès que j'aurai un peu de temps !

RaspiOS : Tempête dans une tasse de thé ?

Un petit mot sur une tempête dans un verre d'eau ou plutôt dans une tasse de thé avec un nuage de lait.

A lire les pages de ce site, mon intérêt pour les Raspberry Pi et les autres "SBC" (Single Board Computer) est évident.

Si je considère que je fais partie de la communauté des makers (Arduino, Raspberry, ESP32...) depuis un peu plus qu'une décennie et donc que je peux éventuellement parler au nom de cette communauté, alors je peux dire que nous nous sommes bien fait niquer par Microsoft via la fondation Raspberry.

En effet, fin janvier 2021, la communauté a découvert qu'un repository mène tout droit à un serveur Microsoft. Personnellement j'ajouterai que quand on est sous Linux, ce n'est pas pour se faire niquer par Microsoft.

La fondation Raspberry a été obligée de réagir. En gros leur réponse, c'est que pour simplifier la vie, il y a un repo vers Visual Studio Code (qui est franchement le meilleur outil de développement du mode) pour simplifier la vie des utilisateurs.

C'est là que l'excuse ne tient pas, et qu'elle est encore plus terrible. En effet, Visual Studio Code, c'est "Codium", plus la télémétrie de Microsoft. Le télémétrie, c'est un mot gentil pour dire que vous vous faites sucer des informations par Microsoft.

Codium, c'est VS Code, sans la télémétrie : on peut utiliser Codium pour coder, sans se faire niquer par Microsoft, et ça s'installe comme d'habitude avec la ligne sudo apt-get install codium.

Et en plus, tenez-vous bien, le repo il est présent même sur les version "light" qui n'ont pas d'interface graphique : c'est pour simplifier l'installation de quoi au juste ? Visual Studio Code sur la ligne de commande.

Donc en gros, maintenant quand on fait une petite commande sudo apt-get update pour mettre à jour son OS, ça veux dire que Microsoft a votre adresse et compte vos Raspberries, histoire de vous envoyez de la pub ciblée sur votre ordinateur dans la caisse enregistreuse.

Ce qui sauve la communauté de ces f*** de ***** c'est qu'on s'en branle de la Debian moisie de la fondation qui ne veut même pas sortir une version 64 bits du système. Il y a plein d'alternatives sans les morceau de yaourt de Microsoft dedans.

Je ai développé ce projet sur Ubuntu et je voulais le documenter sur la Debian de la fondation pour que les débutants puissent ne pas être trop perdus. Cette page est consacrée à l'installation sous Raspi OS qui est donc une version Debian pour la Pi, avec la télémétrie de Microsoft. Tant que la fondation ne change pas son point de vue, c'est la dernière page que j'écris avec une Raspberry motorisé par Raspo$oft.

Pour le module d'affichage, j'ai pris un écran avec l'interface I2C (le backpack) : c'est très important d'avoir le module I2C, parce que si vous ne l'avez pas, il faut connecter l'écran en // et tirer 8292 fils depuis votre carte vers l'afficheur.

Alors que là, on utilise 5V et GND et deux brins pour la commande, SDA et SCL.

En supposant que vous avez déjà la Rasp, le projet ne coûte donc presque rien, et on va pouvoir faire une horloge électronique avec la précision des serveurs de temps de l'internet (ça veut dire toujours à l'heure) !

En plus de ça, on va savoir quel morceau on écoute, le bitrate et tout le bazar, whaa, j'ai hâte !

Installation du système et divers trucs

Comme d'habitude on télécharge une image de l'OS qu'il faut dézipper et ensuite copier sur une SD card à l'aide du logiciel "Rufus".

Si vous n'êtes pas un vilain hacker, vous pouvez utiliser Etcher mais vous ne verrez jamais le côté obscur de la force.

Une fois que votre carte est prête, sortez la du lecteur et remettez la dans le lecteur : il faut activer le ssh en créant un fichier ssh !

Cela va permettre de prendre la main à distance dessus.

Supposons que nous sommes sous Windows. Ouvrez une boite de commande et ensuite tapez la commande :

ssh pi@192.168.1.166

(utilisez l'adresse de votre RaspPi chez vous, si vous ne connaissez pas son adresse, connectez vous à la console de votre box, vous la trouverez.

Et si vous avez perdu votre mot de passe de la console, vous pouvez aussi utiliser iPeng sur votre téléphone Android, mais vous devriez vous abstenir de suivre ce tuto, il n'est pas pour vous.


Le password pour la première connexion c'est password mais ensuite changez le mdp en tapant la commande pwd

Ensuite, on va sélectionner par défaut le python 3. Je ne sais pas s'il existe une vraie méthode, mais j'ai vu celle-ci de nombreuses fois sur le web. Passez les deux premières commandes et ensuite choisissez la version de python souhaitée :

sudo update-alternatives --install $(which python) python $(which $(readlink $(which python2))) 1

sudo update-alternatives --install $(which python) python $(which $(readlink $(which python3))) 2

sudo update-alternatives --config python

Une des première étape à réaliser est de mettre à jour le système, étape vraiment obligatoire pour ne pas se frotter à des problèmes incompréhensibles :

sudo apt-get update

sudo aat-get upgrade

et maintenant on va activer le port I2C en utilisant l'utilitaire de la Rasp :

sudo raspi-config

On sélectionne Interface Options


Et ensuite on active l'i2c.

Connexion du LCD

La connexion du LCD se fait sur 4 pins. Vous pouvez prendre le 5V et le GND ou vous voulez, par contre vous devez connecter :

  • SDA du LCD sur la broche n°3

  • SCK du LCD sur la broche n°5

Installation des drivers

Sélectionner les 3 option permettant d'activer les 3 i2c.

Une fois que c'est terminé, vous pouvez rebooter avec la commande sudo reboot.

Lorsque vous avez rebooté, passer les deux commandes suivantes :

sudo apt-get install i2c-tools

sudo apt-get install python-smbus

Lorsque ces deux commandes sont passées, il est possible de connaître l'adresse du LCD en tapant la commande suivante :

i2cdetect -y 1

ou (selon votre version de Rasp

i2cdetect -y 0

Et voilà, on a trouvé l'adresse du LCD !

Pour résumer, on a installé le système, configuré l'I2C et testé que l'écran est bien reconnu.

Le reste sera facile à mettre en oeuvre.


Le code !

Pour récupérer le code présent sur le github, tapez la commande suivante :

wget https://github.com/renaudrenaud/LMSLCD2020/archive/main.zip

Décompressez le fichier :

unzip main.zip

La commande ls vous montre qu'un dossier LMSLCD2020-main a été créé.

changez de dossier en tapant cd LMSLCD2020-main/

La commande pwd vous indique dans quel dossier vous vous trouvez.



Ha, j'ai oublié de vous demander d'installer "pip" avec la commande suivante

sudo apt-get install python3-pip

afin d'installer la bibliothèque smbus2, avec la commande suivante :

sudo pip3 install smbus2

The miracle

Sur la ligne de commande, tapez python testLCD -h pour voir l'aide.

Vous pouvez passer deux paramètres : l'adresse du serveur et l'adresse du LCD.

En supposant que mon serveur LMS répond à l'adresse suivante 192.168.1.192:9000 avec un LCd à 03f, alors ma ligne de commande devient

python testLCD.py -s 192.168.1.192:9000 -l 0x3f

Et encore

La version 20*4 a été écrite mais manque un peu de finition. Je vais prendre des photos et faire une vidéo, mais voilà, l'essentiel est là. Si vous avez des questions (et que vous savez où me trouver) vous pouvez les poser, j'essayerai de vous aider !