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.

GroupeBoutonsBroches BCM
Direction (D-Pad)Haut, Bas, Gauche, Droite5, 6, 16, 13
ActionA, B, X, Y21, 20, 15, 12
SystèmeSELECT, START19, 26
GâchettesL (É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 :

  1. Moniteur Système (CPU/RAM) : État thermique et charge en temps réel.
  2. Réseau & Stockage : Adresse IP, espace disque restant et SWAP.
  3. Traqueur ISS : Localisation en temps réel de la Station Spatiale Internationale sur une carte du monde.
  4. Météo Locale : Prévisions actuelles pour Rieulay (France) via API.

2. Architecture des Fichiers

FichierRôle
gamepi13/Package principal contenant les pilotes matériels.
display.pyPilote de l’écran ST7789 (SPI, 240×240 px).
buttons.pyGestion des 12 boutons (GPIO) et détection du HAT.
audio.pyContrôle du buzzer via PWM (GPIO 18).
system_monitor.pyScript principal (Logique de l’application et affichage).
deploy.shScript d’automatisation de transfert de fichiers (Rsync).
run_on_pi.shOrchestrateur : 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

  1. Activer le SPI sur votre Raspberry Pi via sudo raspi-config.
  2. Préparer l’environnement :Bashpython3 -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.sh et run_on_pi.sh (actuellement 192.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 dans display.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 avec ping google.com.
  • Image de fond : Le script cherche world_map.png. Si vous avez un fichier .jpg, convertissez-le ou modifiez la ligne dans system_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

  1. Gestion de la Batterie : Le GamePi13 possède un indicateur de charge hardware. On pourrait ajouter une lecture ADC pour afficher le pourcentage restant.
  2. Optimisation Graphique : Utiliser des icônes (PNG transparents) pour la température et l’humidité au lieu de simple texte.
  3. Mode Alarme : Utiliser audio.py pour émettre un bip si la température CPU dépasse 75°C.
  4. 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.py doit ê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 gpio sur Raspberry Pi OS).
  • Modification des notes : Pour créer vos propres mélodies, modifiez la liste notes dans la fonction test_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 :

  1. Sécurisation et Accès : Configure l’accès SSH par clé publique pour éviter de saisir le mot de passe à chaque déploiement.
  2. Configuration Matérielle : Active l’interface SPI (Serial Peripheral Interface) nécessaire à la communication avec l’écran LCD.
  3. 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 ssh vide sur la partition boot).
    • 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 :

  1. L’adresse IP du Pi (ex: 192.168.1.42).
  2. 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.sh et run_on_pi.sh de 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_env et 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 Pillow peut échouer par manque de bibliothèques système (comme libjpeg-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 -y automatique 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.sh s’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.

  1. Emplacement : Le terminal vous demandera où enregistrer la clé. Appuyez sur Entrée pour accepter l’emplacement par défaut (~/.ssh/id_ed25519).
  2. 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 .ssh doit être en 700 et le fichier authorized_keys en 600.
  • Changement d’ordinateur : Si vous changez de PC de développement, vous devrez générer une nouvelle clé et relancer setup_new_pi.sh pour l’ajouter au Pi.
  • Plusieurs clés : Si vous avez plusieurs clés, vous pouvez créer un fichier ~/.ssh/config pour spécifier laquelle utiliser pour votre Pi.

5. Améliorations possibles

  1. Agent SSH : Utiliser ssh-agent pour mémoriser votre passphrase et ne pas avoir à la retaper pendant votre session de travail.
  2. Rotation des clés : Changer de clés tous les ans pour limiter les risques en cas de vol de votre ordinateur.
  3. 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 .pub avec 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 ? »

Source