Aller au contenu principal
Mathyou ANDRE
CircuitPythonRaspberry Pi Pico (RP2040)Python / TkinterpyserialFritzingFusion 360

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.

Code source

MacroPad assemblé, pavé de 9 touches avec son boîtier imprimé en 3D

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 lecteur CIRCUITPY au 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
  1. Brancher le MacroPad, choisir son port COM puis cliquer sur Connecter : la configuration actuelle du Pico est chargée automatiquement.
  2. Modifier les touches. En type keyboard, écrire les touches séparées par + (ex. CONTROL+SHIFT+ESCAPE) ; en type media, écrire l’action (ex. PLAY_PAUSE).
  3. 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éeRéponse du Pico
GET_CONFIGCONFIG_DATA:{...}
CONFIG:{...}OK ou ERROR

Configuration par défaut des touches

ToucheGPIOAction
SW1GP28Ctrl + Alt + Suppr
SW2GP27Capture d’écran (Win + Shift + S)
SW3GP26Gestionnaire des tâches (Ctrl + Shift + Échap)
SW4GP22Copier (Ctrl + C)
SW5GP21Coller (Ctrl + V)
SW6GP20Fermer l’onglet (Ctrl + W)
SW7GP19Piste précédente
SW8GP18Piste suivante
SW9GP17Lecture / 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.

Routage du PCB du MacroPad

Assemblage du PCB : soudure des switchs mécaniques et du Raspberry Pi Pico