Beetje Coderen

Les 2

MicroPython op je bordje zetten

De MicroPython-firmware flashen op een Raspberry Pi Pico of ESP32, verbinden met de REPL en bestanden op het bordje zetten met mpremote of Thonny.

⏱ 40 minuten leestijd + oefenen

🎯 Na deze les kun je

  • uitleggen wat MicroPython-firmware is en waarom je die eerst moet flashen
  • MicroPython-firmware flashen op een Pico (UF2) of ESP32 (esptool)
  • verbinden met de REPL
  • bestanden op het bordje zetten met mpremote of Thonny

Een microcontroller is een kleine computer op één chip, zonder besturingssysteem, toetsenbord of scherm. Om er Python op te draaien, zet je eerst MicroPython erop: een compacte Python-interpreter die zelf het enige programma op de chip is. Daarna praat je met het bordje via een USB-kabel, en draait het jouw .py-bestanden.

Welk bordje?

In deze cursus gebruiken we twee populaire bordjes. Alle voorbeelden werken op beide, tenzij anders vermeld.

Raspberry Pi Pico W / Pico 2 W ESP32 (bijv. ESP32-DevKitC)
Chip RP2040 / RP2350 ESP32
Wifi ja (de W-versie) ja
Bluetooth ja (W-versie) ja
Flashen bestand slepen (UF2) esptool
Ingebouwde LED Pin("LED") vaak pin 2

Heb je nog niets gekocht? Neem een Pico W of Pico 2 W: goedkoop, goed gedocumenteerd en het flashen kan niet misgaan.

Flashen op een Pico

  1. Download het nieuwste .uf2-bestand voor jouw bordje van micropython.org/download (zoek op RPI_PICO_W of RPI_PICO2_W).
  2. Houd de witte BOOTSEL-knop ingedrukt en steek de USB-kabel in.
  3. Het bordje verschijnt als USB-stick RPI-RP2. Sleep het .uf2-bestand erop.
  4. Het bordje herstart vanzelf; de "stick" verdwijnt. Klaar.

Flashen op een ESP32

Installeer esptool met pip en download de .bin voor ESP32_GENERIC:

pip install esptool
esptool.py --port /dev/ttyUSB0 erase_flash
esptool.py --port /dev/ttyUSB0 --baud 460800 write_flash -z 0x1000 ESP32_GENERIC-v1.24.0.bin

Op Windows heet de poort COM3 of iets dergelijks (zie Apparaatbeheer), op een Mac /dev/cu.usbserial-…. Het adres 0x1000 geldt voor de gewone ESP32; voor de ESP32-S3 en -C3 is het 0. De downloadpagina vermeldt het per bordje.

De REPL

Na het flashen draait MicroPython en wacht op invoer via de seriële USB-verbinding: de REPL (Read-Eval-Print Loop), dezelfde >>> als op je pc.

Met mpremote (de officiële tool, pip install mpremote):

mpremote
Connected to MicroPython at /dev/ttyACM0
Use Ctrl-] or Ctrl-x to exit this shell
>>> print("hallo vanaf het bordje")
hallo vanaf het bordje
>>> 2 ** 10
1024

Met Thonny (een eenvoudige Python-editor): kies rechtsonder de interpreter "MicroPython (Raspberry Pi Pico)" of "MicroPython (ESP32)". De shell onderin is dan de REPL van je bordje.

Handige toetsen in de REPL:

  • Ctrl-C: stop het programma dat draait.
  • Ctrl-D: zachte herstart (soft reset); main.py wordt opnieuw uitgevoerd.

Bestanden op het bordje

MicroPython heeft een klein bestandssysteem in de flash. Twee bestanden hebben een speciale betekenis:

  • boot.py draait als eerste bij het opstarten (meestal laat je die leeg).
  • main.py draait daarna. Zet hier je programma in, dan start het vanzelf als het bordje stroom krijgt, ook zonder computer.

Met mpremote:

mpremote fs ls                 # wat staat erop?
mpremote fs cp hallo.py :      # kopieer naar het bordje (: = bordje)
mpremote run hallo.py          # draai een bestand van je pc zonder het op te slaan
mpremote fs cp main.py :main.py
mpremote reset

mpremote run is ideaal tijdens het ontwikkelen: niets wordt opgeslagen en je ziet de uitvoer direct. In Thonny doe je hetzelfde met de groene Run-knop, en sla je met "Opslaan als… → Raspberry Pi Pico" op het bordje op.

# hallo.py
import sys
print("hallo vanaf", sys.platform)
print("MicroPython", sys.version)

Op een Pico print dit hallo vanaf rp2, op een ESP32 hallo vanaf esp32.

Typische problemen

  • Geen poort te zien: veel USB-kabels zijn alleen voor opladen. Probeer een andere kabel.
  • "Port is busy": een ander programma (Thonny, een tweede terminal) heeft de poort al open. Sluit het.
  • ESP32 reageert niet op esptool: houd de BOOT-knop ingedrukt terwijl esptool begint te verbinden.
  • Je programma start niet vanzelf: het bestand heet niet precies main.py, of staat op je pc in plaats van op het bordje.

Oefeningen

  1. Wat is het verschil tussen mpremote run test.py en mpremote fs cp test.py :main.py?
  2. Waarom moet je MicroPython eerst flashen voordat je .py-bestanden kunt draaien?
  3. Je bordje start na het aansluiten van een powerbank niet je programma. Wat controleer je?
Modelantwoord
  1. run voert het bestand eenmalig uit vanaf je pc, zonder het op te slaan. cp … :main.py zet het op het bordje als main.py, zodat het bij elke start automatisch draait.
  2. De microcontroller begrijpt alleen machinecode. De MicroPython-firmware is een programma in machinecode dat Python-code kan inlezen en uitvoeren.
  3. Of het bestand op het bordje staat (mpremote fs ls) en precies main.py heet, en of er geen fout in staat (verbind met de REPL en druk Ctrl-D om de foutmelding te zien).

Lab: bordje klaarmaken en hallo zeggen

  1. Flash MicroPython op je bordje (of gebruik de gesimuleerde Pico in de lab-container).
  2. Schrijf main.py die het platform en de versie print, en daarna klaar.
  3. Zet het op het bordje en herstart met mpremote reset.
  4. beetje check micropython-les02

Samenvatting

  • MicroPython is firmware die je één keer flasht: op een Pico via UF2, op een ESP32 met esptool.
  • De REPL (>>>) bereik je via mpremote of Thonny; Ctrl-C stopt, Ctrl-D herstart.
  • main.py draait automatisch bij het opstarten.
  • mpremote run om te testen, mpremote fs cp om op te slaan.

Volgende les: in de REPL je eerste LED aansturen.

Lab

Bordje klaarmaken en hallo zeggen

💻 Dit lab doe je op je eigen computer met Docker. Start de lab-container met (geeft de opdracht een eigen startcommando, gebruik dan dat):

$ docker run -it --rm registry.wizg.it/webhosting/beetje-labs:micropython-les2

Volg daarna de stappen van de opdracht hierboven. Nog geen Docker? Zie les 14 van Een beetje Linux & Docker. Voor dit lab is er geen live lab in de browser.

Klaar? Controleer je werk met:

$ beetje check micropython-les2

📝 Quiz: MicroPython op je bordje zetten

5 vragen · 70% nodig om te slagen

1. Hoe flash je MicroPython op een Raspberry Pi Pico?
2. Welk bestand draait automatisch bij het opstarten?
3. Wat doet Ctrl-C in de REPL?
4. Wat doet mpremote run test.py?
5. Je computer ziet geen seriële poort. Wat is een veelvoorkomende oorzaak?