Cette documentation présente le fonctionnement technique, l’installation et la maintenance du projet de monitoring pour le HAT GamePi13 (Waveshare) sur Raspberry Pi.

🕹️ Présentation Matérielle : GamePi13
Le GamePi13 est une extension matérielle (HAT) conçue pour transformer un Raspberry Pi zéro 2w en une console portable compacte. Ce module regroupe une interface visuelle, des contrôles physiques et un système sonore sur une seule carte électronique.
1. Caractéristiques de l’Écran IPS
L’élément central est un écran LCD de 1,3 pouce utilisant la technologie IPS pour des angles de vision larges.
- Résolution : 240 x 240 pixels.
- Contrôleur : ST7789.
- Interface de communication : Bus SPI (Serial Peripheral Interface).
- Broches dédiées (BCM) :
- DC (Data/Command) : 25.
- RST (Reset) : 27.
- CS (Chip Select) : 8.
- BL (Backlight) : 24 (gestion du rétroéclairage).
2. Interface de Contrôle (Boutons)
Le GamePi13 dispose de 12 boutons physiques répartis pour une ergonomie de jeu classique. Chaque bouton est relié directement à une broche GPIO du Raspberry Pi.
| Groupe | Boutons | Broches BCM |
| Direction (D-Pad) | Haut, Bas, Gauche, Droite | 5, 6, 16, 13 |
| Action | A, B, X, Y | 21, 20, 15, 12 |
| Système | SELECT, START | 19, 26 |
| Gâchettes | L (Épaule gauche), R (Épaule droite) | 23, 14 |
3. Système Audio
Le dispositif intègre un buzzer magnétique pour la génération de signaux sonores et de mélodies.
- Composant : Buzzer piézoélectrique/magnétique.
- Contrôle : Relié à la broche BCM 18.
- Mécanisme : Utilise la modulation de largeur d’impulsion (PWM) pour varier les fréquences sonores.
4. Alimentation et Connectivité
Le HAT est conçu pour s’enficher directement sur le connecteur 40-broches du Raspberry Pi.
- Alimentation : Reçoit son énergie via les broches 3.3V et 5V du connecteur GPIO du Pi.
- Consommation : Inclut la gestion du rétroéclairage pour optimiser l’énergie.
- Détection matérielle : Le circuit inclut des résistances de tirage externes (Pull-up) permettant de détecter la présence du HAT par simple test de l’état logique des broches.
5. Maintenance Matérielle
- Nettoyage : L’écran IPS est sensible aux rayures ; utiliser un chiffon microfibre sec.
- Vérification des contacts : En cas de dysfonctionnement des boutons, vérifier l’alignement des broches du connecteur GPIO, car le HAT repose sur une connexion par pression.
- Audio : Si aucun son n’est émis, vérifier l’interrupteur physique « Speaker » situé sur la tranche de la carte (si présent sur votre révision matérielle).
Le projet SYSMON (SYStem MONitor)
1. Objectifs du Projet
L’objectif est de transformer une console de jeu rétro basée sur le Raspberry Pi en un tableau de bord multifonctions. Le projet offre quatre écrans principaux :
- Moniteur Système (CPU/RAM) : État thermique et charge en temps réel.
- Réseau & Stockage : Adresse IP, espace disque restant et SWAP.
- Traqueur ISS : Localisation en temps réel de la Station Spatiale Internationale sur une carte du monde.
- Météo Locale : Prévisions actuelles pour Rieulay (France) via API.
2. Architecture des Fichiers
| Fichier | Rôle |
|---|---|
gamepi13/ | Package principal contenant les pilotes matériels. |
∟ display.py | Pilote de l’écran ST7789 (SPI, 240×240 px). |
∟ buttons.py | Gestion des 12 boutons (GPIO) et détection du HAT. |
∟ audio.py | Contrôle du buzzer via PWM (GPIO 18). |
system_monitor.py | Script principal (Logique de l’application et affichage). |
deploy.sh | Script d’automatisation de transfert de fichiers (Rsync). |
run_on_pi.sh | Orchestrateur : déploie le code et lance l’exécution via SSH. |
3. Dépendances et Prérequis
Matériel
- Raspberry Pi (Zero/3B/4B).
- HAT GamePi13 (Écran 1.3″ IPS, Buzzer, Boutons).
- Connexion Internet (pour l’ISS et la Météo).
Logiciel (Python 3)
Le projet utilise les bibliothèques suivantes :
Pillow(PIL) : Pour le rendu graphique et la manipulation d’images.RPi.GPIO: Pour le contrôle des broches physiques.spidev: Pour la communication série avec l’écran.urllib&json: Pour les requêtes API (ISS & Météo).
4. Mode Opératoire
Installation
- Activer le SPI sur votre Raspberry Pi via
sudo raspi-config. - Préparer l’environnement :Bash
python3 -m venv venv_gamepi source venv_gamepi/bin/activate pip install Pillow spidev RPi.GPIO
Déploiement et Exécution
Le projet est conçu pour être développé sur un PC et envoyé vers le Pi.
- Modifiez l’adresse IP dans
deploy.shetrun_on_pi.sh(actuellement192.168.1.169). - Lancez l’application depuis votre PC :Bash
./run_on_pi.sh system_monitor.py
Utilisation des Boutons
- DROITE / R : Page suivante.
- GAUCHE / L : Page précédente.
- A : Activer/Désactiver le défilement automatique (toutes les 10s).
- START + SELECT : Quitter l’application proprement.
5. Guide de Maintenance
Problèmes fréquents & Solutions
- Écran Noir : Vérifiez si le bus SPI est activé. Le code utilise
max_speed_hz = 10000000(10MHz) pour garantir la stabilité sur les câbles Dupont ou les connexions de HAT. Si l’écran scintille, réduisez cette valeur dansdisplay.py. - Erreur d’import PIL : Si vous utilisez une ancienne version de Raspbian, installez les dépendances système :
sudo apt-get install libopenjp2-7 libtiff5. - ISS/Météo ne s’affichent pas : Le script inclut un bypass SSL (
ssl._create_unverified_context) pour éviter les erreurs de certificats périmés sur les vieux OS de Pi. Vérifiez la connexion avecping google.com. - Image de fond : Le script cherche
world_map.png. Si vous avez un fichier.jpg, convertissez-le ou modifiez la ligne danssystem_monitor.py.
Modification de la localisation (Météo)
Pour changer la ville, modifiez les coordonnées latitude et longitude dans la fonction get_weather_info() du fichier system_monitor.py.
6. Améliorations Possibles
- Gestion de la Batterie : Le GamePi13 possède un indicateur de charge hardware. On pourrait ajouter une lecture ADC pour afficher le pourcentage restant.
- Optimisation Graphique : Utiliser des icônes (PNG transparents) pour la température et l’humidité au lieu de simple texte.
- Mode Alarme : Utiliser
audio.pypour émettre un bip si la température CPU dépasse 75°C. - Journalisation : Ajouter un système de logs pour traquer les pertes de connexion réseau.
Note de l’auteur : Ce projet a été optimisé pour être « robuste » (fail-safe). En cas de crash, un traceback s’affiche directement sur l’écran LCD pour faciliter le diagnostic sans avoir besoin d’ouvrir une console SSH.
Documentation : test_audio.py
Ce script est un utilitaire de test conçu pour valider le bon fonctionnement du matériel audio (buzzer passif) du GamePi13. Il sert de démonstration pour l’utilisation de la classe Audio incluse dans la librairie du projet.
1. Objectif
Le script a pour but de :
- Vérifier la connexion physique du buzzer sur la broche BCM 18.
- Tester la précision des fréquences générées par la modulation de largeur d’impulsion (PWM).
- Démontrer comment intégrer des effets sonores ou des mélodies simples dans d’autres applications.
2. Dépendances
Pour fonctionner, ce script nécessite :
- Matériel : Un Raspberry Pi avec le chapeau (HAT) GamePi13 installé.
- Librairies Python :
RPi.GPIO(pour le contrôle PWM). - Fichiers locaux : Le module
gamepi13/audio.pydoit être présent dans l’arborescence du projet.
3. Fonctionnement détaillé
Le script exécute deux séquences de test distinctes :
A. Gamme de Do Majeur (C Major Scale)
Il définit une liste de notes allant de Do4 (261.63 Hz) à Do5 (523.25 Hz).
- Chaque note est jouée pendant 0.2 seconde.
- Une pause de 0.05 seconde est insérée entre chaque note pour une distinction nette.
B. Alerte Multi-tons
Une séquence d’alerte rapide est jouée 3 fois :
- Alternance entre une fréquence de 1000 Hz et 1500 Hz.
- Durée ultra-courte de 0.1 seconde pour simuler une notification système ou une alarme de jeu.
4. Mode opératoire
Exécution locale sur le Pi
Placez-vous à la racine du projet et exécutez :
Bash
python3 test_audio.py
Exécution à distance (via PC de développement)
Si vous utilisez les outils de déploiement fournis dans le projet :
Bash
./run_on_pi.sh test_audio.py
5. Maintenance et Dépannage
- Aucun son :
- Vérifiez que le commutateur physique « Speaker » sur le côté du GamePi13 est sur ON.
- Assurez-vous qu’aucun autre processus n’utilise la broche PWM 18 (utilisée également pour l’audio jack sur certains modèles de Pi).
- Erreur de permission : Le script doit être exécuté avec les droits d’accès aux GPIO (généralement inclus dans le groupe
gpiosur Raspberry Pi OS). - Modification des notes : Pour créer vos propres mélodies, modifiez la liste
notesdans la fonctiontest_audio()en utilisant des fréquences en Hertz.
Documentation : setup_new_pi.sh
Ce script est l’outil d’amorçage (bootstrap) du projet. Il permet de transformer un Raspberry Pi avec une installation fraîche d’OS en une machine de développement prête à piloter le HAT GamePi13.
1. Objectifs du Projet
Le script setup_new_pi.sh automatise trois tâches critiques et répétitives qui sont normalement effectuées manuellement via raspi-config ou en ligne de commande :
- Sécurisation et Accès : Configure l’accès SSH par clé publique pour éviter de saisir le mot de passe à chaque déploiement.
- Configuration Matérielle : Active l’interface SPI (Serial Peripheral Interface) nécessaire à la communication avec l’écran LCD.
- Environnement Logiciel : Crée un environnement virtuel Python (
venv) isolé et installe toutes les dépendances matérielles requises (Pillow,spidev,RPi.GPIO).
2. Dépendances et Prérequis
- Sur la machine de développement (PC/Mac/Linux) :
- Un client SSH fonctionnel.
- L’utilitaire
ssh-copy-id.
- Sur le Raspberry Pi cible :
- Une installation de Raspberry Pi OS (Lite ou Desktop).
- L’accès SSH activé (souvent via un fichier
sshvide sur la partitionboot). - Une connexion réseau (Wi-Fi ou Ethernet) sur le même sous-réseau que la machine de développement.
3. Mode opératoire
Préparation
Avant de lancer le script, assurez-vous qu’il est exécutable sur votre machine locale :
Bash
chmod +x setup_new_pi.sh
Exécution
Lancez le script et suivez les instructions à l’écran :
Bash
./setup_new_pi.sh
Le script vous demandera alors :
- L’adresse IP du Pi (ex:
192.168.1.42). - Le nom d’utilisateur (par défaut
pi).
Résultat attendu
À la fin de l’exécution, vous devriez voir le message : "Configuration terminée ! Votre Pi est prêt à être ajouté au GamePi Dev Studio.". Il est alors recommandé de redémarrer le Pi pour finaliser l’activation du SPI.
4. Analyse Technique du Script
Le script est découpé en trois étapes logiques :
- Étape 1 (ssh-copy-id) : Envoie votre clé publique SSH sur le Pi. Cela permet aux scripts
deploy.shetrun_on_pi.shde fonctionner de manière fluide sans interruption. - Étape 2 (raspi-config nonint) : Utilise le mode « non-interactif » de l’outil de configuration du Pi pour activer le bus SPI (
do_spi 0) sans ouvrir d’interface graphique. - Étape 3 (venv & pip) : Crée un dossier
~/gamepi_envet installe les bibliothèques nécessaires à l’affichage (Pillow,spidev) et aux contrôles GPIO (RPi.GPIO).
5. Maintenance et Dépannage
- Erreur
ssh-copy-id: Assurez-vous que le mot de passe par défaut du Pi n’a pas été changé ou que vous le connaissez. Si SSH est refusé, vérifiez que le service est bien démarré sur le Pi. - Échec de l’installation de Pillow : Sur certaines versions « Lite » de l’OS, l’installation de
Pillowpeut échouer par manque de bibliothèques système (commelibjpeg-dev). Dans ce cas, connectez-vous au Pi et lancez :sudo apt update && sudo apt install libopenjp2-7 libtiff5. - Espace disque : La création de l’environnement virtuel consomme environ 50 à 100 Mo sur la carte SD.
6. Améliorations possibles
- Mise à jour système : Ajouter une commande
sudo apt upgrade -yautomatique au début du script. - Vérification de clé : Ajouter un test pour vérifier si une clé SSH existe déjà sur la machine locale avant de tenter l’envoi.
- Configuration Audio : Intégrer l’activation du PWM pour le buzzer directement dans ce script.
🔑 Guide : Création et Gestion des Clés Publiques SSH
Pour que vos scripts comme run_on_pi.sh ou deploy.sh fonctionnent sans vous demander votre mot de passe à chaque seconde, vous avez besoin d’une paire de clés SSH. C’est comme une poignée de main secrète entre votre ordinateur et votre Raspberry Pi.
1. Objectifs du Projet
L’objectif est de sécuriser et d’automatiser la communication entre votre poste de travail et le Raspberry Pi :
- Automatisation : Permettre aux scripts de transfert (
rsync) et d’exécution (ssh) de s’exécuter sans intervention humaine. - Sécurité : Utiliser un chiffrement asymétrique (une clé privée que vous gardez, une clé publique que vous donnez au Pi) plutôt qu’un mot de passe vulnérable.
- Simplification : Une fois configuré, le script
setup_new_pi.shs’occupera de distribuer cette clé sur chaque nouveau projet.
2. Dépendances
- OpenSSH : Installé par défaut sur Linux, macOS et les versions récentes de Windows (via PowerShell ou CMD).
- Un cerveau (optionnel mais recommandé) : Pour ne pas supprimer votre clé privée par erreur.
3. Mode Opératoire : Créer votre clé
Étape 1 : Générer la paire de clés
Ouvrez un terminal sur votre ordinateur et tapez la commande suivante :
Bash
ssh-keygen -t ed25519 -C "votre_email@exemple.com"
Pourquoi Ed25519 ? C’est l’algorithme le plus moderne, rapide et sécurisé actuellement. Si votre système est très ancien, utilisez
-t rsa -b 4096.
- Emplacement : Le terminal vous demandera où enregistrer la clé. Appuyez sur Entrée pour accepter l’emplacement par défaut (
~/.ssh/id_ed25519). - Passphrase : Il vous sera proposé d’ajouter un mot de passe à votre clé.
- Pour une automatisation totale : Laissez vide (Appuyez sur Entrée deux fois).
- Pour une sécurité maximale : Ajoutez un mot de passe (mais vous devrez le taper une fois par session).
Étape 2 : Vérifier vos clés
Allez dans votre dossier .ssh pour voir vos nouveaux « bébés » :
id_ed25519: Votre clé privée. NE LA PARTAGEZ JAMAIS. C’est votre pièce d’identité.id_ed25519.pub: Votre clé publique. C’est elle que nous allons envoyer au Raspberry Pi.
Étape 3 : Envoyer la clé au Pi
C’est ici que votre script setup_new_pi.sh entre en jeu ! Il utilise la commande ssh-copy-id pour copier votre clé publique dans le fichier ~/.ssh/authorized_keys du Pi.
Si vous voulez le faire manuellement :
Bash
ssh-copy-id pi@192.168.1.169
(Remplacez par l’IP de votre Pi)
4. Maintenance et Diagnostic
- « Permission Denied » : Si le Pi refuse votre clé, vérifiez que les permissions sur le Pi sont correctes : le dossier
.sshdoit être en700et le fichierauthorized_keysen600. - Changement d’ordinateur : Si vous changez de PC de développement, vous devrez générer une nouvelle clé et relancer
setup_new_pi.shpour l’ajouter au Pi. - Plusieurs clés : Si vous avez plusieurs clés, vous pouvez créer un fichier
~/.ssh/configpour spécifier laquelle utiliser pour votre Pi.
5. Améliorations possibles
- Agent SSH : Utiliser
ssh-agentpour mémoriser votre passphrase et ne pas avoir à la retaper pendant votre session de travail. - Rotation des clés : Changer de clés tous les ans pour limiter les risques en cas de vol de votre ordinateur.
- Désactivation des mots de passe : Une fois que votre clé fonctionne, vous pouvez configurer le Pi pour qu’il refuse totalement les connexions par mot de passe (via
/etc/ssh/sshd_config), rendant les attaques de force brute impossibles.
Astuce de pro : Considérez votre clé privée comme votre brosse à dents. Vous l’utilisez tous les jours, elle est personnelle, et vous ne la prêtez à personne, même pas à votre meilleur ami.
Le paramètre -C dans la commande ssh-keygen sert à ajouter un commentaire (le « C » signifie d’ailleurs Comment) à votre clé publique.
C’est une fonctionnalité très pratique, car elle agit comme une simple étiquette ou une métadonnée qui n’a aucun impact sur la sécurité ou le fonctionnement technique de la clé elle-même.
🏷️ Pourquoi est-ce utile ?
Lorsque vous générez une clé sans ce paramètre, le système ajoute souvent par défaut votre nom d’utilisateur et le nom de votre machine (ex: pi@raspberrypi). En utilisant -C, vous reprenez le contrôle sur cette identification.
- Identification facile : Si vous avez plusieurs clés sur différents serveurs, le commentaire vous permet de savoir immédiatement à qui ou à quel appareil appartient la clé.
- Gestion dans
authorized_keys: Sur le Raspberry Pi, les clés sont stockées dans le fichier~/.ssh/authorized_keys. Sans commentaire, ce fichier devient vite illisible (une suite interminable de caractères aléatoires). Avec-C, chaque ligne finit par votre texte, comme :ssh-ed25519 AAAA...[données de la clé]... mon-pc-de-bureau
🛠️ Comment ça se présente concrètement ?
Si vous tapez cette commande (utilisée dans notre guide précédent) : ssh-keygen -t ed25519 -C "admin@gamepi-studio"
Le fichier .pub généré ressemblera à ceci : ssh-ed25519 AAAA[...]Tz89 admin@gamepi-studio
Note de maintenance : Vous pouvez même changer ce commentaire plus tard sans avoir à régénérer une nouvelle clé ! Il suffit d’éditer manuellement le fichier
.pubavec un éditeur de texte et de modifier la dernière partie de la ligne.
💡 Un conseil d’ami
Même si c’est optionnel, je vous recommande de toujours l’utiliser. C’est le petit détail qui sépare un développeur organisé d’un développeur qui passe 15 minutes à se demander : « Mais c’est laquelle de mes clés qui est installée sur ce Pi ? »