Chi programma microcontrollori in MicroPython conosce bene il ciclo di sempre: si aggiunge una print, si ricarica il file, si guarda la console, si cancella la print e si ricomincia. Il debug a livello di sorgente, quello con breakpoint e variabili che si usa sul desktop, di solito resta fuori portata. L’estensione MicroPython Debugger di GHI Electronics cambia questa abitudine, perché porta breakpoint, stepping e ispezione delle variabili su MicroPython in esecuzione su hardware reale, collegato con un solo cavo USB.
Non serve nessuna sonda di debug, nessun JTAG, nessun cablaggio aggiuntivo. Si imposta un breakpoint nel gutter di VS Code e si preme F5: il codice viene distribuito sulla scheda, la board si riavvia e l’esecuzione si ferma esattamente su quella riga. Inoltre, il debug funziona anche dentro i moduli importati, quindi non ci si limita al file principale.
Breakpoint, stepping e variabili sulla scheda vera
Durante la sessione il debugger mette a disposizione tutto quello che serve per capire cosa sta succedendo dentro il programma. I breakpoint possono essere condizionali, con hit count, così l’esecuzione si ferma solo quando la condizione è vera o dopo un certo numero di passaggi. Per muoversi nel codice ci sono step over con F10, step into con F11, step out con Shift+F11, continue con F5, pause, restart con Ctrl+Shift+F5 e stop con Shift+F5.
- Call stack con file e riga, per risalire alla catena di chiamate
- Variabili locali e globali espandibili, comprese liste, dict e oggetti annidati
- Watch per tenere d’occhio un’espressione
- Valutazione di espressioni al passaggio del mouse sul codice
- Modifica di un valore globale mentre il programma è fermo

L’output di print() finisce nella Debug Console, quindi le vecchie print non vanno buttate: convivono con il debugger. In più, le eccezioni fermano l’esecuzione sulla riga che le ha sollevate, e Ctrl+F5 esegue il codice senza avviare la sessione di debug. Per chi vuole rifare tutto da zero, il repository di GHI Electronics raccoglie il codice dell’estensione e le build del firmware.
Firmware, deploy incrementale e schede supportate
Al primo F5 con firmware MicroPython stock l’estensione propone di installare il firmware con supporto al debug. Ai successivi F5 controlla l’indice firmware pubblico su GitHub e propone l’aggiornamento quando esce una nuova release. Le build disponibili coprono RP2040, RP2350, ESP32_S2_GENERIC, ESP32_S3_GENERIC e ESP32_S3_OCTAL. Il firmware per RP2040 usa i primi 2 MB di flash.
Il deploy è incrementale: l’estensione invia solo i file cambiati, verificati tramite CRC, e rimuove quelli cancellati localmente. Il primo deploy di un progetto grande richiede alcuni secondi, mentre i successivi sono molto rapidi, perché spediscono solo le differenze. Il ciclo modifica-esecuzione dura una frazione di secondo. I file .py e .mpy vengono distribuiti entrambi, e i breakpoint funzionano anche dentro un .mpy.
Tra le schede provate ci sono Raspberry Pi Pico, Raspberry Pi Pico 2, Adafruit QT Py ESP32-S2, Seeed XIAO ESP32-S3, la ESP32-S3 N16R8 Development Board con 16 MB di flash e 8 MB di PSRAM Octal, il modulo Hosyond ESP32-S3 Touchscreen da 3,5″ con 16 MB di flash e 8 MB di PSRAM Octal, e la RP2040 GEEK. Per chi parte da zero con la famiglia Pico, un kit con sensori e attuatori per Raspberry Pi Pico offre una base pronta per provare il debugger su codice reale. Su Linux serve anche la regola udev 99-micropython-debugger.rules, mentre su ESP32-S3 l’installazione manuale del firmware da terminale passa da esptool.
L’estensione richiede Visual Studio Code 1.137 o versione successiva.
Fonte: https://github.com/ghi-electronics/micropython-vsc-extension
