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.
🎯 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 vansleep_ms(500): de LED wacht dan ruim acht minuten.
Oefeningen
- Laat de LED kort flitsen: 100 ms aan, 900 ms uit.
- Laat de LED vijf keer knipperen en dan uit blijven.
- Maak een SOS-signaal: drie korte, drie lange, drie korte flitsen, dan twee seconden pauze, herhalen.
Modelantwoord
-
while True: led.on() time.sleep_ms(100) led.off() time.sleep_ms(900) -
for _ in range(5): led.on() time.sleep_ms(300) led.off() time.sleep_ms(300) -
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
- Schrijf
main.pydie een LED op GP15 laat knipperen: 200 ms aan, 800 ms uit. - Zorg dat de LED uit gaat als het programma stopt.
beetje check micropython-les03draait 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_usom 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
Klaar? Controleer je werk met:
$ beetje check micropython-les3