Python a GPIO na Raspberry Pi
Poznámka
GPIO (General Purpose Input/Output) sú piny na Raspberry Pi, ktorými môžeš z Pythonu ovládať LED, tlačidlá, motory či senzory. Pracujú s logikou 3,3 V (Napäťové úrovne).
Knižnica gpiozero
Knižnica gpiozero je odporúčaný spôsob práce s GPIO – je jednoduchšia ako staršia RPi.GPIO.
pip3 install gpiozero # zvyčajne je už predinštalovaná na Raspberry Pi OSRozsvietenie LED
from gpiozero import LED
from time import sleep
led = LED(17) # LED pripojená na GPIO pin 17
while True:
led.on()
sleep(1)
led.off()
sleep(1)Upozornenie
LED diódu pripájaj na GPIO pin vždy cez predradný odpor (typicky 220–330 Ω) – priame pripojenie môže pin alebo diódu zničiť (Napájanie a prúdové limity).
Čítanie tlačidla
from gpiozero import Button
from time import sleep
tlacidlo = Button(2) # tlačidlo na GPIO pine 2
while True:
if tlacidlo.is_pressed:
print("Tlačidlo stlačené")
sleep(0.1)Tip
gpiozero vie aj priamo reagovať na zmenu stavu – namiesto cyklu môžeš použiť tlacidlo.when_pressed = funkcia, ktorá sa zavolá automaticky pri stlačení.
PWM – plynulé riadenie
PWM (Pulse Width Modulation) umožňuje plynulo riadiť jasnosť LED alebo rýchlosť motora.
from gpiozero import PWMLED
from time import sleep
led = PWMLED(17)
for jas in range(0, 101, 5): # 0 % až 100 % po krokoch 5 %
led.value = jas / 100
sleep(0.1)Servo motor
from gpiozero import Servo
from time import sleep
servo = Servo(18)
servo.min() # krajná pozícia
sleep(1)
servo.mid() # stredná pozícia
sleep(1)
servo.max() # druhá krajná pozíciaMini-úlohy – GPIO
- Pripoj LED na GPIO 17 cez predradný odpor a roznes ju blikať s periódou 0,5 s.
- Pripoj tlačidlo na GPIO 2 – pri stlačení nech sa LED rozsvieti, inak zostane zhasnutá.
- Pomocou
PWMLEDvytvor efekt plynulého “dýchania” LED (jas hore a dole). - Skús ovládať servo motor medzi tromi pozíciami so spätnou väzbou na konzolu (
print).
Cheat sheet – rýchla referencia
from gpiozero import LED, Button, PWMLED, Servo
led = LED(17) # digitálny výstup
led.on() / led.off()
tlacidlo = Button(2) # digitálny vstup
tlacidlo.is_pressed # True/False
pwm_led = PWMLED(17) # PWM výstup (0.0 - 1.0)
pwm_led.value = 0.5
servo = Servo(18) # servo motor
servo.min() / servo.mid() / servo.max()Postup sa ukladá iba v tomto prehliadači.