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.json pour la config, micont_studio_state.json pour 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 libX11 afin d’éviter les crashs de threads courants sur certaines distributions Linux.


🔧 3. Installation et Lancement

  1. Cloner/Copier les fichiers dans un dossier de projet.
  2. Créer un environnement virtuel (recommandé) :Bashpython -m venv venv source venv/bin/activate # Linux/Mac venv\Scripts\activate # Windows
  3. Installer les dépendances mentionnées ci-dessus.
  4. Lancer l’application :Bashpython 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)

  1. Gestion des fichiers : Utilisez « New Tab » ou « Open » pour charger vos scripts (Python, C++, .ino).
  2. Coloration syntaxique : L’IDE détecte automatiquement le langage selon l’extension du fichier.
  3. 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.
  4. Sauvegarde : Utilisez le bouton « Save » ou le raccourci Ctrl + S.
  5. 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 via pygments. Elle utilise un after() 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 :

  1. Explorateur de fichiers : Ajouter un panneau latéral à gauche pour naviguer dans l’arborescence du projet.
  2. Gestion des Bauds : Ajouter un menu déroulant pour changer la vitesse du port série dynamiquement (actuellement fixée par le JSON).
  3. Auto-complétion : Intégrer une aide à la saisie basique pour Python et C++.
  4. Thèmes : Permettre de basculer entre le mode « Light » et « Dark » via la configuration.
  5. 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’outil arduino-cli).
  • Gestionnaire de Bibliothèques : lib_manager.py (Interface de recherche et d’installation de librairies).

Dépendances Requises

  1. Python 3.8+.
  2. Bibliothèques Python :Bashpip install customtkinter pygments pyserial
  3. Binaire Externe : Vous devez placer le binaire arduino-cli dans le même dossier que micont_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.

BoutonCouleurAction PythonDescription
VÉRIFIER#00979Dhelper.arduino_verifyCompile le code sans l’envoyer.
TÉLÉVERSER#E47128helper.arduino_uploadCompile et envoie vers un Arduino Uno.
LIBS#2c3e50lib_manager.open_managerOuvre le gestionnaire de bibliothèques.

Exporter vers Sheets


🖱️ Arduino 4. Mode Opératoire

Développement et Compilation

  1. Édition : Ouvrez ou créez un fichier .ino (ex: test1.ino). La coloration syntaxique C++ s’active automatiquement.
  2. Vérification : Cliquez sur VÉRIFIER. L’IDE crée un dossier temporaire, y copie votre code et lance la compilation via arduino-cli.
  3. 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.py en ajoutant une fonction avec le bon FQBN (Fully Qualified Board Name) et mettez à jour micont_config.json.
  • Structure des dossiers : arduino-cli impose que chaque fichier .ino soit dans un dossier portant le même nom. Le script helper.py gère cela automatiquement en créant un dossier temporaire via tempfile.
  • Logs Série : Si les données reçues sont illisibles, vérifiez que le default_baud dans micont_config.json correspond à celui défini dans votre Serial.begin().

🚀 Arduino 6. Améliorations Possibles

  1. Sélecteur de Carte (FQBN) : Ajouter un menu déroulant dans l’interface pour choisir entre Uno, Nano ou ESP32 sans modifier le code.
  2. Auto-installation de CLI : Ajouter un script pour télécharger automatiquement le binaire arduino-cli s’il est absent.
  3. Console Interactive : Permettre d’envoyer du texte au micro-contrôleur depuis le terminal de logs.
  4. Gestion des Cores : Étendre lib_manager.py pour installer les « cores » (plateformes matérielles) manquants.

Source: Arduino Micont Studio