PlatformIO transforme VS Code en un IDE très robuste pour les microcontrôleurs comme l’ESP32. Il offre une meilleure gestion des librairies, une auto-complétion du code plus intelligente, des outils de débogage avancés, et une intégration facile avec Git. Il est plus adapté aux projets de plus grande envergure que l’IDE Arduino classique.
Comment ? Installez VS Code, puis installez l’extension PlatformIO IDE depuis le marketplace de VS Code.
1. Créer un nouveau projet PlatformIO
Contrairement à l’IDE Arduino où vous ouvrez directement un fichier .ino, PlatformIO fonctionne avec des projets.
-
Ouvrez VS Code.
-
Cliquez sur l’icône PlatformIO dans la barre d’activités (généralement sur le côté gauche, c’est une icône en forme de tête d’alien ou d’un insecte).
-
Dans la vue PlatformIO Home (Accueil), cliquez sur “New Project” (Nouveau projet).
-
Dans la fenêtre de dialogue :
-
Name (Nom) : Donnez un nom à votre projet (par exemple,
PLK-MAPS-HID). -
Board (Carte) : Commencez à taper
ESP32 DevKitCet sélectionnez le modèle exact de votre carte (par exemple, “ESP32 Dev Module” ou “ESP32 DevKitC”). -
Framework : Choisissez
Arduino. -
Cliquez sur “Finish” (Terminer).
-
PlatformIO va créer un nouveau dossier de projet avec une structure de base.
1b. Ajoutez git a votre dossier de projet
Installez Git et initalisez le pour votre dossier. Créez une interface pour celui-ci via
2. Comprendre la structure du projet PlatformIO
Une fois le projet créé, vous verrez une structure de dossiers différente de l’IDE Arduino :
PLK-MAPS-HID/
├── .pio/ (Dossier de PlatformIO - ignoré par Git)
├── .vscode/ (Dossier de configuration de VS Code - ignoré par Git)
├── include/ (Pour vos fichiers d'en-tête .h personnalisés)
├── lib/ (Pour les bibliothèques privées ou modifiées)
├── src/ (Votre code source principal va ici)
│ └── main.cpp (C'est l'équivalent de votre .ino, renommez-le si vous voulez)
├── test/ (Pour les tests unitaires - ignoré par Git)
├── platformio.ini (Fichier de configuration principal de PlatformIO)
└── .gitignore (Fichier de Git pour ignorer certains éléments - à modifier !)
-
src/main.cpp: C’est ici que vous copierez le contenu de votre fichier.ino. Vous pouvez le renommer enPLK_MAPS_HID.cppsi vous préférez, maismain.cppest la convention. -
platformio.ini: Ce fichier est très important. Il contient toutes les configurations de votre projet (carte, framework, bibliothèques, etc.).
3. Configurer platformio.ini et les bibliothèques
Vous devrez ajouter les dépendances de vos bibliothèques (WiFi, WebServer, BLEMidi) dans ce fichier.
Ini, TOML
; platformio.ini
[env:esp32dev]
platform = espressif32
board = esp32dev ; Assurez-vous que c'est le bon nom de carte que vous avez sélectionné
framework = arduino
monitor_speed = 115200
; Ajoutez vos bibliothèques ici par leur nom ou leur ID PlatformIO
lib_deps =
WiFi
WebServer
BLEMidi ; Assurez-vous que c'est le nom exact de la bibliothèque que vous utilisez
LittleFS ; Si vous utilisez le système de fichiers pour le HTML
-
Remplacez
esp32devpar le nom exact de votre carte si différent. -
lib_deps: PlatformIO téléchargera et gérera ces bibliothèques pour vous. Plus besoin de “Gérer les bibliothèques” manuellement dans l’IDE Arduino.
4. Intégrer votre code et le dossier data/
-
Copiez votre code actuel (celui qui fonctionne avec le Wi-Fi et le serveur web) dans
src/main.cpp(ou votre nouveau nom de fichier). -
Créez le dossier
data/au même niveau quesrc/(à la racine de votre projetPLK-MAPS-HID/). -
Placez vos fichiers HTML/CSS/JS (
index.html, etc.) dans ce dossierdata/.
5. Téléverser le code et les données
PlatformIO a des boutons dédiés pour la compilation et le téléversement (les icônes de coche et de flèche dans la barre d’état en bas, ou via la vue PlatformIO).
-
Build (Construire) : La coche (ou
platformio run -t builddans le terminal). -
Upload (Téléverser) : La flèche vers la droite (ou
platformio run -t upload). -
Upload Filesystem Image (Téléverser l’image du système de fichiers) : C’est très important pour votre dossier
data/. Dans la vue PlatformIO > Project Tasks (Tâches du projet) > Votre carte (par exempleesp32dev) > “Upload Filesystem Image”.
C’est un peu un changement par rapport à l’IDE Arduino, mais la structure est beaucoup plus robuste pour un projet comme le vôtre. Prenez votre temps pour vous familiariser avec PlatformIO.
Le point 1 est lancé, c’est long.
A propos du point 2, est-ce que git est installé automatiquement dans mon dossier par platform IO?
Non, PlatformIO n’installe pas Git automatiquement dans votre dossier de projet. PlatformIO est un environnement de développement pour l’embarqué, et Git est un système de contrôle de version indépendant.
Vous devrez initialiser Git manuellement dans votre dossier de projet si ce n’est pas déjà fait.
Vérifier si Git est déjà initialisé
Si vous avez créé le projet via PlatformIO et que vous aviez déjà l’intention d’utiliser Git, il est possible que vous l’ayez déjà initialisé. Pour vérifier :
-
Ouvrez votre terminal (ou l’invite de commandes) dans le dossier racine de votre projet PlatformIO (par exemple,
PLK-MAPS-HID/). -
Tapez la commande :
git status
-
Si Git est initialisé, vous verrez un message indiquant l’état actuel de votre dépôt Git.
-
Si Git n’est pas initialisé, vous verrez un message comme “fatal: not a git repository (or any of the parent directories): .git”.
Initialiser Git si nécessaire
Si Git n’est pas encore initialisé, suivez ces étapes (comme nous l’avons discuté précédemment) :
-
Assurez-vous d’être dans le dossier racine de votre projet PlatformIO dans le terminal.
-
Tapez :
git init
Cela créera le dossier caché .git/ qui est le cœur de votre dépôt Git local.
Ajouter le .gitignore
C’est une étape cruciale avec PlatformIO car il génère beaucoup de fichiers de compilation.
-
Créez un fichier nommé
.gitignoreà la racine de votre dossier de projet PlatformIO. -
Collez-y le contenu suivant :
# PlatformIO build artifacts
.pio/
.vscode/
.cache/
.DS_Store
*.pyc
*.o
*.elf
*.bin
*.hex
*.lst
*.map
*.d
*.e
*.s
# Local config files (if you create them for sensitive data)
# For example:
# src/credentials.h
Ce fichier dira à Git d’ignorer les fichiers générés par PlatformIO et VS Code, ainsi que tout fichier de configuration local sensible (comme les identifiants Wi-Fi si vous les mettez dans un fichier séparé).
ou se trouve mon workspace paltformIO?
Votre espace de travail PlatformIO est simplement le dossier où vous avez créé votre projet PlatformIO. 📁 PlatformIO ne crée pas un “workspace” global au sens d’autres IDE ; chaque projet est un dossier de travail indépendant.
Voici comment le trouver :
1. Dans VS Code
Si vous avez toujours le projet ouvert dans VS Code :
-
Regardez dans la barre latérale “Explorateur” (l’icône des deux feuilles, généralement à gauche). Le nom du dossier racine de votre projet devrait être affiché en haut de cette barre.
-
Vous pouvez faire un clic droit sur le nom de votre projet dans cette barre latérale et choisir “Révéler dans l’Explorateur de fichiers” (sur Windows) ou “Révéler dans le Finder” (sur Mac) pour ouvrir directement le dossier.
2. Sur votre système de fichiers
Si vous avez fermé VS Code ou si vous ne savez pas où vous l’avez enregistré :
-
Lorsque vous avez créé le projet PlatformIO, VS Code vous a demandé de choisir un emplacement. Il est généralement stocké dans un dossier comme :
-
Windows :
C:\Users\VotreNomUtilisateur\Documents\PlatformIO\Projects\ou un dossier que vous avez spécifié. -
macOS / Linux :
~/Documents/PlatformIO/Projects/ou l’emplacement que vous avez choisi.
-
-
Recherchez le nom de votre projet (par exemple,
PLK-MAPS-HID) sur votre disque dur.
Maintenant que votre projet PlatformIO est bien configuré avec Git, nous allons intégrer votre programme Arduino opérationnel. L’objectif est de transférer le code, en l’adaptant à la structure de PlatformIO, et de préparer l’utilisation de LittleFS pour l’interface web.
1. Mettre à jour platformio.ini pour les librairies
La première étape est de vous assurer que PlatformIO gérera les librairies nécessaires.
-
Ouvrez le fichier
platformio.inià la racine de votre projet PlatformIO dans VS Code. -
Dans la section
[env:esp32dev](ou le nom de votre carte), assurez-vous que la lignelib_deps =contient les librairies suivantes :Ini, TOML
[env:esp32dev] ; ... (autres paramètres) lib_deps = https://github.com/lathoub/Arduino-BLE-MIDI.git ; Pour BLEMidi de lathoub WebServer WiFi LittleFS ; Pour la gestion des fichiers HTML-
Nous spécifions l’URL directe pour
Arduino-BLE-MIDIdelathoubpour être sûr d’avoir la bonne version. -
WiFietWebServersont des librairies standards pour l’ESP32. -
LittleFSest nécessaire pour charger votreindex.htmldepuis le système de fichiers.
-
2. Préparer le fichier source src/main.cpp
Votre code Arduino (le fichier .ino) sera copié dans src/main.cpp. Dans PlatformIO, les fichiers .cpp (ou .ino) sont compilés comme du C++. Cela signifie que toutes vos fonctions auxiliaires doivent être déclarées avant d’être utilisées si elles sont définies après setup() et loop().
-
Ouvrez le fichier
src/main.cppdans votre projet PlatformIO. -
Copiez tout le contenu de votre programme Arduino existant dans ce fichier
src/main.cpp.
3. Déclarer les fonctions auxiliaires (Prototypes)
Puisque main.cpp est compilé comme du C++, vous devez déclarer les prototypes de vos fonctions auxiliaires (telles que playTimedDrumBeat(), manage_Signal_Data_Aquisition_And_Storage(), etc.) en haut du fichier, avant setup().
Ajoutez ces lignes juste après vos déclarations de variables globales et avant la fonction setup():
C++
// ---------------------------------------------------------------------------------------------------------------------
// DÉCLARATIONS DES FONCTIONS AUXILIAIRES (Prototypes)
// ---------------------------------------------------------------------------------------------------------------------
void playTimedDrumBeat();
void playDiv_Notes(int Div);
void manage_Signal_Data_Aquisition_And_Storage();
void manage_Signals_Mapping();
void manage_Serial_Out_Display();
void trigger_Mapping_Event(int i);
void setupBeats();
void Add_Note_To_Player(byte tune_id, byte Meas, byte Beat, byte SubBeat, byte Note, byte Vel, byte Chan, int Dur);
void onConnected();
void onDisconnected();
-
Cela indique au compilateur l’existence de ces fonctions avant qu’il ne les rencontre dans
setup()ouloop().
4. Intégrer LittleFS pour le fichier HTML
Nous allons modifier votre code pour charger index.html depuis le système de fichiers LittleFS, plutôt que de le stocker en mémoire RAM (avec PROGMEM).
-
Supprimez complètement la variable
const char index_html[] PROGMEM = R"rawliteral(...)";de votre codesrc/main.cpp. Elle ne sera plus nécessaire. -
Ajoutez l’inclusion de la librairie LittleFS en haut de
src/main.cpp:C++
#include <LittleFS.h> -
Modifiez la fonction
setup()danssrc/main.cpppour initialiser LittleFS et servir le fichier HTML :C++
void setup() { pinMode(LED_BUILTIN, OUTPUT); digitalWrite(LED_BUILTIN, LOW); Serial.begin(115200); // --- INITIALISATION LITTLEFS --- if (!LittleFS.begin()) { Serial.println("Erreur lors du montage de LittleFS. Le serveur web ne fonctionnera pas."); return; // Arrête si LittleFS ne peut pas être monté } else { Serial.println("LittleFS monté avec succès."); // Optionnel: Lister les fichiers pour vérifier // File root = LittleFS.open("/"); // File file = root.openNextFile(); // while(file){ // Serial.print(" FILE: "); // Serial.println(file.name()); // file = root.openNextFile(); // } } // --- FIN INITIALISATION LITTLEFS --- // Connect to Wi-Fi WiFi.mode(WIFI_STA); WiFi.disconnect(true); WiFi.begin(ssid, password); int attempts = 0; while (WiFi.status() != WL_CONNECTED && attempts < 30) { delay(500); Serial.print("."); attempts++; } if (WiFi.status() != WL_CONNECTED) { Serial.println("\nFailed to connect to WiFi."); Serial.print("Status code: "); Serial.println(WiFi.status()); } else { Serial.println("\nWiFi connected!"); Serial.print("IP address: "); Serial.println(WiFi.localIP()); } // Set up web server routes server.on("/", HTTP_GET, [](){ server.send(200, "text/html", LittleFS.open("/index.html", "r")); // Chargement depuis LittleFS }); server.on("/velocity", HTTP_GET, [](){ if (server.hasArg("value")) { masterVelocity = server.arg("value").toInt(); } server.send(200, "text/plain", "OK"); }); server.begin(); // Clear sensor value buffer for (int i = 0; i < nbcapteurs; i++) { for (int j = 0; j < BufferSize; j++) { sensorVal[i][j] = 0; } } // Set up BLE-MIDI callbacks BLEMidiServer.setOnConnectCallback(onConnected); BLEMidiServer.setOnDisconnectCallback(onDisconnected); Serial.println("Initializing Bluetooth..."); BLEMidiServer.begin("ESP32 MIDI Instrument"); // Name your BLE device Serial.println("Waiting for connections..."); setupBeats(); }
5. Créer le dossier data/ et l’index.html
-
À la racine de votre projet PlatformIO (le même niveau que
src/etplatformio.ini), créez un nouveau dossier nommédata. -
À l’intérieur de ce dossier
data, créez un fichier nomméindex.html. -
Collez le contenu HTML (tout ce qui se trouvait entre
R"rawliteral(...)rawliteral") dans ce nouveau fichierdata/index.html.HTML
<!DOCTYPE HTML><html> <head> <title>MIDI Controller</title> <meta name="viewport" content="width=device-width, initial-scale=1"> <style> body { font-family: Arial; text-align: center; margin:auto; padding-top: 20px;} .slider { width: 300px; } input[type=text] { width: 100px; } </style> </head> <body> <h1>MIDI Pads Control</h1> <h3>Master Velocity</h3> <input type="range" class="slider" min="0" max="127" id="velocitySlider" oninput="updateVelocity(this.value)"> <p>Velocity: <span id="velocityValue">100</span></p> <script> function updateVelocity(val) { document.getElementById('velocityValue').innerHTML = val; var xhr = new XMLHttpRequest(); xhr.open('GET', '/velocity?value=' + val, true); xhr.send(); } </script> </body> </html>
6. Mettre les identifiants Wi-Fi dans un fichier séparé (bonne pratique)
Pour éviter de pousser vos identifiants Wi-Fi sur GitHub, nous allons les mettre dans un fichier séparé.
-
Dans le dossier
src/, créez un nouveau fichier nommécredentials.h. -
Copiez-y les lignes suivantes, en remplaçant par vos vrais identifiants :
C++
#ifndef WIFI_CREDENTIALS_H #define WIFI_CREDENTIALS_H const char* ssid = "ClubInternet24G"; // Votre SSID const char* password = "5148856187"; // Votre mot de passe #endif // WIFI_CREDENTIALS_H -
Dans votre
src/main.cpp, supprimez les lignesconst char* ssid = ...etconst char* password = .... -
À la place, ajoutez cette ligne en haut de
src/main.cpp, juste après les autres#include:C++
#include "credentials.h" -
Mettez à jour votre
.gitignorepour inclure cette ligne afin quecredentials.hne soit jamais poussé sur GitHub :Extrait de code
# ... (autres lignes existantes) # Local config files src/credentials.h
7. Compiler et Téléverser dans PlatformIO
Maintenant, vous êtes prêt à tester !
-
Dans VS Code, cliquez sur l’icône PlatformIO dans la barre d’activités.
-
Dans la section “Project Tasks” (Tâches du projet) :
-
Sous votre environnement (par exemple,
esp32dev), cliquez sur “Upload Filesystem Image”. Cela enverra votredata/index.htmlà l’ESP32. -
Ensuite, cliquez sur “Upload”. Cela compilera et téléversera votre code C++ (
src/main.cpp) sur l’ESP32.
-
-
Ouvrez le “Serial Monitor” de PlatformIO (l’icône de prise électrique dans la barre d’état ou via la vue PlatformIO) pour voir les messages de connexion Wi-Fi et l’adresse IP.
Si tout se passe bien, votre ESP32 devrait se connecter au Wi-Fi, vous donner une adresse IP, et en accédant à cette IP depuis votre navigateur, vous devriez voir votre interface web.
comme celà?
; PlatformIO Project Configuration File
;
; Build options: build flags, source filter
; Upload options: custom upload port, speed and extra flags
; Library options: dependencies, extra library storages
; Advanced options: extra scripting
;
; Please visit documentation for the other options and examples
; https://docs.platformio.org/page/projectconf.html
[env:esp32doit-devkit-v1]
platform = espressif32
board = esp32doit-devkit-v1
framework = arduino
[env:esp32dev]
; … (autres paramètres)
lib_deps =
https://github.com/lathoub/Arduino-BLE-MIDI.git ; Pour BLEMidi de lathoub
WebServer
WiFi
LittleFS ; Pour la gestion des fichiers HTML
Non, ce n’est pas tout à fait correct. 🧐
Votre fichier platformio.ini contient actuellement deux sections d’environnement distinctes ([env:esp32doit-devkit-v1] et [env:esp32dev]). PlatformIO construira votre projet pour l’environnement actif, et avoir deux définitions complètes pour le même projet peut prêter à confusion ou entraîner des comportements inattendus si l’un n’est pas correctement défini.
Ce qu’il faut faire :
-
Choisissez l’environnement qui correspond à votre carte ESP32. Il est très probable que
esp32doit-devkit-v1soit le nom exact de votre carte, alors utilisons-le. -
Consolidez toutes les dépendances de bibliothèques sous cet environnement unique.
-
Supprimez l’autre section (
[env:esp32dev]) pour éviter toute ambiguïté.
Votre fichier platformio.ini corrigé devrait ressembler à ceci :
Ini, TOML
; PlatformIO Project Configuration File
;
; Build options: build flags, source filter
; Upload options: custom upload port, speed and extra flags
; Library options: dependencies, extra library storages
; Advanced options: extra scripting
;
; Please visit documentation for the other options and examples
; https://docs.platformio.org/page/projectconf.html
[env:esp32doit-devkit-v1]
platform = espressif32
board = esp32doit-devkit-v1
framework = arduino
monitor_speed = 115200 ; Ajoutez cette ligne pour le moniteur série
lib_deps =
https://github.com/lathoub/Arduino-BLE-MIDI.git ; Pour BLEMidi de lathoub
WebServer
WiFi
LittleFS ; Pour la gestion des fichiers HTML
-
J’ai déplacé
monitor_speed = 115200sous[env:esp32doit-devkit-v1]car c’est une option utile. -
Assurez-vous que le
board = esp32doit-devkit-v1correspond bien au type de carte que vous utilisez. Si vous avez sélectionné “ESP32 Dev Module” lors de la création du projet, leboardpourrait êtreesp32dev. Si vous n’êtes pas sûr, vous pouvez vérifier dans les tâches PlatformIO de VS Code quel environnement est utilisé.
Après cette modification, sauvegardez le fichier et PlatformIO devrait pouvoir gérer correctement vos dépendances et compiler votre code.