MacroPad
Pavé de 9 touches programmables basé sur un Raspberry Pi Pico (RP2040) sous CircuitPython, reconnu en USB comme un clavier sans driver, avec un logiciel PC pour reconfigurer chaque touche.

Projet réalisé dans le cadre du chef-d’œuvre Bac Pro CIEL, au LPP Le Marais Sainte-Thérèse.
Le pavé se branche en USB et est reconnu comme un clavier (raccourcis et touches média), sans installation de driver. Un logiciel PC (Python / Tkinter) permet de changer l’action de chaque touche sans reprogrammer le Pico : les nouvelles valeurs sont envoyées en série et stockées sur la carte.
Structure du dépôt
MACROPAD/
├── firmware/ Code CircuitPython à copier sur le Pico (boot.py, code.py)
├── configurator/ Logiciel PC de configuration (Python / Tkinter)
├── hardware/
│ ├── schematic/ Schéma électronique (PDF, PNG, source EasyEDA)
│ ├── pcb/ PCB : source Fritzing, Gerber pour la fabrication, PDF
│ ├── case/ Boîtier 3D (Fusion 360 + STL pour l'impression)
│ └── libraries/ Composants Fritzing nécessaires pour ouvrir le PCB
└── docs/ Images du README
Firmware
Code CircuitPython du dossier firmware/, à copier sur le Raspberry Pi Pico.
code.py: lit les 9 touches, envoie les raccourcis clavier/média en USB HID, et reçoit la configuration du logiciel PC par le port série.boot.py: cache le lecteurCIRCUITPYau démarrage, pour éviter qu’il soit modifié par erreur une fois le pavé en service.
# Installation
# 1. Installer CircuitPython sur le Pico (.uf2 depuis circuitpython.org)
# 2. Copier adafruit_hid (Adafruit CircuitPython Library Bundle) dans CIRCUITPY/lib/
# 3. Copier firmware/code.py puis firmware/boot.py à la racine de CIRCUITPY
# 4. Débrancher / rebrancher le Pico (boot.py ne s'exécute qu'au démarrage)
Configurateur PC
Logiciel Python / Tkinter du dossier configurator/, pour lire et modifier
l’action de chaque touche sans reflasher le firmware. Le port série du Pico
est détecté et listé automatiquement via pyserial. L’interface tient en
trois zones : un panneau de connexion série, un panneau de configuration des
9 touches (SW1 à SW9, avec défilement) et une barre d’actions principales.
cd configurator
pip install -r requirements.txt
python main.py
- Brancher le MacroPad, choisir son port COM puis cliquer sur Connecter : la configuration actuelle du Pico est chargée automatiquement.
- Modifier les touches. En type
keyboard, écrire les touches séparées par+(ex.CONTROL+SHIFT+ESCAPE) ; en typemedia, écrire l’action (ex.PLAY_PAUSE). - Cliquer sur Envoyer au Pico.
Les boutons Sauvegarder / Charger fichier utilisent macropad_config.json
dans le dossier courant. Un exécutable Windows autonome peut aussi être généré
avec pyinstaller main.spec, pour utiliser le configurateur sans Python installé.
Protocole série
La configuration est stockée dans /config.json sur le Pico, au format :
{"sw1": {"type": "keyboard", "keys": ["CONTROL", "ALT", "DELETE"]},
"sw9": {"type": "media", "action": "PLAY_PAUSE"}}
| Commande envoyée | Réponse du Pico |
|---|---|
GET_CONFIG | CONFIG_DATA:{...} |
CONFIG:{...} | OK ou ERROR |
Configuration par défaut des touches
| Touche | GPIO | Action |
|---|---|---|
| SW1 | GP28 | Ctrl + Alt + Suppr |
| SW2 | GP27 | Capture d’écran (Win + Shift + S) |
| SW3 | GP26 | Gestionnaire des tâches (Ctrl + Shift + Échap) |
| SW4 | GP22 | Copier (Ctrl + C) |
| SW5 | GP21 | Coller (Ctrl + V) |
| SW6 | GP20 | Fermer l’onglet (Ctrl + W) |
| SW7 | GP19 | Piste précédente |
| SW8 | GP18 | Piste suivante |
| SW9 | GP17 | Lecture / Pause |
Matériel
Chaque switch relie son GPIO au 3V3 ; le firmware active la résistance de pull-down interne, donc aucun composant supplémentaire n’est nécessaire sur les entrées.
- Schéma : conçu sous EasyEDA, exporté en PDF.
- PCB : conçu avec Fritzing 0.9.9. Cycle complet jusqu’à la carte finale :
conception du schéma, routage, commande auprès d’un fabricant, réception,
puis soudure des composants (switchs mécaniques et Raspberry Pi Pico).
Fichiers de fabrication Gerber fournis pour la production, en plus du
fichier source
.fzz. - Boîtier : modélisé sous Fusion 360, exporté en STL pour l’impression 3D.

