In acest articol vom vedea cum putem comanda un led de catre Raspberry Pi.
Pentru acest lucru va trebui sa instalam sistemul de operare pe Raspberry Pi. Acest lucru se face foarte usor conform doumentatie oficiale de aici. Ca si ssistem de operare recomand Raspberry Pi os with desktop and recommended software. Acest lucru ne asigura de faptul ca vom avea instalat tot ce avem nevoie pentru a folosi Raspberry Pi.
Eu voi folosi pentru acest articol un Raspberry Pi 3+ (se poate folosi orice versiune) impreuna cu displayul de 7 inchi oficial.
Pentru a putea controla Raspberry Pi putem folosi o tastatura si un mouse pe usb (impreuna cu un display) sau ne putem conecta de la distanta prin SSH sau VPN.
In acest exemplu eu ma voi conecta la Raspberry Pi remote prin SSH pentru a crea fisierul necesar functionarii si a-l rula.
Limbajul de programare folosit este Python versiunea 3.x. Pentru a rula fisierele Python vom folosi linia de comanda (consola) si vom rula urmatoarea comanda din directorul unde se afla fsierele: "python3 numele_fisierului.py".
Ledul va fi conectat fizic la unul din pinii de masa ai headerului GPIO iar al doilea pin al ledului va fi conectat la pinul GPIO17. Acesta se afla la pinul fizic numarul 11.
Pentru a rula codul mai intai va trebui sa creem un fisier cu extensia .py. Pentru acest exemplu fisierul creat va fi numit led.py.
Codul sursa este cel de mai jos:
from gpiozero import LED #importam clasa LED din libraria gpiozero
from time import sleep #importam clasa sleep din libraria time
red = LED(17) #declaram variabila si ii alocam un port de iesire
while True: #bucala repetitiva, asigura rularea programului pana la oprirea lui
red.on() #se aprinde ledul
sleep(1) #se asteapta 1 secunda
red.off() #se stinge ledul
sleep(1) #se asteapta o secunda
De asemenea putem folosi functia PWM pentru a controla intensitatea ledului folosit. Pentru a face acest lucru vom crea un nou fisier numit led_pwm.py. Codul folosit este cel de ma jos:
from gpiozero import PWMLED #importam clasa PWMLED din libraria gpiozero
from time import sleep #importam clasa sleep din libraria time
red = PWMLED(17) #declaram variabila folosita si ii vom aloca un port de iesire
while True: #bucla repetitiva infinita
red.value = 0 #setam valoarea de 0% a factorului de umplere
sleep(1) #asteptam 1 secunda
red.value = 0.25 #setam valoarea de 25% a factorului de umplere
sleep(1)
red.value = 0.5 #setam valoarea de 50% a factorului de umplere
sleep(1)
red.value = 0.75 #setam valoarea de 75% a factorului de umplere
sleep(1)
red.value = 1 #setam valoare de 100% a factorului de umplere
sleep(1)
red.value = 0.75
sleep(1)
red.value = 0.5
sleep(1)
red.value = 0.25
sleep(1)
O alta metoda de a aprinde si stinge un led progresiv se poate face si in alt fel. Pentru acest lucru vom crea un nou fisier numit led_pwm2.py. Codul folosit este urmatorul:
from gpiozero import PWMLED #importam clasa PWMLED din libraria gpiozero
from signal import pause #importam clasa pause dn libraria signal
red = PWMLED(17) #declaram variabila si ii alocam un port de iesire
red.pulse() #rulam functia pulse()
pause() #se efectueaza o pauza
Daca dorim sa folosim mai multe leduri o putem face foarte simplu. In urmatorul exemplu vom folosi un led RGB la care vom aprinde si stinge fiecare culoare de baza timp de 1 secunda. Cele 3 leduri se conecteaza in felul urmator:
-led rosu -> GPIO17 (pin fizic 11)
-led albastru -> GPIO27 (pin fizic 13)
-led verde -> GPIO22 (pin fizic 15).
Vom crea un fiser numit led3.py in care vom adauga urmatorul cod:
from gpiozero import LED
from time import sleep
red = LED(17)
blue = LED(27)
green = LED(22)
while True:
red.on()
sleep(1)
red.off()
sleep(1)
blue.on()
sleep(1)
blue.off()
sleep(1)
green.on()
sleep(1)
green.off()
sleep(1)
De asemeea putem folosi functia PWM pentru cele 3 leduri folosite mai sus.Pentru acest lucru vom crea un nou fisier numit led3_pwm.py in care vom scrie urmatorulcod sursa:
from gpiozero import PWMLED
from time import sleep
red = PWMLED(17)
blue = PWMLED(27)
green = PWMLED(22)
while True:
red.value = 0
sleep(1)
red.value = 0.25
sleep(1)
red.value = 0.5
sleep(1)
red.value = 0.75
sleep(1)
red.value = 1
sleep(1)
red.value = 0.75
sleep(1)
red.value = 0.5
sleep(1)
red.value = 0.25
sleep(1)
red.value = 0
blue.value = 0
sleep(1)
blue.value = 0.25
sleep(1)
blue.value = 0.5
sleep(1)
blue.value = 0.75
sleep(1)
blue.value = 1
sleep(1)
blue.value = 0.75
sleep(1)
blue.value = 0.5
sleep(1)
blue.value = 0.25
sleep(1)
blue.value = 0
sleep(1)
green.value = 0
sleep(1)
green.value = 0.25
sleep(1)
green.value = 0.5
sleep(1)
green.value = 0.75
sleep(1)
green.value = 1
sleep(1)
green.value = 0.75
sleep(1)
green.value = 0.5
sleep(1)
green.value = 0.25
sleep(1)
green.value = 0
sleep(1)
Un filmulet cu cele 5 moduri de lucru este mai jos: