Idée mini écran pour Raspi Headless

Vous avez réalisé ou vous voulez réaliser un truc impensable avec votre Raspberry Pi ? Cet endroit est pour vous...

Modérateur : Francois

Répondre
piper
Raspinaute
Messages : 658
Enregistré le : sam. 5 juin 2021 18:57

Idée mini écran pour Raspi Headless

Message par piper » jeu. 30 déc. 2021 23:35

Bonjour,

Qui n'a jamais eu le problème suivant :
Un raspberry headless , on le déplace, on l'allume, on veut savoir si tous les services fonctionnent sans utiliser d'écran si ssh.
Ou bien trouver rapidement son IP locale pour y accéder en ssh, voir visualiser qu'il a pris une ip sur le bon réseau.

Evidement, il faut pour cela un visuel. Sans écran de PC, reste des LED ou un mini écran.
Des LED suffisent pour afficher l'état d'un service mais pour afficher une IP. Un écran c'est mieux. Idéalement petit et qui se fixe facilement sur un Pi via le GPIO et des colonnettes.

Un écran qui se connecte directement sur le port GPIO et avec trous pour colonnettes, je n'en n'ai trouvé qu'un : le WaveShare 128x128.
Avantage : fixation définitive sans auxun besoin de boitier ni de bricolage, pas de fils
Inconvénient : il squatte tout le port GPIO
Mais c'est ce qu'il me fallait.
Cet écran dispose de 3 boutons et d'un mini "joystick" up/down/left/right/push

Je l'ai donc commandé et j'ai oublié mon projet pendant un an.
Un an plus tard, je le retrouve et je m'y mets.

1ères déceptions : le dépot github est difficile à trouvé et aucune documentation n'est fournis
Une fois trouvé , le pilote est fait en python2.7, est incompatible avec python 3.x et exploite python-image qui n'exite plus, abandonné et remplacé par python-pil
Heureusement le code est compatible avec python-pil mais il me faut l'installer pour python2.7 alors que par défaut j'ai python 3.x, ainsi que numpy

Une fois fait, je découvre que le joystick est HS : au repos, il reste sur LEFT.
Dommage, trop tard pour le renvoyer.

Mais je n'en ai pas besoin dans mon projet.

Mon idée est la suivante :
Sur un PiZéro disposant de sa caméra, du service motion, et d'un port eth0 en plus du wifi :
Afficher au boot :
- l'ip locale sur eth0 (si existe)
- l'ip locale sur wlan0 (si existe)
- l'ip publique (si connecte à internet)
- l'état du service motion
- l'état de la caméra (bien détectée ?)
3 petits phrases sur l'utilisation des 3 boutons "key1....3"
KEY1 prend une photo et la stocke sur la carte SD
KEY2 redémarre le service motion
KEY3 provoque le reboot

Le code fonctionne même si motion n'est pas installé , s'il n'y a pas de caméra, s'il n'y a pas d'eth0 etc... de sorte que je peut l'utiliser sur n'importe quel raspberry headless pour voir ses ip et être sûr qu'il est démarré. On peut l'adapter (tester un autre service par exemple ou autre chose)
Voici ce que cela donne (j'ai flouté mon ip publique et mon domaine)
Je n'ai pas envie de créer un dépôt github pour ça. Donc si quelqu'un est intéressé, quel est l'endroit le plus approprié du forum pour y mettre le source ?
Image
Modifié en dernier par piper le ven. 7 janv. 2022 21:49, modifié 3 fois.
3 Pi4 : Emby / Samba , Librelec, Android TV
3 Pi3 : Hifiberry /OSMC, Games station, Samba / VPN / HotSpot Wifi
2 Pi2 : RFID, radio reveil (PiReveil)
1 Pi0 : traker GPS et acquisitions
1 Pi0 2W : tests divers
5 Arduinos dont 4 nanos et 1 Mega
1 ESP32

Bud Spencer
Raspinaute
Messages : 1089
Enregistré le : lun. 15 août 2016 21:38

Re: Idée mini écran pour Raspi Headless

Message par Bud Spencer » ven. 31 déc. 2021 09:54

Je ne sais pas quelle est la limite de taille, mais j’ai souvent posté ici des zips de petit projets. Le plus gros doit etre celui du logger NodeJS qui faisait ~650 Ko (viewtopic.php?f=44&t=3033&start=90#p28287)
Le premier ennemi de la connaissance n’est pas l’ignorance, c’est l’illusion de la connaissance (S. Hawking).

Artemus24
Raspinaute
Messages : 1077
Enregistré le : ven. 15 sept. 2017 19:15

Re: Idée mini écran pour Raspi Headless

Message par Artemus24 » ven. 31 déc. 2021 23:37

Salut à tous.

Bonne Année, Bonne Santé, Mes Meilleurs Vœux pour 2022.
piper a écrit :Ou bien trouver rapidement son IP locale pour y accéder en ssh, voir visualiser qu'il a pris une ip sur le bon réseau.
J'utilise toujours le même nom pour toutes mes Raspberry Pi.
Je connais l'adresse IPv4 & IPv6 en allant dans la page de présentation de ma box sfr.
Ou plus simplement, en tapant : "ping raspberrypi" dans l'invite de commande de Windows.

Bravo pour ton projet, Piper.

Cordialement.
Artemus24.
@+
RPI4B/8GB + Argon FanHAt
Rpi3A+, Rpi3B+
RPi 2B + Joy-It I2C Serial 20x4 2004 LCD Module
RPi 2B + PIM273 Unicorn HAT HD 16x16 Leds RGB
RPi0v1.3, RPi0W + LibreElec/Kodi, Rpi0WH + Tuner TV HAT
NodeMCU ESP32

2RJ
Messages : 71
Enregistré le : jeu. 18 déc. 2014 14:14
Localisation : 45 20 00 N 73 20 00 W
Contact :

Re: Idée mini écran pour Raspi Headless

Message par 2RJ » sam. 1 janv. 2022 13:48

J'ai un kit qui comprend un écran 3.5 po. tactyle HDMI, un court câble HDMI et une alimentation. Je ne branche pas l'écran sur les GPIOs mais avec le câble. Ça me permet de l'apporter pour faire du dépannage et surtout pour connaitres les IPs.


https://www.aliexpress.com/item/1005002 ... mainSearch
NIDcornifleur (Zero W RPI Cam Web, RFID, LiFePo4wered PI+)
Pi2 et Zero W RPI Cam Web sur surveillance de plusieurs nichoirs WiFi
PIZero W gérant 5 sondes DHT22 et DS18B20
WSPR (CM4)
BirdNetPI (CM4)
Dongles WIFI

piper
Raspinaute
Messages : 658
Enregistré le : sam. 5 juin 2021 18:57

Re: Idée mini écran pour Raspi Headless

Message par piper » dim. 2 janv. 2022 18:17

Merci pour les encouragements.
Donc je peux mettre ça sur le forum ?
(le code n'est pas gros, guerre plus de 50ko)
3 Pi4 : Emby / Samba , Librelec, Android TV
3 Pi3 : Hifiberry /OSMC, Games station, Samba / VPN / HotSpot Wifi
2 Pi2 : RFID, radio reveil (PiReveil)
1 Pi0 : traker GPS et acquisitions
1 Pi0 2W : tests divers
5 Arduinos dont 4 nanos et 1 Mega
1 ESP32

Bud Spencer
Raspinaute
Messages : 1089
Enregistré le : lun. 15 août 2016 21:38

Re: Idée mini écran pour Raspi Headless

Message par Bud Spencer » dim. 2 janv. 2022 18:52

Bha oui. Tu fais un zip avec tes fichiers dedans et tu joints ca comme tu le ferais pour une image. C'est ce que j'ai toujours fait et mes petites bricoles ont été téléchargées des milliers de fois. Perso, je trouve même ca pratique parce que ceux qui vont vouloir essayer ton code vont pouvoir venir commenter directement sur le topic ou ils l'ont récupéré
Le premier ennemi de la connaissance n’est pas l’ignorance, c’est l’illusion de la connaissance (S. Hawking).

piper
Raspinaute
Messages : 658
Enregistré le : sam. 5 juin 2021 18:57

Re: Idée mini écran pour Raspi Headless

Message par piper » lun. 3 janv. 2022 12:38

Donc voilà

Tout d'abord les sources sous la forme d'un fichier Zip
https://drive.google.com/file/d/1xDkUBR ... sp=sharing

L'archive Zip contient :
LCD_1in44.py et LCD_Config.py qui sont en quelque sorte les pilotes de l'écran WaveShare 128x128 SPI avec ses boutons sous la forme d'un HAT au format PiZéro
Voir l'image ici :
https://www.waveshare.com/media/catalog ... -hat-1.jpg
Il y a un datasheet ici :
https://www.waveshare.com/wiki/1.44inch_LCD_HAT
les codes sources de waveshare avec des exemples sont disponibles ici, si vous voulez développer votre propre affichage:
https://www.waveshare.com/wiki/File:1.4 ... AT-Code.7z

Les scripts d'origine n'étaient pas compatibles python3.x je les ai rendu compatibles.

minilcd.py qui est le script que j'ai développé pour cet écran pour l'affichage de différentes informations (adresse ip, état de motion, prise de photo, reboot)
pour que le script démarre automatiquement, il est sous la forme d'un service nommé minilcd
le fichier minilcd.service contient donc la description du service pour systemctl
et instserv.sh contient le script qui va installer le service


Remarque sur l'installation du service :
- insertserv.sh et minilcd.service supposent que tout cela se trouve dans le dossier /home/pi/MINI_LCD rien ne vous empêche de les mettre ailleurs en modifiant insertserv.sh et minilcd.service
- je force dans le fichier de service l'exécution par python3

Installation:
Cet écran utilise l'interface SPI du Raspberry, veillez à l'avoir activer dans raspi-config (interfaces)
Whaveshare a développé ses scripts LCD_1in44 et 1.44inch_LCD_HAT pour python2.7 et ils ne sont pas compatibles avec python3 !!! (mais mes scripts supportent python2 et pyhton3) J'ai rendu leur script compatibles avec python3 car installer numpy (nécessiare) pour python2 est une galère.

Les pilotes nécessitent l'installation des éléments suivants :

Code : Tout sélectionner

apt-get install libatlas-base-dev
apt-get install python3-numpy
apt-get install python3-gpiozero
pip3 install Pillow
pip3 install spidev
Si c'est OK alors vous pouvez tester le code

Code : Tout sélectionner

 sudo python /home/pi/MINI_LCD/minilcd.py
Il doit afficher à minima les libellés sur l'écran, le nom du raspberry et une IP
Pour sortir : CTRL+C

Ensuite, ouvrez le code pour le personnaliser
A savoir :
Pour écrire du texte là où il y en avait déjà, il faut d'abord mettre par-dessus un rectangle de la couleur du fond (noir pour moi), sinon, les lettres se superposent
La technique en fait, consiste à préparer une image contenant un rectangle , puis du texte en mémoire puis de l'afficher.
Attention : l'affichage de l'écran est lent. C'est pour cela que je le gère zone par zone, je ne rafraichis l'écran que si quelque chose a changé et uniquement la partie à modifier (Ex : RUNNING devient RESTARTING)

En théorie mes lignes consistent en 1 libellé et une valeur. Mais sur les lignes du bas (qui dosent quel bouton fait quoi), je n'utilise que la partie libellé.

J'utilise les commandes natives de linux pour connaitre les IP, redémarrer un service, prendre une photo, rebooter etc... grâce à popen ainsi que des filtres (grep) pour analyser la sortie de commande. Python doit surement permettre de faire cela nativement avec d'autres bibliothèques systèmes.

Les commandes de détection (ip, statut, caméra) consomment du CPU donc je ne le fais pas à chaque itération de boucle mais selon un modulo et j'ai ajouté un petit sleep de sorte que les boutons restent réactifs sans que cela ne consomme trop de CPU

Une fois satisfait de votre code personnalisé, vous pouvez installer le service simplement par

Code : Tout sélectionner

sudo bash /home/pi/MINI_LCD/instserv.sh
Vous avez maintenant le script qui va démarrer tout seul au boot
Vous pourrez l'arrêter par

Code : Tout sélectionner

sudo systemctl stop minilcd.service
Le démarrer par

Code : Tout sélectionner

sudo systemctl start minilcd.service
Désactiver son démarrage automatique par

Code : Tout sélectionner

sudo systemctl disable minilcd.service
Réactiver son démarrage automatique par

Code : Tout sélectionner

sudo systemctl enable minilcd.service
Je l'avoue, le code minilcd.py est largement améliorable : il y a plusieurs objets à gérer et j'ai tout rattaché à l'object screen à la va vite car je déteste les variables globales. Les libellés des lignes et leurs fonctions pourraient devenir paramétrable mais en fait, il est très aisé de le faire en modifiant le code.

Cet écran permet aussi d'afficher des images (bitmap 8bits). Sur le site de waveshare, il y a un exemple mais je ne vois pas trop l'intérêt : il faut que les informations restent visibles et on a peu de place pour le faire.
Je n'ai pas utilisé le joystick (j'ai eu l'écran avec le joystick hs : en position neutre, le gpio "left" est activé en permanence), on pourrait l'utiliser pour faire défiler plusieurs écrans. Ca pourrait vite devenir une belle usine à gaz et perdre de son intérêt par rapport à un écran 3,5 pouces en HDMI qui permet l'affichage du bureau de RaspiOS.

C'est mon 1er tuto de ce genre, soyez indulgents

J'ai déjà un deuxième code pour le même écran mais sur 4 pages avec possibilité de changement de page, passage d'une page à une autre en automatique, surveillance de 4 services et du système (ips, cpu, mémoire, sdcard, disque dur). Cela fera l'objet d'un autre post.
Dans cette version, on entre dans le monde de l'usine à gaz.
3 Pi4 : Emby / Samba , Librelec, Android TV
3 Pi3 : Hifiberry /OSMC, Games station, Samba / VPN / HotSpot Wifi
2 Pi2 : RFID, radio reveil (PiReveil)
1 Pi0 : traker GPS et acquisitions
1 Pi0 2W : tests divers
5 Arduinos dont 4 nanos et 1 Mega
1 ESP32

Répondre

Retourner vers « Utilisateurs avancés »