MicroPython Debugger voor VS Code

Stel een breakpoint in de zijlijn (gutter) in en druk op F5. Je code wordt geïmplementeerd, het board start opnieuw op en de uitvoering stopt op die regel — inclusief de call stack, je variabelen en een werkend Watch-venster. Geen JTAG, geen debug-probe en geen extra bedrading nodig.

Gebruik de debugger die je al kent (F5, F10, F11, Shift+F11, herstarten, stoppen) om een microcontroller aan te sturen. Dit is geen "print-and-guess"-cyclus en geen simulator: het is de echte chip, gepauzeerd op de echte regel, met de echte waarden in beeld.

Functionaliteiten

  • Breakpoints: Conditioneel, inclusief hit counts. Overal inzetbaar, ook binnen geïmporteerde modules.
  • Step over (F10): Voer de volgende regel uit zonder deze in te gaan.
  • Step into (F11): Volg de aanroep, ook als deze naar een ander bestand leidt.
  • Step out (Shift+F11): Beëindig de functie en stop bij de aanroeper.
  • Continue (F5): Ga verder naar het volgende breakpoint.
  • Pause: Onderbreek een draaiend programma en bekijk waar het zich bevindt.
  • Restart (Ctrl+Shift+F5): Implementeer de code opnieuw en start weer vanaf het begin.
  • Stop (Shift+F5): Beëindig de sessie en laat het board blijven draaien.
  • Call stack: Elk frame met bestand en regel; klik om het bestand te openen.
  • Variabelen: Lokale en globale variabelen. Uitvouwbare lijsten, dictionaries en geneste objecten.
  • Watch & hover: Evalueer elke expressie in het gepauzeerde frame. Beweeg de muis over een naam om de waarde te zien.
  • Waarde bewerken: Wijzig een globale variabele tijdens het pauzeren en ga daarna verder met uitvoeren.
  • print() output: Wordt direct naar de Debug Console gestuurd.
  • Exceptions: Stopt bij de regel die de uitzondering veroorzaakte, niet nadat de stack is verdwenen.
  • Deploy on F5: Alleen bestanden die zijn gewijzigd worden verzonden (via CRC). Bestanden die je lokaal hebt verwijderd, worden ook verwijderd van het board.
  • Device console: Live programma-output in een terminal, zowel tijdens als buiten een debug-sessie.

Aan de slag

Zorg er eerst voor dat de firmware van je board is bijgewerkt met MicroPython debug-ondersteuning. Zie de sectie "Ondersteunde hardware" hieronder.

Nieuw project:

  1. Open VS Code.
  2. Selecteer via het Command Palette (Ctrl+Shift+P) de optie MicroPython: New Project.
  3. Kies een locatie en voer een projectnaam in. Er wordt een nieuwe map met die naam aangemaakt.
  4. Druk op F5... KLAAR, veel succes!

Bestaand project:

  1. Open de projectmap in VS Code.
  2. Druk op F5 en selecteer MicroPython.
  3. De extensie biedt daarna aan om een launch-configuratie op te slaan, zodat F5 in de toekomst niet opnieuw om een keuze vraagt.

Firmware-updates

Je board wordt up-to-date gehouden met de nieuwste releases van GHI Electronics voor fixes en nieuwe functies.

  • Eerste installatie: Wanneer je F5 indrukt op een board met standaard MicroPython (of zonder firmware), biedt de extensie aan om de debugger-firmware te installeren. Klik op Install en volg de instructies.
  • Latere updates: Zodra de debugger-firmware op je board staat, controleert F5 de publieke firmware-index van GHI op GitHub.
  • Update: Installeert de nieuwe firmware. Druk daarna opnieuw op F5 om te starten met debuggen.
  • Not now: Gaat verder met de huidige firmware; de controle wordt bij de volgende F5-druk opnieuw uitgevoerd.
  • Don't ask again: Schakelt de controle voor dit project uit door "checkFirmwareUpdate": false in .vscode/launch.json in te stellen. Commentaren en andere velden blijven behouden.

Ondersteunde hardware

Er worden vijf firmware-builds geleverd die de debugger ondersteunen op de meeste populaire MicroPython-boards van dit moment.

Beschikbare firmware

FirmwareOpmerking
RP2040Voor Raspberry Pi Pico en andere RP2040-boards. Gebruikt de eerste 2 MB flash. Werkt ook op Pico W (zonder wireless).
RP2350Voor Raspberry Pi Pico 2 en andere RP2350-boards. Werkt ook op Pico 2 W (zonder wireless).
ESP32S2GENERICVoor ESP32-S2 modules, met of zonder PSRAM.
ESP32S3GENERICVoor ESP32-S3 modules zonder PSRAM of met Quad PSRAM. Flash en PSRAM worden automatisch gedetecteerd.
ESP32S3OCTALVoor ESP32-S3 modules met Octal PSRAM. Flash en PSRAM worden automatisch gedetecteerd.

Gebruik het commando MicroPython: Update Device Firmware in het Command Palette, kies de juiste firmware voor je board en volg de instructies.

Geteste boards

Getest BoardGebruikte FirmwareOpmerking
Raspberry Pi PicoRP2040
Raspberry Pi Pico 2RP2350
Adafruit QT Py ESP32-S2ESP32S2GENERIC
Seeed XIAO ESP32-S3ESP32S3GENERICGeen PSRAM op dit board.
ESP32-S3 N16R8 Development BoardESP32S3OCTAL16 MB flash, 8 MB Octal PSRAM.
Hosyond ESP32-S3 Touchscreen Module (3.5″)ESP32S3OCTAL16 MB flash, 8 MB Octal PSRAM; inclusief 3.5″ touchscreen.

Zelf firmware bouwen

Staat je board niet in de lijst of wil je de build optimaliseren voor jouw specifieke hardware (flash-grootte, PSRAM-modus, pin-map)? Je kunt de firmware vanuit de broncode bouwen. De MicroPython fork met debugger-integratie bevat de vereisten, de nodige board-config instellingen en per-port opmerkingen.

Commando's

CommandoFunctie
MicroPython: New ProjectMaakt een lege projectmap aan.
MicroPython: Update Device FirmwareDownloadt en installeert de juiste firmware.
MicroPython: Flash Firmware from File…Installeert een firmware-bestand dat je al bezit.
MicroPython: Open Device Shell (REPL)Live programma-output; Ctrl-C stopt het programma voor een >>> prompt.
MicroPython: Erase Deployed FilesVerwijdert geïmplementeerde .py en .mpy bestanden, behoudt boot.py.

Opmerking: Ctrl+F5 voert het programma uit zonder debugging: het implementeert en start de code; print() bereikt nog steeds de Debug Console, maar breakpoints werken niet.

Gebruik van bibliotheken

Zowel .py als .mpy bestanden worden geïmplementeerd, en breakpoints werken ook binnen een .mpy bestand.

Als er voor hetzelfde module zowel een .py als een .mpy bestand bestaat, importeert MicroPython de .mpy. Een verouderd .mpy bestand zorgt er dus voor dat breakpoints op de regels vallen waarmee het bestand is gecompileerd. De extensie geeft een waarschuwing wanneer beide versies worden gedetecteerd.

Databestanden worden alleen geïmplementeerd als je ze expliciet vermeldt, aangezien het bestandssysteem klein is: "include": ["data/*.json", "**/*.csv"]

Bekende beperkingen

  • Lokale variabelen: Voor lokale variabelen die geen argumenten zijn, is de broncode nodig. Een module die alleen als .mpy is geïmplementeerd (zonder bijbehorende .py), toont alleen de argumenten en niet de overige lokale variabelen.
  • Opgevangen exceptions: Exceptions die worden opgevangen (try-except) stoppen de uitvoering niet. Alleen een exception die het hoogste niveau bereikt, pauzeert het programma.
  • Native code: @micropython.native en @micropython.viper kunnen niet worden gedebugged. Ze genereren geen trace-events, waardoor breakpoints daarbinnen nooit worden geactiveerd. De code wordt wel correct uitgevoerd.
  • Threads: Threads stoppen gezamenlijk. Op een board met _thread pauzeert een breakpoint elke thread; het getoonde frame is dat van de thread die het breakpoint raakte.
  • REPL prompt: De >>> prompt vereist dat het programma is gestopt. MicroPython voert main.py volledig uit voordat de REPL start. Bij een programma met een oneindige loop wordt er dus niet geluisterd naar invoer. Output blijft zichtbaar; Ctrl-C geeft je de prompt.
  • Eerste implementatie: De eerste keer dat een groot project wordt geïmplementeerd, duurt dit enkele seconden. Daarna worden alleen gewijzigde bestanden verzonden, waardoor een edit-and-run cyclus een fractie van een seconde duurt.
  • Top-level breakpoints: Breakpoints in top-level module-code kunnen worden overgeslagen. Als main.py logica direct in een while True: loop op top-niveau uitvoert, kunnen breakpoints in die loop worden overgeslagen. Verplaats de inhoud van de loop naar een kleine functie en roep deze aan vanuit de loop voor betrouwbare breakpoints. (Dit wordt momenteel onderzocht).
  • ESP32-S3 Linux update: Firmware-updates voor de ESP32-S3 mislukken momenteel op Linux vanwege een probleem met de USB-JTAG reset-sequentie. Installeer de firmware handmatig via de terminal (zie sectie Requirements). Windows en macOS kunnen dit wel via de extensie.

Systeemvereisten

  • Een device met MicroPython firmware met debugging-ondersteuning.
  • VS Code 1.137 of nieuwer.
  • Ondersteunde besturingssystemen: Windows, macOS, Linux en ChromeOS. Alles wat nodig is zit in de extensie; er is geen externe toolchain of Python-installatie vereist.

Windows

Volledig ondersteund.

macOS

Volledig ondersteund.

Linux

Installeer eenmalig de udev-regel en herstart de verbinding met het board. Open een terminal en voer uit:

cd ~/.vscode/extensions/ghi-electronics.micropython-debugger-<version>
sudo cp udev/99-micropython-debugger.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules && sudo udevadm trigger

Vervang <version> door de geïnstalleerde versie (bijv. 0.1.0). Je kunt ls ~/.vscode/extensions/ gebruiken om de exacte mapnaam te vinden. Zonder deze regel kan het board niet worden geopend omdat /dev/ttyACM* tot de dialout groep behoort en ModemManager het debugkanaal probeert te scannen.

Firmware installeren op ESP32-S3 (Linux)

Aangezien de automatische update via de extensie niet werkt op Linux voor ESP32-S3, volg dan deze stappen in de terminal:

  1. Installeer esptool:

pip install esptool

  1. Download de firmware:
  • Voor ESP32-S3 zonder PSRAM of met Quad PSRAM (bijv. Seeed XIAO ESP32-S3):

wget https://raw.githubusercontent.com/ghi-electronics/micropython-vsc-extension/main/docs/firmware/micropython-esp32-s3-generic-latest.bin

  • Voor ESP32-S3 met Octal PSRAM (N16R8V, N32R8V, of modules eindigend in "V"):

wget https://raw.githubusercontent.com/ghi-electronics/micropython-vsc-extension/main/docs/firmware/micropython-esp32-s3-octal-latest.bin

  1. Zet het board in BOOT-modus (houd BOOT ingedrukt, tik op RESET, laat BOOT los) en controleer de poort (meestal /dev/ttyACM0):

ls /dev/ttyACM*

  1. Flash de firmware (pas de poort en bestandsnaam aan):

``bash esptool.py --chip esp32s3 -p /dev/ttyACM0 --before defaultreset --after hardreset \ writeflash --flashmode dio --flashsize keep --flashfreq 80m \ 0x0 micropython-esp32-s3-generic-latest.bin `` Druk daarna op RESET op het board en F5 in VS Code.

ChromeOS

Automatische firmware-updates worden niet ondersteund op ChromeOS. Installeer de firmware handmatig met de Linux-commando's hierboven.

Zodra de firmware draait, moet je USB pass-through inschakelen in: ChromeOS Settings → About ChromeOS → Developers → Linux → Manage USB devices.

Pin daarna de debug-poort in .vscode/launch.json: "debugPort": "/dev/ttyACM1"

Auto-detectie werkt niet in Crostini omdat USB-pass-through apparaten geen VID/PID metadata doorgeven. De exacte poortnaam kan variëren; vind deze met ls /dev/ttyACM*. De debugger-firmware exposeert twee poorten, waarbij de poort met het hoogste nummer het debugkanaal is.

Over GHI Electronics

GHI Electronics is een bedrijf gespecialiseerd in embedded hardware en software. Wij bouwen tools die embedded development toegankelijk maken — zoals deze MicroPython-extensie en ons TinyCLR-platform voor C# en .NET, dat al jaren wordt gebruikt voor het debuggen van productie-apparatuur. Deze extensie brengt hetzelfde bewezen debugger-protocol naar MicroPython, zodat de broncode-ervaring die je van een desktop gewend bent, ook op een klein board werkt.

  • Website: www.ghielectronics.com
  • Support: support@ghielectronics.com
  • Forum: forums.ghielectronics.com