Beetje Coderen

Les 3

De REPL en je eerste LED

Interactief experimenteren in de REPL, een pin als uitgang instellen en een LED laten knipperen met time.sleep.

⏱ 40 minuten leestijd + oefenen

🎯 Na deze les kun je

  • de REPL gebruiken om te experimenteren
  • een pin als uitgang aansturen met machine.Pin
  • een LED laten knipperen met time.sleep
  • een programma netjes laten stoppen

De "hallo wereld" van microcontrollers is een knipperende LED. Het lijkt simpel, maar je leert er de kern mee: een pin van de chip aansturen vanuit code. In deze les doe je het eerst interactief in de REPL, regel voor regel, en daarna als programma.

Pinnen

Een microcontroller heeft tientallen GPIO-pinnen (General Purpose Input/Output). Elke pin kan je als uitgang instellen (de chip maakt hem 3,3 V of 0 V) of als ingang (de chip meet of er spanning op staat). In MicroPython regel je dat met de klasse Pin uit de module machine.

De ingebouwde LED in de REPL

Verbind met mpremote en typ:

from machine import Pin
led = Pin("LED", Pin.OUT)   # Pico W / Pico 2 W
led.on()

De LED op het bordje gaat aan. Op een ESP32-DevKit is het meestal Pin(2, Pin.OUT); op een gewone Pico (zonder W) Pin(25, Pin.OUT).

Probeer verder:

led.off()
led.value(1)      # hetzelfde als on()
led.value()       # lees de huidige toestand: 1
led.toggle()      # omschakelen

Dit is de kracht van de REPL: je probeert iets en ziet direct het resultaat, zonder bestand op te slaan of te uploaden. Gebruik hem om uit te zoeken hoe iets werkt, en zet het daarna in een programma.

Handig in de REPL: Tab vult aan. Typ led. en druk Tab om alle methodes te zien. help(Pin) geeft meer.

Knipperen

from machine import Pin
import time

led = Pin("LED", Pin.OUT)

while True:
    led.toggle()
    time.sleep(0.5)

time.sleep(0.5) wacht een halve seconde. De LED is dus een halve seconde aan, een halve uit: één knipper per seconde. Voor kortere tijden zijn er time.sleep_ms(100) en time.sleep_us(10); die zijn nauwkeuriger en werken met hele getallen.

Draai dit met mpremote run knipper.py. Stoppen doe je met Ctrl-C.

Voorspel: wat gebeurt er als je time.sleep(0.5) weglaat?

De LED schakelt dan honderdduizenden keren per seconde. Je oog ziet dat niet: de LED lijkt continu aan, iets minder fel. (Dat effect gebruik je in les 7 bewust om te dimmen.)

Een externe LED

Een LED op een breadboard sluit je aan via een voorschakelweerstand (330 Ω is veilig; in les 4 reken je dat uit):

GP15 ──[330 Ω]──▶|── GND
                LED (lange poot naar de weerstand)
led = Pin(15, Pin.OUT)

Bij de Pico gebruik je het GP-nummer (GP15), niet het fysieke pootnummer op het bordje (20). Dat is een veelvoorkomende verwarring; de pinout-afbeelding van je bordje toont beide.

Netjes stoppen

Na Ctrl-C blijft de LED in de laatste toestand staan, misschien aan. Met try/finally zet je hem altijd uit:

from machine import Pin
import time

led = Pin("LED", Pin.OUT)

try:
    while True:
        led.toggle()
        time.sleep_ms(250)
finally:
    led.off()
    print("gestopt")

Ctrl-C veroorzaakt een KeyboardInterrupt-exceptie, en finally wordt dan nog uitgevoerd.

Typische fouten

  • NameError: name 'Pin' isn't defined: de import vergeten.
  • ValueError: invalid pin: het pinnummer bestaat niet op dit bordje, of "LED" op een ESP32.
  • LED blijft uit: LED omgekeerd geplaatst (de lange poot is de plus), of het fysieke pootnummer gebruikt in plaats van het GP-nummer.
  • time.sleep(500) in plaats van sleep_ms(500): de LED wacht dan ruim acht minuten.

Oefeningen

  1. Laat de LED kort flitsen: 100 ms aan, 900 ms uit.
  2. Laat de LED vijf keer knipperen en dan uit blijven.
  3. Maak een SOS-signaal: drie korte, drie lange, drie korte flitsen, dan twee seconden pauze, herhalen.
Modelantwoord
  1. while True:
        led.on()
        time.sleep_ms(100)
        led.off()
        time.sleep_ms(900)
    
  2. for _ in range(5):
        led.on()
        time.sleep_ms(300)
        led.off()
        time.sleep_ms(300)
    
  3. def flits(ms):
        led.on()
        time.sleep_ms(ms)
        led.off()
        time.sleep_ms(200)
    
    while True:
        for duur in (150, 150, 150, 450, 450, 450, 150, 150, 150):
            flits(duur)
        time.sleep(2)
    

Lab: knipperende LED

  1. Schrijf main.py die een LED op GP15 laat knipperen: 200 ms aan, 800 ms uit.
  2. Zorg dat de LED uit gaat als het programma stopt.
  3. beetje check micropython-les03 draait je code in een gesimuleerde Pico en meet de tijden.

Samenvatting

  • Pin(nummer, Pin.OUT) maakt een uitgang; on(), off(), toggle(), value().
  • Experimenteer in de REPL, zet wat werkt in een bestand.
  • time.sleep, sleep_ms, sleep_us om te wachten.
  • Pico: GP-nummers; ingebouwde LED is "LED" op de W-modellen.

Volgende les: wat er elektrisch gebeurt, en hoe je de juiste weerstand kiest.

Lab

Knipperende LED

💻 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-les3

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-les3

📝 Quiz: de REPL en je eerste LED

5 vragen · 70% nodig om te slagen

1. Hoe stel je pin 15 in als uitgang?
2. Wat doet led.toggle()?
3. Hoe lang wacht time.sleep_ms(500)?
4. Welk pinnummer gebruik je bij de Pico in code?
5. Waarom gebruik je try/finally rond de knipperlus?