Pierwsza dioda: Pin, sleep i toggle
Cel
Zamigasz diodą na płytce, podłączysz trzy zewnętrzne diody z rezystorami i napiszesz „biegnące światło”. Poznasz klasę Pin, funkcje sleep oraz sposób na miganie kilkoma diodami w różnym tempie bez blokowania programu.
Potrzebne części
- Pico podłączone do komputera (albo tylko symulator)
- diody LED: czerwona, żółta, zielona
- 3 rezystory 330 Ω
- płytka stykowa, 4 przewody
2.1. Dioda na płytce
Pico ma wbudowaną zieloną diodę. W MicroPythonie ma nazwę "LED":
from machine import Pin
from time import sleep
led = Pin("LED", Pin.OUT) # pin jako wyjście
while True:
led.on() # stan wysoki: 3,3 V, dioda świeci
sleep(0.5) # czekaj pół sekundy
led.off() # stan niski: 0 V
sleep(0.5)
Co tu się dzieje:
Pin("LED", Pin.OUT)konfiguruje pin jako wyjście. Na Pico i Pico 2 to GP25. Na Pico W i Pico 2 W dioda jest podłączona do układu radiowego, a nie do GP25, dlatego zawsze pisz"LED", nie25. Ta nazwa działa na każdym modelu.on()ioff()to skróty dlavalue(1)ivalue(0).sleep()z modułutimeprzyjmuje sekundy (także ułamki). Są teżsleep_ms()isleep_us()dla milisekund i mikrosekund.
Krócej, z toggle(), które odwraca aktualny stan:
from machine import Pin
from time import sleep_ms
led = Pin("LED", Pin.OUT)
for i in range(10):
led.toggle()
print("krok", i)
sleep_ms(300)
led.off()
print("Koniec.")
Ten program kończy się sam po dziesięciu krokach (pięć mrugnięć), a na końcu gasi diodę.
2.2. Rezystor do diody
Dioda LED przewodzi prąd tylko w jedną stronę i ma prawie stały spadek napięcia U_F (ok. 2 V dla czerwonej). Resztę napięcia musi przejąć rezystor, a jego wartość wyznacza prąd:
R = (U_pin − U_F) / I = (3,3 V − 2,0 V) / 0,004 A ≈ 325 Ω → 330 Ω
I = (3,3 V − 2,0 V) / 330 Ω ≈ 3,9 mA
4 mA wystarcza, żeby zwykła dioda 5 mm świeciła wyraźnie, i mieści się w domyślnej wydajności pinu Pico (4 mA). Cały układ RP2040 może oddać ze wszystkich pinów łącznie ok. 50 mA, więc trzy diody po 4 mA to bezpieczny zapas.
| Rezystor | Prąd (U_F = 2,0 V) | Komentarz |
|---|---|---|
| 220 Ω | ≈ 5,9 mA | jaśniej, nadal bezpiecznie dla pojedynczej diody |
| 330 Ω | ≈ 3,9 mA | wartość kursowa |
| 1 kΩ | ≈ 1,3 mA | słabiej, ale nowoczesne diody nadal widać |
⚠️ Diody niebieskie, białe i jasne zielone mają U_F ok. 3 V. Przy 3,3 V z pinu zostaje na rezystorze tylko 0,3 V, więc świecą bardzo słabo. Do kursu wybierz zwykłą zieloną diodę (U_F ok. 2,1 V).
2.3. Podłączenie trzech diod
Każda dioda ma własny rezystor. Obwód: pin GP → rezystor 330 Ω → anoda (dłuższa nóżka) → katoda (krótsza nóżka, ścięta krawędź obudowy) → GND.

Rys. 2.1. Trzy diody z rezystorami. Te same piny i kolory są w symulatorze.
| Pin GP | Pin fizyczny | Element |
|---|---|---|
| GP15 | 20 | rezystor 330 Ω → anoda czerwonej diody |
| GP14 | 19 | rezystor 330 Ω → anoda żółtej diody |
| GP13 | 17 | rezystor 330 Ω → anoda zielonej diody |
| GND | 18 lub 23 | szyna „−” płytki stykowej ← katody wszystkich diod |
Na płytce stykowej: wepnij Pico okrakiem nad rowkiem środkowym, tak żeby każdy pin trafił do osobnego rzędu otworów. Połącz pin GND z szyną „−”, a katody diod wepnij bezpośrednio w szynę „−”. Rezystor może stać po dowolnej stronie diody, ważne, żeby był połączony szeregowo.
2.4. Biegnące światło
from machine import Pin
from time import sleep_ms
leds = [Pin(15, Pin.OUT), Pin(14, Pin.OUT), Pin(13, Pin.OUT)] # czerwona, żółta, zielona
try:
while True:
for led in leds:
led.on()
sleep_ms(200)
led.off()
except KeyboardInterrupt:
for led in leds:
led.off() # po Stop zgaś wszystkie
print("Zatrzymano.")
Stop (w symulatorze, przeglądarce i Thonny) wysyła Ctrl+C, a MicroPython zgłasza wtedy wyjątek KeyboardInterrupt. Bez bloku try/except diody zostałyby w ostatnim stanie, bo pin po zakończeniu programu trzyma ustawioną wartość.
2.5. Miganie bez blokowania: ticks_ms
sleep() zatrzymuje cały program. Jeśli chcesz migać dwiema diodami w różnym tempie, a w następnych lekcjach jeszcze reagować na przycisk, lepiej sprawdzać, ile czasu minęło:
from machine import Pin
import time
red = Pin(15, Pin.OUT)
green = Pin(13, Pin.OUT)
t_red = t_green = time.ticks_ms()
while True:
now = time.ticks_ms()
if time.ticks_diff(now, t_red) >= 500: # co 500 ms
red.toggle()
t_red = now
if time.ticks_diff(now, t_green) >= 150: # co 150 ms
green.toggle()
t_green = now
time.sleep_ms(5) # krótka przerwa, pętla i tak kręci się 200 razy na sekundę
ticks_ms() to licznik milisekund od startu płytki. Po pewnym czasie „przekręca się” do zera, dlatego różnicę zawsze licz przez ticks_diff(nowszy, starszy), a nie zwykłym odejmowaniem.
2.6. Timer: miganie w tle
machine.Timer wywołuje funkcję co zadany czas, niezależnie od głównego programu:
from machine import Pin, Timer
led = Pin("LED", Pin.OUT)
def mrugnij(t):
led.toggle()
timer = Timer(period=250, mode=Timer.PERIODIC, callback=mrugnij)
print("Program się skończył, a dioda dalej miga. Zatrzymaj ją przyciskiem Stop.")
Program kończy się od razu, ale timer działa dalej, aż do Stop (w symulatorze) albo timer.deinit(). Funkcja wywoływana przez timer powinna być krótka: bez sleep i bez długich obliczeń.
Typowe błędy
Pin(25)nie miga na Pico W / Pico 2 W: tam dioda nie jest na GP25. PiszPin("LED", Pin.OUT).sleep(500)zamiastsleep_ms(500): program czeka 500 sekund.sleep()przyjmuje sekundy.- Dioda nie świeci: odwrotnie wpięta (obróć ją, przy 3,3 V nic jej się nie stanie), rezystor i nóżka diody w różnych rzędach płytki stykowej, brak połączenia GND z szyną „−”.
- Dioda świeci cały czas, niezależnie od programu: przewód w pinie 3V3(OUT) albo VBUS zamiast w pinie GP. Sprawdź numer pinu fizycznego na rysunku 1.1.
- Brak rezystora: dioda świeci bardzo jasno i się grzeje. Natychmiast odłącz USB i dodaj rezystor.
- Zły numer GP:
Pin(20)to GP20, a nie pin fizyczny 20. W kodzie zawsze numer GP.
Zadania
- SOS: nadaj diodą czerwoną alfabetem Morse'a SOS (3 krótkie po 200 ms, 3 długie po 600 ms, 3 krótkie, przerwa 1,5 s).
- Sygnalizacja świetlna: czerwone (3 s) → czerwone + żółte (1 s) → zielone (3 s) → żółte (1 s) → od początku.
- Licznik binarny: pokaż na trzech diodach liczby od 0 do 7 (zielona = bit 0, żółta = bit 1, czerwona = bit 2). Podpowiedź:
(n >> 1) & 1daje bit nr 1 liczbyn. - Przerób program z 2.5 tak, żeby trzecia dioda (żółta) migała co 1 s.
Podsumowanie
Pin(numer, Pin.OUT) robi z pinu wyjście, a on(), off(), value() i toggle() zmieniają jego stan. Wbudowaną diodę adresuj nazwą "LED". Zewnętrzną diodę zawsze łącz przez rezystor: 330 Ω daje przy 3,3 V ok. 4 mA. Do kilku niezależnych rytmów używaj ticks_ms() i ticks_diff() zamiast sleep(), a do pracy w tle Timer.