Une extension VS Code hybride TypeScript/Python pour le développement Rust embarqué, spécialement conçue pour les cartes ESP32-C3 et Raspberry Pi Pico (RP2040).
🚧 Extension en développement : Actuellement en phase de test. Sera publiée sur le VS Code Marketplace après validation complète avec ESP32-C3.
- 🚀 Création de projets : Templates pré-configurés pour ESP32-C3 et Pico RP2040
- 🛠️ Compilation automatisée : Build optimisé pour l'embarqué
- ⚡ Flashage intelligent :
- Pico RP2040 : Mode BOOTSEL (UF2) avec fallback automatique + Mode SWD (probe-rs)
- ESP32-C3 : Flashage série via espflash
- 🎯 Gestion des targets : Installation automatique des targets Rust
- 🔧 Configuration d'environnement : Setup complet en un clic
- 📱 Interface intuitive : Panel visuel avec sélection de carte
- 🔄 Fallback robuste : Convertisseur UF2 personnalisé quand les outils officiels échouent
- Copiez cette extension dans votre dossier d'extensions VS Code
- Installez les dépendances :
npm install npm run compile
- Lancez l'extension : Appuyez sur
F5dans VS Code pour démarrer l'extension en mode développement
- Rust : Installé via rustup
- Python 3.x : Pour le backend de gestion des projets (détection automatique python3/python)
- Cargo : Gestionnaire de packages Rust
- Lancez :
F5dans VS Code → L'onglet Rust Embedded apparaît dans la barre latérale - Créez : Cliquez sur "Panneau de Bienvenue" → Cliquez sur une carte (Pico/ESP32-C3) → Nommez votre projet → Terminé !
- Développez : Codez dans
src/main.rs→ Cliquez 🛠️ Compiler → Cliquez ⚡ Flasher
🎉 C'est tout ! Votre code Rust tourne sur votre microcontrôleur.
- Lancez l'extension avec
F5 - Dans la barre latérale gauche, l'onglet Rust Embedded apparaît automatiquement
- Cliquez sur "Configuration" dans le panel
- L'extension installera automatiquement :
- Targets Rust :
thumbv6m-none-eabi(Pico),riscv32imc-unknown-none-elf(ESP32-C3) - Outils Pico :
elf2uf2-rs,probe-rs,llvm-tools-preview - Outils ESP32-C3 :
espflash
- Targets Rust :
Via l'interface visuelle (Simple et intuitif) :
- Après avoir lancé l'extension (
F5), l'onglet Rust Embedded apparaît dans la barre latérale gauche - Cliquez sur "Panneau de Bienvenue" dans le panel
- Cliquez directement sur la carte souhaitée (Pico RP2040 ou ESP32-C3)
- Saisissez le nom de votre projet dans la boîte de dialogue
- Le projet est créé automatiquement avec toutes les configurations optimisées
Via les commandes (optionnel) :
Ctrl+Shift+P→Rust Embedded: Créer un nouveau projet Rust embarqué- Choisissez votre nom de projet et carte cible
- Ouvrez un projet Rust embarqué
- Dans l'onglet Rust Embedded (barre latérale gauche), cliquez simplement sur :
- 🛠️ Compiler → Compile automatiquement pour la target détectée
- ⚡ Flasher → Flash automatiquement le firmware sur votre carte
✨ Interface 100% visuelle ! Tout se fait en quelques clics dans la barre latérale, aucun raccourci clavier nécessaire.
Mode BOOTSEL (Recommandé) :
- Débranchez le Pico
- Maintenez le bouton BOOTSEL enfoncé
- Rebranchez le Pico (BOOTSEL toujours enfoncé)
- Relâchez BOOTSEL → Le Pico apparaît comme lecteur USB
- Cliquez sur ⚡ Flasher → Fichier UF2 copié automatiquement
Mode SWD (avec débogueur SWD connecté) :
- Connectez votre débogueur SWD au Pico
- Cliquez sur ⚡ Flasher → Utilise probe-rs automatiquement
mon-projet/
├── Cargo.toml # Dépendances rp-pico, rp2040-hal
├── .cargo/
│ └── config.toml # Config thumbv6m-none-eabi + elf2uf2-rs runner
├── memory.x # Layout mémoire RP2040 (BOOT2, FLASH, RAM)
└── src/
└── main.rs # Template avec initialisation HAL optimisée
mon-projet/
├── Cargo.toml # Dépendances esp32c3-hal, esp-backtrace
├── .cargo/
│ └── config.toml # Configuration target riscv32imc-unknown-none-elf
└── src/
└── main.rs # Template avec initialisation périphériques
💡 Interface visuelle recommandée : Tout est accessible via l'onglet Rust Embedded dans la barre latérale gauche. Les commandes
Ctrl+Shift+Prestent disponibles pour ceux qui préfèrent.
Rust Embedded: Ouvrir le panel de bienvenue🆕Rust Embedded: Créer un nouveau projet Rust embarquéRust Embedded: Compiler le projetRust Embedded: Flasher le projetRust Embedded: Installer les targets RustRust Embedded: Installer les outils de flashageRust Embedded: Configurer l'environnement de développement
- Méthode directe :
cargo runavecelf2uf2-rs - Fallback automatique : Génération
.bin→ Convertisseur UF2 personnalisé - Copie automatique : Détection du Pico en mode BOOTSEL et copie auto du fichier UF2
- Guide utilisateur : Instructions étape par étape si problème détecté
- Utilise
espflashavec configuration automatique - Détection automatique du port série
- Flash en mode DIO optimisé
- Frontend TypeScript : Interface utilisateur VS Code, gestion des commandes
- Backend Python : Logique métier, création de projets, compilation, flashage
- Templates intégrés : Configurations pré-définies pour chaque carte
| Carte | Target Rust | Outils de flashage | Modes | Statut |
|---|---|---|---|---|
| Raspberry Pi Pico (RP2040) | thumbv6m-none-eabi |
elf2uf2-rs + probe-rs |
BOOTSEL/UF2 + SWD | ✅ |
| ESP32-C3 | riscv32imc-unknown-none-elf |
espflash |
Série/USB | ✅ |
- 🔄 Fallback intelligent : Si
elf2uf2-rséchoue avec "Unrecognized ABI", utilise automatiquement le convertisseur UF2 personnalisé - 🔍 Détection automatique : Détecte le Pico en mode BOOTSEL et copie automatiquement le fichier UF2
- 🛠️ Installation automatique :
llvm-tools-previewinstallé automatiquement pourcargo objcopy - 🎮 Interface visuelle : Panel de bienvenue avec cartes de sélection intuitive
- 🐍 Multi-plateforme : Détection automatique
python3vspythonselon l'OS
Cause : L'outil elf2uf2-rs ne reconnaît pas l'ABI du fichier ELF généré
Solution : L'extension utilise automatiquement le convertisseur UF2 personnalisé en fallback ✅
Cause : Le composant llvm-tools-preview n'est pas installé
Solution : Lancez Rust Embedded: Installer les outils de flashage pour Pico ✅
Vérifications :
- Le Pico est-il correctement connecté en mode BOOTSEL ?
- Le lecteur
/media/*/RPI-RP2est-il monté ? - Essayez de débrancher/rebrancher en maintenant BOOTSEL
# Via l'extension ou commande
python3 main.py create --target pico --project-name led-blink
cd led-blink
# Modifiez src/main.rs avec le code ci-dessous
# Flashez via l'extension VS CodeRemplacez le contenu de src/main.rs par ce code testé et fonctionnel :
#![no_std]
#![no_main]
// Les traits (interfaces) nécessaires pour contrôler la broche (allumer/éteindre).
use embedded_hal::digital::v2::OutputPin;
use panic_halt as _;
use rp_pico::entry;
use rp_pico::hal::{
clocks::{init_clocks_and_plls, Clock},
pac,
sio::Sio,
watchdog::Watchdog,
};
#[entry]
fn main() -> ! {
let mut pac = pac::Peripherals::take().unwrap();
let core = pac::CorePeripherals::take().unwrap();
let mut watchdog = Watchdog::new(pac.WATCHDOG);
let clocks = init_clocks_and_plls(
rp_pico::XOSC_CRYSTAL_FREQ,
pac.XOSC,
pac.CLOCKS,
pac.PLL_SYS,
pac.PLL_USB,
&mut pac.RESETS,
&mut watchdog,
)
.ok()
.unwrap();
// 1. Initialiser le SIO (Single-cycle I/O) pour accéder aux broches GPIO
let sio = Sio::new(pac.SIO);
// 2. Initialiser les broches GPIO
// Le pilote `rp_pico::Pins` est une manière pratique de toutes les configurer.
let pins = rp_pico::Pins::new(
pac.IO_BANK0,
pac.PADS_BANK0,
sio.gpio_bank0,
&mut pac.RESETS,
);
// 3. Configurer la broche de la LED (pin 25) en sortie "push-pull"
// Le pilote nous donne un accès facile à la LED avec `pins.led`
let mut led_pin = pins.led.into_push_pull_output();
// 4. Créer un délai en utilisant le timer du cœur (SysTick)
// On lui donne la fréquence de l'horloge système pour qu'il puisse calculer le temps.
let mut delay = cortex_m::delay::Delay::new(core.SYST, clocks.system_clock.freq().to_Hz());
loop {
// Allumer la LED (mettre la broche à l'état HAUT)
led_pin.set_high().unwrap();
// Attendre 500 millisecondes
delay.delay_ms(500);
// Éteindre la LED (mettre la broche à l'état BAS)
led_pin.set_low().unwrap();
// Attendre 500 millisecondes
delay.delay_ms(500);
}
}✅ Code testé et fonctionnel ! Ce code fait clignoter la LED intégrée du Pico RP2040 toutes les 500ms.
Que fait ce code :
- 🔧 Initialise les horloges et périphériques du RP2040
- 📍 Configure la broche GPIO 25 (LED intégrée) en sortie
- ⏱️ Crée un timer pour les délais précis
- ♻️ Boucle infinie : LED ON → délai 500ms → LED OFF → délai 500ms
Pour tester :
- Créez un nouveau projet Pico via l'extension
- Remplacez
src/main.rspar ce code - Cliquez 🛠️ Compiler puis ⚡ Flasher
- Votre Pico clignote ! 🎉
# Le fichier UF2 est généré dans target/thumbv6m-none-eabi/release/
# Copiez-le manuellement vers le Pico en mode BOOTSEL
cp target/thumbv6m-none-eabi/release/mon-projet.uf2 /media/$USER/RPI-RP2/# Installer les dépendances
npm install
npm run compile
# Lancer l'extension de développement
# Appuyez sur F5 dans VS Code pour démarrer une nouvelle fenêtre avec l'extension active# Configuration complète
python3 main.py setup
# Test création de projet
python3 main.py create --target pico --project-name test-pico
python3 main.py create --target esp32c3 --project-name test-esp32
# Test flashage
python3 main.py flash --target pico --project-path test-pico
python3 main.py flash --target esp32c3 --project-path test-esp32npm run watch # Recompile automatiquement à chaque modification- Convertisseur UF2 personnalisé : Implémente la spécification UF2 officielle Microsoft
- Détection multi-plateforme : Support Linux (
/media/*/RPI-RP2) et macOS (/Volumes/RPI-RP2) - Memory layout optimisé : Fichier
memory.xavec sections BOOT2, FLASH, RAM pour RP2040 - Configuration Cargo : Runner
elf2uf2-rsconfiguré automatiquement pour projets Pico
