📋 Documentation Raspy2DMD
À propos de Raspy2DMD
Canal MQTT
raspy2dmd
Format des trames
<action>|<param1>|<param2>|...
Les valeurs entre crochets [] sont optionnelles
Canal de réponse MQTT (pour toutes les trames)
raspy2dmd/response
SUCCESS|action|messageERROR|action|messageStructure de la documentation
- Système - Gestion du système (redémarrage, arrêt, exclusions)
- Configuration - Modification et rechargement de la configuration
- Affichage Texte - Messages, défilements, carrousels
- Images & GIFs - Affichage de médias graphiques
- Automatique - Affichages textes, temporels et animations d'attente
- Météo - Informations météorologiques et systèmes EDF
- Performance - Visualisation des informations du Raspberry Pi
- Son & Effets - Gestion audio et effets visuels
- Divers - Actions hors catégorie ☺
- Jeux - Jeux jouables depuis le navigateur
Démarrage rapide
Premiers pas
Pour envoyer une commande MQTT, utilisez la commande mosquitto_pub :
Exemples simples
# Afficher un GIF 3 fois de suite : mosquitto_pub -h raspy2dmd -t "raspy2dmd" -m "gif|celebration.gif|3"
# Jouer un son : mosquitto_pub -h raspy2dmd -t "raspy2dmd" -m "sound|beep.ogg"
⚠️ Important : L'attract mode s'interrompt automatiquement lorsqu'une commande d'affichage est reçue, puis reprend sa boucle après un temps défini.
La plupart des commandes d'affichage stoppent l'attract mode avant de s'exécuter pour éviter les conflits.
Exceptions :
Commandes système (rebt, shutdwn)Configuration (conf, rldconf)
Son (sound)
1️⃣ Système - rebt
Format
Description
Redémarre complètement le Raspberry Pi
Exemple
1️⃣ Système - shutdwn
Format
Description
Éteint complètement le Raspberry Pi
Exemple
1️⃣ Système - excludeFolder
Format
Paramètres
- nom_dossier : Nom du dossier à exclure
- chemin : Chemin complet du dossier
Exemple
Notes
- Exclut un dossier des recherches aléatoires
1️⃣ Système - excludeFile
Format
Paramètres
- nom_fichier : Nom du fichier à exclure
- chemin : Chemin complet du fichier
Exemple
Notes
- Exclut un fichier des recherches aléatoires
2️⃣ Configuration - conf
Format
Paramètres
- section : DMDRenderer, TextRenderer, ClockRenderer, Running, OpenWeatherMap, Sound, Directory, Snake, Pong, FlyBird, Des
- param : Nom du paramètre à modifier
- valeur : Nouvelle valeur
Exemples
# Modifier la luminosité en fonction de l'heure (de 00h à 23h) : mosquitto_pub -h raspy2dmd -t "raspy2dmd" -m "conf|DMDRenderer|brightnesshours:10,10,10,10,10,10,10,20,20,50,50,50,50,50,50,50,50,50,50,20,20,20,10,10"
# Modifier volume à 80% : mosquitto_pub -h raspy2dmd -t "raspy2dmd" -m "conf|Sound|volume:80|output:hdmi"
# Modifier la durée avant le déclenchement de l'attract mode à 15 secondes : mosquitto_pub -h raspy2dmd -t "raspy2dmd" -m "conf|Running|attract_mode:15"
# Configuration FlyBird - Modifier la gravité et la force de saut : mosquitto_pub -h raspy2dmd -t "raspy2dmd" -m "conf|FlyBird|gravity:0.1|jump_strength:-0.8"
# Configuration FlyBird - Changer la difficulté en mode Hard : mosquitto_pub -h raspy2dmd -t "raspy2dmd" -m "conf|FlyBird|difficulty:hard|pipe_gap:14|pipe_spacing:35"
# Configuration Snake - Activer les power-ups et obstacles : mosquitto_pub -h raspy2dmd -t "raspy2dmd" -m "conf|Snake|powerups:1|obstacles:1"
# Configuration Pong - Modifier la vitesse de la balle et la difficulté CPU : mosquitto_pub -h raspy2dmd -t "raspy2dmd" -m "conf|Pong|ballspeed:3|difficulty:expert"
Notes
- Recharge automatiquement le renderer
- Affiche un message "OK" quand le paramètre est bien pris en compte (sauf pour brightness)
- Joue un son si volume ou output modifiés
2️⃣ Configuration - rldconf
Format
Description
Recharge la configuration depuis le fichier
Exemple
Notes
- Recharge automatiquement le renderer
2️⃣ Configuration - receipconf
Format
Description
Envoie la configuration actuelle
Exemple
3️⃣ Affichage Texte - msg
Format
Paramètres
- texte : Texte à afficher
- sens : left, right, up, down (optionnel)
- itérations : Nombre de répétitions (optionnel)
Exemples
# Message qui défile vers la gauche : mosquitto_pub -h raspy2dmd -t "raspy2dmd" -m "msg|WELCOME|left"
# Message répété 3 fois : mosquitto_pub -h raspy2dmd -t "raspy2dmd" -m "msg|SCORE: 180|left|3"
# Message dont le sens a été oublié : mosquitto_pub -h raspy2dmd -t "raspy2dmd" -m "msg|SCORE: 180||3"
# Message dont le sens et l'itération ont été oublié : mosquitto_pub -h raspy2dmd -t "raspy2dmd" -m "msg|SCORE: 180||"
Notes
- Si le paramètre sens est omis, le message s'affichera de façon fixe
- Police définie dans la configuration
- Texte vide affiche "-Vide-"
Rendu
3️⃣ Affichage Texte - msgXX
Format
Paramètres
- msgXX : msg01 à msg99 (nom de la police .ttf)
- texte : Texte à afficher
- sens : left, right, up, down (optionnel)
- itérations : Nombre de répétitions (optionnel)
- gif : Affiche ou non le GIF associé s'il en existe un (0 ou 1 — 1 par défaut) (optionnel)
- son : Joue ou non le son associé s'il en existe un (0 ou 1 — 1 par défaut) (optionnel)
Exemples
# Message personnalisé 3 avec défilement : mosquitto_pub -h raspy2dmd -t "raspy2dmd" -m "msg03|WINNER|up"
# Message personnalisé 4 et non affichage du gif du message : mosquitto_pub -h raspy2dmd -t "raspy2dmd" -m "msg04|BOUUUUH|||0"
# Message personnalisé 5 avec défilement et 5 fois de suite : mosquitto_pub -h raspy2dmd -t "raspy2dmd" -m "msg05|WINNER|right|5"
# Message personnalisé 6 et affichage du gif du message et pas de son : mosquitto_pub -h raspy2dmd -t "raspy2dmd" -m "msg06|Super!|||1|0"
# Message personnalisé 7 et non affichage du gif du message et pas de son : mosquitto_pub -h raspy2dmd -t "raspy2dmd" -m "msg07|Génial!|||0|0"
Notes
- Doit être paramétré dans la page "Message Personnalisé"
Rendu
1️⃣ 0️⃣ Affichage Texte - msgmove
Format
Paramètres
- texte : Texte à afficher
- sens : left, right, up, down (obligatoire)
Exemple
Notes
- Le sens est obligatoire
1️⃣ 0️⃣ Affichage Texte - msgmovebcl
Format
Paramètres
- texte : Texte à afficher
- sens : left, right, up, down
- itérations : Nombre d'itérations
Exemple
Notes
- Le sens ET l'itération sont obligatoires
5️⃣ Automatique - msgcarrou
Format
Paramètres
- start/stop : start (ou stop)
Exemple
Notes
- Affiche les messages du dossier /Medias/Textes de façon aléatoire, à tour de rôle
3️⃣ Affichage Texte - msgcolor
Format
Paramètres
- texte : Texte à afficher
- R;G;B : Couleur RGB (0-255 pour chaque) pour le texte
- R;G;B : Couleur RGB (0-255 pour chaque) pour le fond
- sens : left, right, up, down (optionnel)
- itérations : Nombre de répétitions (optionnel)
Exemples
# Message vert avec fond noir qui défile vers la gauche : mosquitto_pub -h raspy2dmd -t "raspy2dmd" -m "msgcolor|SUCCESS|0;255;0|0;0;0|left"
# Message vert avec fond noir qui défile vers le haut et 3 fois : mosquitto_pub -h raspy2dmd -t "raspy2dmd" -m "msgcolor|SUCCESS|0;255;0|0;0;0|up|3"
Notes
- Format couleur message : R;G;B avec valeurs 0-255
- Format couleur fond : R;G;B avec valeurs 0-255
Rendu
3️⃣ Affichage Texte - msgimg
Format
Paramètres
- texte : Texte à afficher
- image : Nom du fichier image de fond (Chemin complet vers le fichier voulu)
- sens : left, right, up, down (optionnel)
- itérations : Nombre de répétitions (optionnel)
Exemples
# Message avec comme "couleur" le fichier '/Medias/Patterns/OldGame.png' vers la gauche : mosquitto_pub -h raspy2dmd -t "raspy2dmd" -m "msgimg|SUCCESS|/Medias/Patterns/OldGame.png|left"
# Message avec comme "couleur" le fichier '/Medias/Patterns/OldGame.png' vers le bas et 2 fois : mosquitto_pub -h raspy2dmd -t "raspy2dmd" -m "msgimg|LOSER|OldGame.png|down|2"
Notes
- Les images utilisées comme texture de fond doivent être dans /Medias/Fonts
- Texte superposé sur l'image
Rendu
3️⃣ Affichage Texte - msgcst
Format
Paramètres
- texte : Texte à afficher
- police : Nom du fichier de police
- R;G;B : Couleur RGB message
- R;G;B : Couleur RGB fond
- sens : left, right, up, down (optionnel)
- itérations : Nombre de répétitions (optionnel)
Exemple
# Message avec police d'écriture, couleur du message, couleur du fond, défilement vers la gauche et 5 fois : mosquitto_pub -h raspy2dmd -t "raspy2dmd" -m "msgcst|VICTORY|Impact.ttf|255;0;0|255;215;0|left|5"
# Message avec police d'écriture, couleur du message, couleur du fond, défilement vers la gauche : mosquitto_pub -h raspy2dmd -t "raspy2dmd" -m "msgcst|SUCCESS|Impact.ttf|0;255;0|0;0;0|left"
Notes
- La police d'écriture doit être dans le dossier /Medias/Fonts
- Combine tous les paramètres de personnalisation
Rendu
3️⃣ Affichage Texte - msgfull
Format
Paramètres
- texte : Texte à afficher (obligatoire)
- police.ttf : Nom du fichier de police dans /Medias/Fonts/ (optionnel)
- R;G;B texte : Couleur du texte en RGB, séparateur
;ou,(optionnel) - R;G;B fond : Couleur du fond en RGB (optionnel, ignoré si pattern ou gif fourni)
- pattern : Nom ou chemin du pattern de fond dans /Medias/Patterns/ (optionnel, priorité sur fond couleur)
- gif de fond : Nom ou chemin du GIF de fond dans /Medias/Gifs/ (optionnel, priorité sur pattern et fond couleur)
- son : Nom ou chemin du fichier son dans /Medias/Sounds/ (optionnel)
- sens : gAD, dAG, hEB, bEH, ROT, ARO, FLI, TWI, fix (optionnel)
- itérations : Nombre de répétitions (optionnel, défaut : valeur configuration)
Règles de priorité pour le fond : gif de fond > pattern > couleur de fond
Les paramètres optionnels peuvent être omis ou laissés vides (chaîne vide) pour utiliser la valeur par défaut.
Les chemins relatifs sont automatiquement résolus depuis les dossiers /Medias correspondants.
Exemples
# Texte avec police, couleur et pattern de fond : mosquitto_pub -h raspy2dmd -t "raspy2dmd" -m "msgfull|WINNER|Impact.ttf|255;255;255|||OldGame.png"
# Texte avec GIF de fond et son : mosquitto_pub -h raspy2dmd -t "raspy2dmd" -m "msgfull|JACKPOT|Impact.ttf|255;215;0||||explosion.gif|win.wav"
# Texte avec toutes les options : mosquitto_pub -h raspy2dmd -t "raspy2dmd" -m "msgfull|VICTORY|Impact.ttf|255;0;0|0;0;0|||explosion.gif|win.wav|gAD|3"
# Texte minimal (valeurs par défaut pour tout) : mosquitto_pub -h raspy2dmd -t "raspy2dmd" -m "msgfull|Hello World"
Notes
- Les fichiers de police, pattern, GIF et son peuvent être des noms de fichiers relatifs ou des chemins absolus
- Si un GIF de fond est fourni, le pattern et la couleur de fond sont ignorés
- Si un pattern est fourni, la couleur de fond est ignorée
- Cette trame est utilisée par le Calendrier d'événements pour la prévisualisation sur le DMD
9️⃣ Affichage Score - score
Format
Paramètres
- valeur : Score à afficher (ex: "T20 - D2 - X")
- durée : Durée d'affichage en secondes (optionnel)
Exemples
# Scores 2ème fléchette : mosquitto_pub -h raspy2dmd -t "raspy2dmd" -m "score|D2 - T20 - X"
# Scores 3ème fléchette : mosquitto_pub -h raspy2dmd -t "raspy2dmd" -m "score|D2 - T20 - S1"
Notes
- Format spécial pour affichage de scores de RaspyDarts
4️⃣ Images & GIFs - img
Format
Paramètres
- fichier : Nom du fichier image
- durée : Durée d'affichage en secondes (0 = durée illimitée) (optionnel)
- fallback : Image de secours si introuvable ('' = vide si pas d'image) (optionnel)
- extensions : Extensions à essayer, séparées par virgules (optionnel)
Exemples
# Image avec durée d'affichage de 5 secondes : mosquitto_pub -h raspy2dmd -t "raspy2dmd" -m "img|banner.png|5"
# Image avec durée d'affichage de 3 secondes et image de secours si introuvable : mosquitto_pub -h raspy2dmd -t "raspy2dmd" -m "img|special.png|3|default.png"
# Image sans connaitre son extension en proposant les extensions multiples : mosquitto_pub -h raspy2dmd -t "raspy2dmd" -m "img|logo|0||.png,.PNG,.jpg,.jpeg"
Notes
- Cherche dans /Medias/Images/
- Supporte les extensions multiples
- Image de secours si image introuvable
4️⃣ Images & GIFs - gif
Format
Paramètres
- fichier : Nom du fichier GIF
- itérations : Nombre de lectures (0 = pas de limite) (optionnel)
- fallback : GIF de secours si introuvable ('' = vide si pas de gif) (optionnel)
- extensions : Extensions à essayer, séparées par virgules (optionnel)
Exemples
# GIF lecture 3 fois : mosquitto_pub -h raspy2dmd -t "raspy2dmd" -m "gif|abobo.gif|3"
# GIF avec fallback si gif pas trouvé : mosquitto_pub -h raspy2dmd -t "raspy2dmd" -m "gif|special.gif|0|default.gif"
# GIF sans connaitre son extension, avec extensions multiples et sans fallback : mosquitto_pub -h raspy2dmd -t "raspy2dmd" -m "gif|demo|0||.gif,.GIF"
Notes
- Cherche dans /Medias/Gifs/ ou dans le sous-répertoire indiqué avec le nom du GIF (exemple : 600Gratos/abobo.gif)
4️⃣ Images & GIFs - gifPath
Format
Paramètres
- chemin_complet : Chemin absolu vers le GIF
- itérations : Nombre de lectures (optionnel)
Exemple
Notes
- Permet d'accéder à des GIFs hors du dossier standard
- Nécessite le chemin absolu complet
4️⃣ Images & GIFs - gifText
Format
Paramètres
- fichier : Nom du fichier GIF
- texte : Texte à superposer
- R;G;B : Couleur du message (couleur par défaut si non renseigné) (optionnel)
- itérations : Nombre de lectures (optionnel)
Exemple
Notes
- Combine animation GIF et texte
- Texte affiché par-dessus l'animation
4️⃣ Images & GIFs - rand
Format
Paramètres
- type : "gif" ou "image"
- occurrence (optionnel) : nombre de fichiers à afficher (défaut : 1)
- directory (optionnel) : dossier dans lequel sélectionner aléatoirement
- Chemin complet :
/Medias/Gifs/MonDossier→ utilisé tel quel - Chemin relatif :
/MonDossierouMonDossier→ résolu depuis le répertoire de base du type (ex:/Medias/Gifs/MonDossier) - Si le dossier n'existe pas → erreur
- Chemin complet :
Exemples
# 3 GIFs aléatoires : mosquitto_pub -h raspy2dmd -t "raspy2dmd" -m "rand|gif|3"
# GIF aléatoire depuis un sous-dossier (chemin relatif) : mosquitto_pub -h raspy2dmd -t "raspy2dmd" -m "rand|gif|/MonDossier"
# 3 GIFs aléatoires depuis un sous-dossier : mosquitto_pub -h raspy2dmd -t "raspy2dmd" -m "rand|gif|3|/MonDossier"
# GIF aléatoire depuis un chemin complet : mosquitto_pub -h raspy2dmd -t "raspy2dmd" -m "rand|gif|/Medias/Gifs/MonDossier"
# Image aléatoire (tous les dossiers) : mosquitto_pub -h raspy2dmd -t "raspy2dmd" -m "rand|image"
# 3 images aléatoires : mosquitto_pub -h raspy2dmd -t "raspy2dmd" -m "rand|image|3"
# Image aléatoire depuis un sous-dossier : mosquitto_pub -h raspy2dmd -t "raspy2dmd" -m "rand|image|/MonDossier"
# 3 images aléatoires depuis un sous-dossier : mosquitto_pub -h raspy2dmd -t "raspy2dmd" -m "rand|image|3|/MonDossier"
Notes
- Respecte les exclusions
- Les GIFs utilisent un pool sans répétition (chaque GIF est affiché une fois avant de recommencer)
- Si un dossier est spécifié, le pool de GIFs est mis à jour avec uniquement les fichiers de ce dossier
5️⃣ Automatique - time
Format
Paramètres
- start/stop : start (ou stop)
Exemples
Notes
- Affiche la date et l'heure selon le mode configuré dans la page /horloge
- Peut être personnalisée via la configuration
Format
Paramètres
- start/stop : start (ou stop)
Exemples
Notes
- Affiche uniquement la date pendant la durée définie par timeshow_date (page /horloge)
- Indépendant du mode d'affichage configuré — affiche toujours la date seule
- Disponible aussi comme élément du carrousel attract mode (code D)
Format
Paramètres
- start/stop : start (ou stop)
Exemples
Notes
- Affiche uniquement l'heure pendant la durée définie par timeshow_hours (page /horloge)
- Indépendant du mode d'affichage configuré — affiche toujours l'heure seule
- Disponible aussi comme élément du carrousel attract mode (code H)
5️⃣ Automatique - waiter
Format
Paramètres
- start/stop : start (ou stop)
Exemples
Notes
- Affiche une animation d'attente (parfois appelée "attract mode", mais l'attract mode réel se déclenche et se configure dans le Paramétrage)
- L'ordre de ce qui sera affiché doit être configuré dans le Paramétrage
6️⃣ Météo - owmzc
Format
Paramètres
- zip_code : Code postal
- country_code : Code pays (ex: FR, US, UK)
Exemple
Notes
- Pas de Stop() automatique
- Configure la localisation pour OpenWeatherMap
- Nécessite une clé API OpenWeatherMap valide
6️⃣ Météo - fllcn
Format
Paramètres
- ville : Nom de la ville
- état : État/région (optionnel, vide pour France)
- pays : Code pays
Exemples
Notes
- Pas de Stop() automatique
- Configuration plus précise que owmzc
6️⃣ Météo - meteo
Format
Description
Affiche la météo actuelle pour la localisation configurée
Exemple
Notes
- Utilise OpenWeatherMap API
- Nécessite configuration préalable
6️⃣ Météo - meteoPrevi
Format
Description
Affiche les prévisions météo sur plusieurs jours
Exemple
Notes
- Utilise OpenWeatherMap API
- Nécessite configuration préalable
- Affiche les prévisions sur plusieurs jours
7️⃣ Performance - perf
Format
Description
Affiche les performances du système (SOC)
Exemple
Notes
- CPU, RAM, température, etc.
8️⃣ Son & Effets - sound
Format
Paramètres
- fichier : Nom du fichier son (.ogg obligatoire)
Exemples
# Applaudissements mosquitto_pub -h raspy2dmd -t "raspy2dmd" -m "sound|applause.ogg"
Notes
- Cherche dans /Medias/Sounds/
- Joué en parallèle de l'affichage
- Format : .ogg obligatoire
8️⃣ Son & Effets - effet
Format
Paramètres
- numero : Numéro de l'effet (1-99)
Exemple
Notes
- Effets visuels prédéfinis
8️⃣ Son & Effets - soundeffet
Format
Paramètres
- texte : Texte à afficher
- gif : Nom du fichier GIF
- son : Nom du fichier son
Exemple
Notes
- Combine texte + gif + son
- Effet complet coordonné
9️⃣ Divers - edfJoursTempo
Format
Description
Affiche les jours Tempo EDF (bleu/blanc/rouge)
Exemple
Notes
- Spécifique France (tarif Tempo EDF)
🐍 Snake
Description
Snake est le jeu classique du serpent qui grandit en mangeant de la nourriture.
Principe du jeu : Contrôlez un serpent qui se déplace continuellement. Mangez la nourriture pour grandir et augmenter votre score, tout en évitant de vous mordre la queue et les murs (ou obstacles si activés).
Objectif : Obtenir le meilleur score possible en mangeant le maximum de nourriture sans collision.
Commandes MQTT principales
- raspy2dmd snake|start - Démarre une nouvelle partie
- raspy2dmd snake|stop - Arrête la partie en cours
- raspy2dmd snake|pause - Met en pause / reprend la partie
Commandes de contrôle (déplacement)
- raspy2dmd snake|up - Déplace le serpent vers le haut
- raspy2dmd snake|down - Déplace le serpent vers le bas
- raspy2dmd snake|left - Déplace le serpent vers la gauche
- raspy2dmd snake|right - Déplace le serpent vers la droite
- snake|start - Démarre une nouvelle partie
- snake|up - Tourne vers le haut
- snake|pause - Met en pause
Contrôles clavier (interface Web)
| Touche | Action |
|---|---|
| Flèche Haut | Déplacement vers le haut |
| Flèche Bas | Déplacement vers le bas |
| Flèche Gauche | Déplacement vers la gauche |
| Flèche Droite | Déplacement vers la droite |
Fichiers sonores (/Medias/Games/Snake/)
- snake_start.ogg : Son de démarrage de partie
- snake_eat.ogg : Son quand le serpent mange de la nourriture
- snake_powerup_speed.ogg : Son du power-up Vitesse
- snake_powerup_points.ogg : Son du power-up Points
- snake_malus.ogg : Son du malus Shrink
- snake_gameover.ogg : Son de game over
- snake_victory.ogg : Son de victoire
- snake_pause.ogg : Son de pause
Power-ups et malus
- Power-up Vitesse (bleu) : Accélère temporairement le serpent
- Power-up Points (jaune) : Donne des points bonus
- Malus Shrink (violet) : Réduit la taille du serpent
Règles du jeu
- Le serpent se déplace continuellement dans la direction choisie
- Mangez la nourriture rouge pour grandir et gagner des points
- Évitez de mordre votre propre queue (game over)
- Évitez les murs ou activez le mode "nowalls" pour téléportation
- Les obstacles (si activés) provoquent le game over en cas de collision
- Collectez les power-ups pour des bonus temporaires
- Système de high scores conservant les 100 meilleurs résultats
🏓 Pong
Description
Pong est le jeu d'arcade classique de tennis de table en deux dimensions.
Principe du jeu : Deux raquettes s'affrontent pour renvoyer une balle. Le joueur contrôle sa raquette verticalement pour empêcher la balle de sortir de son côté. Chaque balle manquée donne un point à l'adversaire. La balle accélère progressivement au cours de la partie.
Objectif : Être le premier à atteindre le score maximum (par défaut 11 points) en marquant des points contre l'adversaire (CPU ou joueur 2).
Commandes MQTT principales
- raspy2dmd pong|start|[joueur]|[difficulté] - Démarre une nouvelle partie
- raspy2dmd pong|stop - Arrête la partie en cours
- raspy2dmd pong|pause - Met en pause / reprend la partie
joueur (optionnel) :
- 1 : Mode 1 joueur vs CPU (par défaut)
- 2 : Mode 2 joueurs
difficulté (optionnel, uniquement en mode 1 joueur) :
- beginner : CPU débutant
- intermediate : CPU confirmé (par défaut)
- expert : CPU expert
Commandes de contrôle (déplacement)
Toutes les commandes suivantes acceptent un paramètre joueur : |1 ou |2 (défaut: joueur 1)
- raspy2dmd pong|up|[joueur] - Déplace la raquette vers le haut
- raspy2dmd pong|down|[joueur] - Déplace la raquette vers le bas
- pong|start|1 - Démarre partie 1 joueur vs CPU
- pong|up|1 - Joueur 1 monte sa raquette
- pong|pause - Met en pause
Contrôles clavier (interface Web)
| Touche | Action |
|---|---|
| E | Joueur 1 - Déplacer vers le haut |
| D | Joueur 1 - Déplacer vers le bas |
| I | Joueur 2 - Déplacer vers le haut (mode 2 joueurs) |
| K | Joueur 2 - Déplacer vers le bas (mode 2 joueurs) |
| Espace | Pause / Reprendre |
| Entrée | Démarrer une partie |
| Échap | Arrêter la partie |
Fichiers sonores (/Medias/Games/Pong/)
- pong_start.ogg : Son de démarrage de partie
- pong_paddle_hit.ogg : Son de rebond sur raquette
- pong_wall_hit.ogg : Son de rebond sur mur
- pong_score.ogg : Son quand un point est marqué
- pong_win.ogg : Son de victoire
- pong_lose.ogg : Son de défaite (vs CPU)
- pong_pause.ogg : Son de pause
Catégories de high scores
- EASY : Scores contre CPU niveau débutant
- MED : Scores contre CPU niveau confirmé
- HARD : Scores contre CPU niveau expert
- PVP : Scores en mode 2 joueurs
Règles du jeu
- Contrôlez votre raquette verticalement pour renvoyer la balle
- Si la balle sort de votre côté, l'adversaire marque un point
- La balle accélère progressivement au cours de la partie
- L'angle de rebond dépend de l'endroit où la balle touche la raquette
- Premier à atteindre le score maximum (par défaut 11 points) remporte la partie
- En mode 1 joueur, affrontez une IA avec 3 niveaux de difficulté
- En mode 2 joueurs, affrontez un adversaire humain
🐦 Fly Bird
Description
Fly Bird est un jeu d'arcade inspiré du célèbre Flappy Bird où vous guidez un oiseau à travers des obstacles.
Principe du jeu : Un oiseau tombe en permanence sous l'effet de la gravité. Le joueur doit le faire sauter au bon moment pour éviter les tuyaux qui défilent horizontalement. Chaque tuyau franchi rapporte un point.
Objectif : Obtenir le meilleur score possible en franchissant le maximum de tuyaux sans collision.
Commandes MQTT principales
- raspy2dmd flybird|start - Démarre une nouvelle partie
- raspy2dmd flybird|stop - Arrête la partie en cours
- raspy2dmd flybird|pause - Met en pause / reprend la partie
Commandes de contrôle (gameplay)
- raspy2dmd flybird|jump - Fait sauter l'oiseau vers le haut
- flybird|start - Démarre une nouvelle partie
- flybird|jump - L'oiseau saute
- flybird|pause - Met en pause
Contrôles clavier (interface Web)
| Touche | Action |
|---|---|
| Espace | Faire sauter l'oiseau |
| P | Pause / Reprendre |
| Entrée | Démarrer une partie |
| Échap | Arrêter la partie |
Fichiers sonores (/Medias/Games/FlyBird/)
- flybird_start.ogg : Son de démarrage de partie
- flybird_jump.ogg : Son du saut de l'oiseau
- flybird_score.ogg : Son quand un point est marqué
- flybird_hit.ogg : Son de collision avec un tuyau
- flybird_gameover.ogg : Son de fin de partie
- flybird_pause.ogg : Son de pause
Niveaux de difficulté
- Facile : Espacement large — Temps de réaction très confortable
- Normal : Espacement confortable — Temps de réaction suffisant
- Hard : Passage plus étroit — Nécessite plus de précision
Règles du jeu
- L'oiseau tombe en permanence sous l'effet de la gravité
- Appuyez sur jump pour faire sauter l'oiseau vers le haut
- Évitez de heurter les tuyaux (collision = game over)
- Évitez de toucher le sol ou le plafond (game over)
- Chaque tuyau franchi rapporte 1 point
- Les tuyaux défilent horizontalement avec génération procédurale
- Objectif : Obtenir le meilleur score possible en franchissant un maximum de tuyaux
🚀 Space Wars
Description
Space Wars est un jeu de combat spatial pour 1 ou 2 joueurs inspiré du classique Space War!
Principe du jeu : Deux vaisseaux s'affrontent dans l'espace en évitant un trou noir central qui exerce une force gravitationnelle. Les joueurs doivent manœuvrer habilement, tirer sur l'adversaire tout en évitant d'être aspirés par le trou noir ou percutés par des astéroïdes.
Objectif : Atteindre le score maximal configuré (par défaut 10 points) en détruisant le vaisseau adverse.
Commandes MQTT principales
- raspy2dmd spacewars|start - Démarre une nouvelle partie
- raspy2dmd spacewars|stop - Arrête la partie en cours
- raspy2dmd spacewars|pause - Met en pause / reprend la partie
Commandes de contrôle (par joueur)
Toutes les commandes suivantes acceptent un paramètre joueur : |1 ou |2 (défaut: joueur 1)
- raspy2dmd spacewars|rotate_left|[player] - Pivote le vaisseau vers la gauche (sens anti-horaire)
- raspy2dmd spacewars|rotate_right|[player] - Pivote le vaisseau vers la droite (sens horaire)
- raspy2dmd spacewars|thrust|[player] - Active la propulsion (accélère dans la direction du vaisseau)
- raspy2dmd spacewars|fire|[player] - Tire un missile
- raspy2dmd spacewars|hyperspace|[player] - Téléportation aléatoire (urgence pour échapper au danger)
- spacewars|rotate_left|1 - Joueur 1 pivote à gauche
- spacewars|fire|2 - Joueur 2 tire un missile
- spacewars|hyperspace|1 - Joueur 1 se téléporte
Contrôles clavier (interface Web)
| Joueur 1 | Action | Joueur 2 |
|---|---|---|
| A | Rotation gauche | Flèche Gauche |
| D | Rotation droite | Flèche Droite |
| W | Propulsion | Flèche Haut |
| Espace | Tirer | Entrée |
| Q | Hyperspace | Shift Droit |
Fichiers sonores (/Medias/Games/SpaceWars/)
- thrust.ogg : Son de propulsion du vaisseau
- fire.ogg : Son de tir de missile
- explosion.ogg : Son d'explosion (collision vaisseau)
- hit.ogg : Son d'impact (missile touche vaisseau)
- hyperspace.ogg : Son de téléportation hyperspace
Règles du jeu
- Le trou noir central exerce une force gravitationnelle qui attire les vaisseaux
- Collision avec le trou noir = destruction du vaisseau (point pour l'adversaire)
- Les missiles ne sont pas affectés par la gravité
- Les astéroïdes (si activés) dérivent dans l'espace et peuvent détruire les vaisseaux
- L'hyperspace téléporte aléatoirement le vaisseau (peut être dangereux !)
- Les vaisseaux réapparaissent au centre après destruction
- Le premier joueur à atteindre le score maximum remporte la partie
Modes de difficulté
- Easy : Gravité faible, peu d'astéroïdes, vaisseaux plus maniables
- Medium : Gravité moyenne, astéroïdes modérés, équilibre standard
- Hard : Gravité forte, nombreux astéroïdes, vaisseaux difficiles à contrôler
🎲 Dés
Description
Le jeu de Dés permet de lancer jusqu'à 6 dés simultanément sur le DMD. Chaque dé est entièrement configurable : nombre de faces, couleur du texte, couleur de fond et type d'animation.
Mécaniques disponibles :
- Lancer unique : Chaque lancer relance tous les dés. Les dés s'arrêtent automatiquement (mode auto) ou sur action de l'utilisateur (mode manuel).
- Yahtzee : Les dés verrouillés ne sont pas relancés. Un contour doré indique un dé verrouillé. Jusqu'à N lancers consécutifs (configurable), après quoi tous les verrous sont levés.
Animations disponibles :
- Simple : Les chiffres défilent aléatoirement à 20 fps jusqu'à l'arrêt.
- 3D : Un cube wireframe tourne à vitesses angulaires différentes pour un effet naturel. Le chiffre animé est affiché au centre du cube. Une fois stoppé, le dé passe en mode simple (fond coloré + chiffre).
Commandes MQTT
- raspy2dmd des|start - Ouvre la session dés, fige l'attract mode
- raspy2dmd des|roll - Lance les dés non verrouillés
- raspy2dmd des|stop - Stoppe tous les dés en cours
- raspy2dmd des|stop|N - Stoppe et verrouille le dé N (1-based, ex:
des|stop|2) - raspy2dmd des|update_config - Recharge la configuration et réinitialise les dés
- raspy2dmd des|quit - Ferme la session, réactive l'attract mode
- des|start - Ouvre la page dés
- des|roll - Lance les dés
- des|stop|3 - Stoppe le 3ème dé
- des|stop - Stoppe tous les dés
- des|quit - Ferme la session
Contrôles clavier (interface Web)
| Touche | Action |
|---|---|
| Espace | Lancer les dés (si non en train de tourner) |
| C | Stopper / verrouiller tous les dés |
| 1 – 6 | Stopper / verrouiller le dé correspondant |
| Échap | Quitter la page dés |
Types de dés
Types prédéfinis : D4, D6, D8, D10, D12, D20
Il est également possible de saisir librement n'importe quel entier ≥ 2 comme nombre de faces (dé personnalisé).
Le type de chaque dé est configuré par position dans l'interface web (/des) et sauvegardé au format pipe-séparé :
dice_types = 6|20|8|6|6|6
Configuration INI [Des]
| Clé | Défaut | Description |
|---|---|---|
| font | 8bit.ttf | Police utilisée pour les chiffres |
| fontsize | 8 | Taille de la police (px) |
| mechanic | single | single (lancer unique) ou yahtzee |
| animation | simple | simple (nombres aléatoires) ou 3d (cube wireframe) |
| stop_mode | auto | auto (arrêt après durée) ou manual (arrêt sur action) |
| animation_duration | 3.0 | Durée de l'animation en mode auto (secondes) |
| yahtzee_max_rolls | 3 | Nombre maximum de lancers en mode Yahtzee |
| soundsenabled | 1 | Son activé (1) ou désactivé (0) |
| num_dice | 2 | Nombre de dés affichés (1 à 6) |
| dice_types | 6|6|6|6|6|6 | Nombre de faces par position (pipe-séparé) |
| dice_text_colors | 255,255,255|… | Couleur du texte par position (R,G,B pipe-séparé) |
| dice_bg_colors | 30,30,80|… | Couleur de fond par position (R,G,B pipe-séparé) |
- conf|Des|mechanic|yahtzee - Passe en mode Yahtzee
- conf|Des|animation|3d - Active l'animation 3D
- conf|Des|stop_mode|manual - Arrêt manuel
- conf|Des|animation_duration|5.0 - Durée de 5 secondes
- conf|Des|num_dice|4 - Affiche 4 dés
Fichiers sonores (/Medias/Sounds/Jeux/Des/)
- des_roll.ogg : Son joué au début de chaque animation de tirage
Règles et mécaniques
- En mode Lancer unique : tous les dés sont relancés à chaque appui. En mode manuel, ils continuent de tourner jusqu'à un stop explicite (touche ou bouton).
- En mode Yahtzee : les dés avec un contour doré sont verrouillés et ne seront pas relancés. Après N lancers (configurable), tous les verrous sont automatiquement levés.
- En mode d'arrêt auto : les dés s'arrêtent après la durée configurée (défaut : 3 secondes).
- En mode d'arrêt manuel : les dés tournent indéfiniment jusqu'à ce que l'utilisateur les stoppe (un par un ou tous d'un coup).
- Les couleurs de texte et de fond sont configurées par position depuis la page principale
/deset sauvegardées dans la configuration INI. - Il n'y a pas de système de high scores (jeu sans game over).
🎙️ Visualiseur Audio
Description
Le visualiseur audio capture le son d'un microphone USB en temps réel et l'affiche sous forme graphique sur le DMD. Cinq modes visuels sont disponibles, avec un gain réglable et une intégration dans l'attract mode.
Prérequis : Un microphone USB branché sur le Raspberry Pi.
Fréquence d'échantillonnage : 11 025 Hz — FFT jusqu'à 5 512 Hz (couvre toute la plage audio musicale utile).
Commandes MQTT
- raspy2dmd audiovis|start - Démarre le visualiseur avec les paramètres sauvegardés
- raspy2dmd audiovis|start|[mode]|[gain] - Démarre avec mode et gain spécifiques
- raspy2dmd audiovis|stop - Arrête le visualiseur
- raspy2dmd audiovis|mode|[mode] - Change le mode visuel à chaud
- raspy2dmd audiovis|gain|[valeur] - Modifie le gain à chaud (0–100)
- raspy2dmd audiovis|device|[index] - Change le périphérique audio à chaud
- audiovis|start - Démarre avec les paramètres configurés
- audiovis|start|eq_8|60 - Démarre en mode égaliseur 8 bandes, gain 60
- audiovis|mode|waveform - Passe en mode waveform sans redémarrer
- audiovis|gain|80 - Augmente le gain à 80
- audiovis|stop - Arrête la visualisation
Modes visuels
| Identifiant | Nom | Description |
|---|---|---|
db_meter |
📊 Décibelmètre | Barre horizontale unique 0–100 dB, dégradé vert→rouge, avec graduations et valeur dB affichée |
vu_meter |
↔️ VU-mètre | Deux barres symétriques gauche/droite (stéréo ou mono miroir), avec indicateurs de crête à décroissance exponentielle |
eq_8 |
🎛️ Égaliseur 8 bandes | 8 colonnes verticales de 16px de large, couvrant 20 Hz à 5 kHz, avec couleurs spécifiques par bande de fréquence et indicateurs de crête |
eq_32 |
🎚️ Égaliseur 32 bandes | 32 colonnes verticales de 4px de large, espacées logarithmiquement de 20 Hz à 5 kHz, dégradé violet→blanc, avec indicateurs de crête |
waveform |
〰️ Waveform | Forme d'onde défilante horizontalement, symétrique (haut et bas), avec couleurs arc-en-ciel selon l'amplitude |
Paramètre Gain
Le gain amplifie le signal audio avant analyse FFT. Il permet d'adapter la sensibilité selon le volume ambiant et la distance au microphone.
| Valeur | Multiplicateur | Usage recommandé |
|---|---|---|
| 0 | 25× | Environnement très bruyant |
| 50 | 75× | Volume ambiant normal |
| 100 | 125× | Microphone éloigné / son faible |
Mode exclusif
Quand le mode exclusif est activé dans les paramètres, le visualiseur audio filtre toutes les trames MQTT reçues pendant son fonctionnement, à l'exception de :
- rebt| — Redémarrage du système
- shutdwn| — Extinction du système
- audiovis|stop — Arrêt du visualiseur
- Actions du serveur de boutons GPIO (ButtonsServer)
- Actions du serveur Bluetooth (BluetoothServer)
À l'arrêt du visualiseur, le fonctionnement normal reprend automatiquement.
Intégration dans l'Attract Mode
Le visualiseur audio peut être inclus dans la rotation de l'attract mode. La durée d'affichage (en secondes) est configurable depuis l'interface web /audiovis.
- Durée
0(défaut) : non inclus dans l'attract mode - Durée
Nsecondes : le visualiseur est affiché pendant N secondes lors de chaque passage dans le carrousel
Configuration INI — Section [AudioVisualizer]
| Paramètre | Valeurs | Description |
|---|---|---|
mode | db_meter, vu_meter, eq_8, eq_32, waveform | Mode visuel par défaut |
gain | 0–100 | Gain microphone (25×–125×) |
device | auto ou index numérique | Périphérique audio (auto = premier micro USB détecté) |
noise_gate | 0–100 | Filtre de bruit de fond — en dessous du seuil, le signal est considéré comme silence (0 = désactivé) |
mirror | 0 ou 1 | Barres EQ symétriques depuis le centre (modes eq_8, eq_32, eq_full uniquement) |
exclusive_mode | 0 ou 1 | Filtre les autres trames MQTT pendant la visualisation |
attract_duration | 0–3600 (secondes) | Durée dans l'attract mode (0 = désactivé) |
Interface Web
Une page de configuration dédiée est accessible depuis la section Contenu et médias de l'accueil :
- Démarrer / Arrêter le visualiseur directement depuis le navigateur
- Sélection du mode visuel par boutons avec prévisualisation des icônes
- Curseur de gain avec envoi à chaud si le visualiseur est actif
- Sélection du périphérique avec bouton Actualiser pour détecter les nouveaux micros branchés
- Options avancées : mode exclusif, durée attract mode
- Sauvegarde persistante dans le fichier de configuration
🔧 Matériel - Horloge RTC
Description
Raspy2DMD supporte les modules RTC (DS1307, DS3231, PCF8523, etc.) pour maintenir l'heure même sans connexion réseau. Le module RTC se connecte via I2C. La détection se fait automatiquement.
🔌 Connectivité - USB Gadget Mode
Description
Raspy2DMD supporte le mode USB Gadget (OTG) qui transforme le Raspberry Pi en carte réseau Ethernet USB. En branchant un simple câble USB entre le Pi et un ordinateur, une connexion réseau directe s'établit automatiquement, permettant d'accéder au site web interne sans WiFi ni Ethernet.
L'adresse IP du Pi sur cette interface est 10.0.0.1. L'ordinateur connecté reçoit automatiquement
une adresse IP via DHCP (plage 10.0.0.2 à 10.0.0.10).
Modèles compatibles
| Modèle | Support OTG | Port utilisé |
|---|---|---|
| Pi Zero / Zero W / Zero WH | ✅ Oui | Micro-USB OTG |
| Pi Zero 2 W | ✅ Oui | Micro-USB OTG |
| Pi 3A / 3A+ | ❌ Non | - |
| Pi 3B / 3B+ | ❌ Non | - |
| Pi 4B | ✅ Oui | USB-C |
| Pi 5 | ✅ Oui | USB-C |
Fonctionnement
- Activation automatique : configuré à l'installation sur les modèles compatibles
- Détection par udev : quand le câble USB est branché, l'interface
usb0apparaît et une règle udev déclenche l'affichage de l'IP sur le DMD - DHCP automatique : le Pi fournit une adresse IP au PC hôte via dnsmasq
- mDNS : Avahi annonce automatiquement
raspy2dmd.localsur l'interface USB
Accès au site web via USB
http://10.0.0.1/
// Par mDNS (nom d'hôte)
http://raspy2dmd.local/
Notification sur le DMD
Ces notifications sont envoyées via MQTT.
Affichage dans le bandeau web
Le bandeau supérieur du site web affiche désormais les adresses IP par type d'interface :
Notes
- ⚠️ Redémarrage : la première activation nécessite un redémarrage du Pi (modification de config.txt et cmdline.txt)
- Windows : nécessite le driver RNDIS (installé par défaut sur Windows 10/11)
- macOS / Linux : reconnaissance automatique du gadget USB
- Partage Internet : le PC hôte doit partager sa connexion Internet si le Pi en a besoin
📊 Tableau récapitulatif
Actions SANS arrêt automatique de l'attract mode (continuent en parallèle)
| Commande | Description |
|---|---|
rebt |
Redémarrer le système |
shutdwn |
Éteindre le système |
excludeFolder |
Exclure un dossier |
excludeFile |
Exclure un fichier |
conf |
Modifier configuration |
rldconf |
Recharger configuration |
receipconf |
Envoyer config |
owmzc |
Config OpenWeatherMap |
fllcn |
Config localisation |
sound |
Jouer un son |
Actions AVEC arrêt automatique de l'attract mode (interrompent l'affichage)
| Catégorie | Commandes |
|---|---|
| Texte | msg, msgXX, msgmove, msgmovebcl, msgcarrou, msgcolor, msgimg, msgcst, msgfull, score |
| Images & GIFs | img, gif, gifPath, gifText, rand, demo |
| Horloge | time, waiter |
| Météo | meteo, meteoPrevi, edfJoursTempo, perf |
| Effets | effet, soundeffet |
| Tests | testFont, testPattern |
🎯 Comportements spéciaux
Gestion des erreurs
Images non trouvées
Exemple : img|WELK.OME
- Log local seulement
- PAS d'erreur MQTT
- Permet conditions logiques
GIFs corrompus
- Log l'erreur
- Erreur MQTT envoyée
- Continue le traitement
- Fallback automatique (ENHANCED)
Fichiers manquants avec fallback (ENHANCED)
- Essaie fallback automatiquement
- Log le changement
- Continue normalement
Recherche aléatoire (rand|gif)
Mode ENHANCED : Pool sans répétition
- Chaque GIF affiché 1 fois avant répétition
- Ignore GIFs corrompus automatiquement
- Statistiques en temps réel
Mode HISTORIQUE : Aléatoire standard
- Peut répéter le même GIF
- Gère les erreurs mais continue
Extensions multiples (ENHANCED)
# Essaie plusieurs formats img|logo|0||.png,.PNG,.jpg,.jpeg
- Essaie demo.gif puis demo.GIF
- Supporte différentes casses
- Premier trouvé est utilisé
📝 Notes importantes
Formats de couleurs
Format : R;G;BValeurs : 0-255 pour chaque composante
Exemple : 255;0;0 = rouge pur
Chemins des principaux fichiers
Racine : /Medias/Gifs : /Medias/Gifs/
Images : /Medias/Images/
Fonts : /Medias/Fonts/
Patterns : /Medias/Patterns/
Sounds : /Medias/Sounds/
Textes : /Medias/Textes/
Nom des fichiers
Si seulement le nom du fichier est indiqué, la recherche s'effectuera uniquement dans les chemins de fichiers indiqués ci-dessus.Si un nom de dossier est précisé en plus du nom du fichier, la recherche s'effectuera dans ce dossier.
Directions (sens)
left : Défilement vers la gaucheright : Défilement vers la droite
up : Défilement vers le haut
down : Défilement vers le bas
L'arrêt temporaire de l'attract mode
Se produit lorsqu'une trame est reçue (si l'attract mode est activé, c'est-à-dire configuré sur une valeur autre que 0)Exceptions : conf, sound, commandes système
Réponses MQTT
Canal : raspy2dmd/responseFormat succès : SUCCESS|action|message
Format erreur : ERROR|action|message
Appliquer une configuration déjà existante
Après avoir réalisé la gravure de l'image sur votre carte microSD, vous pouvez déposer à la racine de celle-ci votre fichierRaspy2DMD.cfg.Il sera automatiquement copié dans le répertoire
/Medias lors du premier démarrage.Utilisation de l'espace complet de la carte microSD
Lors du premier démarrage, Raspy2DMD récupèrera l'espace complet disponible sur la carte microSD.Test RGB pour les panneaux DMD
Il est possible d'afficher une mire RGB pour tester l'affichage de vos panneaux (cas des panneaux GRB, etc.). Il suffit de déposer un fichier rgb (sans aucune extension) à la racine de la carte SD.