MiCont Studio (MIcro CONTroleur Studio) est un environnement de développement intégré (IDE) léger, écrit en Python, conçu pour le développement sur micro-contrôleurs (ESP32, STM32, Arduino, etc.). Sa force réside dans sa flexibilité totale : vous pouvez configurer vos propres boutons d’action via un simple fichier JSON ou étendre ses fonctionnalités avec des scripts Python.

🎯 1. Objectifs du Projet
L’objectif principal de MiCont Studio est de fournir une alternative légère aux IDE lourds (comme VS Code ou Arduino IDE) tout en restant agnostique au matériel.
- Universalité : Fonctionne avec n’importe quel contrôleur supportant une communication série et des outils en ligne de commande (CLI).
- Personnalisation : Permettre à l’utilisateur de définir son propre workflow (Flash, Reset, Clean, Monitor) sans modifier le code source de l’IDE.
- Simplicité de déploiement : Un script principal unique et un fichier de configuration.
- Performance : Interface réactive grâce à l’utilisation de threads séparés pour la gestion du port série.
⚙️ 2. Architecture et Dépendances
Stack Technique
- Interface Graphique (GUI) :
customtkinter(une surcouche moderne de Tkinter). - Communication Série :
pyserial. - Coloration Syntaxique :
pygments. - Gestion d’État : Fichiers JSON (
micont_config.jsonpour la config,micont_studio_state.jsonpour l’état de l’IDE).
Dépendances Python
Le projet nécessite Python 3.8+.
Bash
pip install customtkinter pygments pyserial
Note Linux : L’IDE inclut un correctif pour
libX11afin d’éviter les crashs de threads courants sur certaines distributions Linux.
🔧 3. Installation et Lancement
- Cloner/Copier les fichiers dans un dossier de projet.
- Créer un environnement virtuel (recommandé) :Bash
python -m venv venv source venv/bin/activate # Linux/Mac venv\Scripts\activate # Windows - Installer les dépendances mentionnées ci-dessus.
- Lancer l’application :Bash
python micont_studio.py
🛠️ 4. Configuration Dynamique (JSON)
Le fichier micont_config.json définit l’identité de l’IDE pour votre projet spécifique.
Structure du fichier
JSON
{
"device_name": "ESP32 DevKit",
"default_baud": 115200,
"custom_buttons": [
{
"label": "Flash",
"color": "green",
"command": "esptool.py --port {port} write_flash 0x1000 {file}"
}
]
}
Variables de substitution
Lors de l’exécution d’une commande shell, l’IDE remplace dynamiquement ces balises : | Balise | Description | | :— | :— | | {port} | Le port série sélectionné (ex: COM3 ou /dev/ttyUSB0). | | {file} | Chemin complet du fichier actif dans l’éditeur. | | {filename} | Nom du fichier actif uniquement (sans le dossier). |
🐍 5. Extension via Actions Python Internes
Au lieu d’une commande shell, vous pouvez appeler une fonction Python définie dans un module externe (ex: helper.py).
Configuration JSON :
JSON
{
"label": "Auto-Test",
"color": "indigo",
"python": "helper.test_routine"
}
Script Python (helper.py) : L’IDE passe un dictionnaire ctx à votre fonction :
Python
def test_routine(ctx):
# ctx['app'] : Accès à l'instance MicontStudio
# ctx['port'] : Port sélectionné
# ctx['file'] : Fichier actif
# ctx['log'] : Fonction pour écrire dans la console de l'IDE
ctx['log']("Démarrage du test...\n")
🖱️ 6. Mode Opératoire (Utilisation)
- Gestion des fichiers : Utilisez « New Tab » ou « Open » pour charger vos scripts (Python, C++, .ino).
- Coloration syntaxique : L’IDE détecte automatiquement le langage selon l’extension du fichier.
- Moniteur Série : La console en bas affiche les flux de données entrants.
- Note importante : Le moniteur se met en pause automatiquement lors de l’exécution d’une action pour libérer le port série.
- Sauvegarde : Utilisez le bouton « Save » ou le raccourci
Ctrl + S. - Persistance : À la fermeture, l’IDE mémorise la taille de la fenêtre, le dernier port utilisé et les onglets ouverts dans
micont_studio_state.json.
🛠️ 7. Guide de Maintenance
Structure du Code (micont_studio.py)
CodeEditor(Classe) : Gère le widget de texte, les numéros de ligne et la coloration viapygments. Elle utilise unafter()récursif pour redessiner les numéros de ligne.MicontStudio(Classe principale) :serial_loop: S’exécute dans un thread séparé pour lire le port série sans bloquer l’interface.serial_queue: File d’attente sécurisée pour transférer les messages du thread série vers le thread principal (UI).run_custom_action: Lance les commandes (Shell ou Python) dans un nouveau thread pour éviter de « geler » l’IDE pendant un téléversement long.
Points de vigilance
- Accès Port Série : Sur Linux, l’utilisateur doit appartenir au groupe
dialout. - Thread Safety : Toute modification des widgets UI doit se faire via le thread principal. Utilisez
self.serial_queue.put()pour envoyer des logs depuis un thread secondaire.
🚀 8. Améliorations Possibles
Pour les futures versions de MiCont Studio, voici des pistes de développement :
- Explorateur de fichiers : Ajouter un panneau latéral à gauche pour naviguer dans l’arborescence du projet.
- Gestion des Bauds : Ajouter un menu déroulant pour changer la vitesse du port série dynamiquement (actuellement fixée par le JSON).
- Auto-complétion : Intégrer une aide à la saisie basique pour Python et C++.
- Thèmes : Permettre de basculer entre le mode « Light » et « Dark » via la configuration.
- Terminal Interactif : Permettre d’envoyer des commandes (Input) vers le port série depuis la console.
🚀 Example : Gestionnaire Arduino Minimaliste
MiCont Studio est un environnement de développement (IDE) léger et modulaire. Cette implémentation spécifique transforme l’IDE en un outil de gestion pour Arduino, utilisant arduino-cli comme moteur de compilation et de téléversement.
🎯 Arduino 1. Objectifs du Projet
Le but de cette configuration est de fournir une interface graphique (GUI) moderne et épurée pour remplacer l’IDE Arduino classique tout en conservant sa puissance.
- Rapidité : Une interface réactive basée sur Python et CustomTkinter.
- Modularité : Utilisation de scripts Python (
helper.py,lib_manager.py) pour étendre les capacités de l’IDE sans alourdir le noyau. - Transparence : Un terminal intégré qui affiche en temps réel les retours de compilation et les logs série du micro-contrôleur.
⚙️ Arduino 2. Architecture et Dépendances
Composants Logiciels
- Moteur de l’IDE :
micont_studio.py(Gère l’interface, les onglets et le port série). - Interface Arduino :
helper.py(Pilote l’outilarduino-cli). - Gestionnaire de Bibliothèques :
lib_manager.py(Interface de recherche et d’installation de librairies).
Dépendances Requises
- Python 3.8+.
- Bibliothèques Python :Bash
pip install customtkinter pygments pyserial - Binaire Externe : Vous devez placer le binaire
arduino-clidans le même dossier quemicont_studio.py.
🛠️ Arduino 3. Configuration des Boutons (micont_config.json)
Le fichier de configuration lie les éléments visuels de l’interface aux fonctions logiques.
| Bouton | Couleur | Action Python | Description |
| VÉRIFIER | #00979D | helper.arduino_verify | Compile le code sans l’envoyer. |
| TÉLÉVERSER | #E47128 | helper.arduino_upload | Compile et envoie vers un Arduino Uno. |
| LIBS | #2c3e50 | lib_manager.open_manager | Ouvre le gestionnaire de bibliothèques. |
Exporter vers Sheets
🖱️ Arduino 4. Mode Opératoire
Développement et Compilation
- Édition : Ouvrez ou créez un fichier
.ino(ex:test1.ino). La coloration syntaxique C++ s’active automatiquement. - Vérification : Cliquez sur VÉRIFIER. L’IDE crée un dossier temporaire, y copie votre code et lance la compilation via
arduino-cli. - Téléversement : Sélectionnez le port série (ex:
/dev/ttyUSB0) et cliquez sur TÉLÉVERSER. Le moniteur série s’arrête brièvement pour libérer le port, puis reprend après l’envoi.
Gestion des Bibliothèques
- Cliquez sur LIBS pour ouvrir une fenêtre secondaire.
- Recherchez une bibliothèque par mots-clés. Le gestionnaire affiche les versions installées et propose des mises à jour si nécessaire.
- L’installation se fait en arrière-plan via un thread séparé pour ne pas bloquer l’IDE.
🔧 Arduino 5. Guide de Maintenance
Pour faciliter l’évolution du projet, voici les points clés :
- Ajout d’une carte : Pour supporter une nouvelle carte (ex: ESP32), modifiez
helper.pyen ajoutant une fonction avec le bonFQBN(Fully Qualified Board Name) et mettez à jourmicont_config.json. - Structure des dossiers :
arduino-cliimpose que chaque fichier.inosoit dans un dossier portant le même nom. Le scripthelper.pygère cela automatiquement en créant un dossier temporaire viatempfile. - Logs Série : Si les données reçues sont illisibles, vérifiez que le
default_bauddansmicont_config.jsoncorrespond à celui défini dans votreSerial.begin().
🚀 Arduino 6. Améliorations Possibles
- Sélecteur de Carte (FQBN) : Ajouter un menu déroulant dans l’interface pour choisir entre Uno, Nano ou ESP32 sans modifier le code.
- Auto-installation de CLI : Ajouter un script pour télécharger automatiquement le binaire
arduino-clis’il est absent. - Console Interactive : Permettre d’envoyer du texte au micro-contrôleur depuis le terminal de logs.
- Gestion des Cores : Étendre
lib_manager.pypour installer les « cores » (plateformes matérielles) manquants.