Manejo de LEDs con GPIO Zero
Desde luces intermitentes hasta plicaciones IoT, los pines GPIO de la Raspberry Pi hacen que la programación de objetos se aaccesible para entusiastas y profresionales.
Desde luces intermitentes hasta plicaciones IoT, los pines GPIO de la Raspberry Pi hacen que la programación de objetos se aaccesible para entusiastas y profresionales.
Ben Croston creó la biblioteca para Python llamada RPi.GPIO que permitió a las personas controlar los pines GPIO mediante de sus programas Python, y se convirtió en un éxito tanto en la educación como en proyectos personales.
Ben Nuttall con la participación de Dave Jones, creo una nueva librería llamads GPIO Zero para que el código sea más accesible, creando interfaces simpre cpara componenetes como LEDs y pulsadores, que luego se extendió a algunos sensores y módulos adicionales simples.
En este tutorial veremos como manejar LEDs y pulsadores con GPIO Zero
Encendido y Apagado de LED
Antes de comenzar concetaremos un LED al GPIO17.
Importamos de gpiozero LED. Como parámetro de LED le pasamos el número de pin (BCM). Para encender el utilizamos el método on() y para apagarlo el método off(). Intercalamos unos temporizadores, para generar un parpadeo del LED.
from
gpiozeroimport
LEDfrom
timeimport
sleep led1 = LED(17)while True
: led1.on() sleep(1) led1.off() sleep(1)
Parpadeo de un LED
Podemos generar el mismo parpadeo utlizando directamente el método blink().from
gpiozeroimport
LEDfrom
signalimport
pause led1 = LED(17) led1.blink() pause()
Blink está definido con una serie de parámetros para configurarlo.
blink(on_time=1, off_time=1, n=None,background=True)
- on_time (float) – Número de segundos prendido.
- off_time (float) – Número de sehundos apagado.
- n (int or None) – Número de parpadeos; None es por siempre
from
gpiozeroimport
LEDfrom
signalimport
pause led1 = LED(17) led1.blink(.5,.4,3) pause()
Donde el número de segundos prendido será 0,5 , apagado 0,4 y parpadeará 3 veces.
PWM con LED
Para utilizar PWM en un LED debermos importar PWMLED de gpiozero, y pasarle como parámetro el número de pin (BCM).
from
gpiozeroimport
PWMLEDfrom
timeimport
sleep led = PWMLED(17)while True
: led.value = 0 # prendido sleep(1) led.value = 0.5 # medio brillo sleep(1) led.value = 1 # todo el brillo sleep(1)
Como vemos el atributo value determina el nivel de brillo entre 0 y 1.
PWMLED con pulse
Para generar un ciclo de credimiento y decrecimiento del brillo se utiliza el metodo pulse().
from
gpiozeroimport
PWMLEDfrom
signalimport
pause led = PWMLED(17) led.pulse() pause()
Pulse está definido con una serie de parámetros para configurarlo.
pulse(fade_in_time=1, fade_out_time=1, n=None, background=True)
- fade_in_time (float) – Número de segundos en crecimiento.
- fade_out_time (float) – Número de segundos decreciendo.
- n (int or None) – Numeros de veces del proceso; None es por siempre
from
gpiozeroimport
PWMLEDfrom
signalimport
pause led = PWMLED(17) led.pulse(3,3,2) pause()
Donde el ciclo crecerá y decrecera en brillo por 3 segundos y ejecutará dicho ciclo en 2 oportunidades.
Utilización de Pulsadores
Para los siguiente ejemplos deberemos conectar un pulsador al GPIO23 y GND.
Para utilizar pulsadores, GPIO ZERO define a Button.
Comenzaremos importando Button de gpiozero y utlizado algunos de sus eventos definidos.
from
gpiozeroimport
LED, Button led = LED(17) button = Button(23,pull_up=True) button.hold_time = 3 button.when_pressed = led.on button.when_held = led.off button.when_released = led.off
Como parámetros de Button indicamos el pin, pull_up=True. Por defecto está en True y no necesitamos colocarlo. Sólo si queremos configurarlo como False debemos indicarlo. En este caso se estaría indicando una configuración pull-down y el pulsador deberia conectarse a 3.3 V.
Eventos:
- button.when_pressed, indica que sucede cuando el botón está presionado
- button.when_held, indica que sucede cuando se alcanza el tiempo determinado en hold_time, en este caso 3 segundos.
- button.when_released, indica que sucede cuando el botón está liberado
PAUSE
Aclaremos que función cumple pause() en los ejemplos anteriores. Veamos el siguiente ejemplo:
from
gpiozeroimport
LED, Buttonfrom
signalimport
pause led = LED(17) button = Button(23) button.when_pressed = led.on button.when_released = led.off pause()
pause() actua como el equivalente a un bucle con un mìnimo temporizador, similar a como se emplea en el siguiente ejemplo:
from
gpiozeroimport
LED, Buttonfrom
timeimport
sleep led = LED(17) button = Button(23)while True
: led.value = button.value sleep(0.01)
Estados de Button
is_pressed indica que el botón está presionado.
from
gpiozeroimport
t LED, Buttonfrom
signalimport
pause led = LED(17) button = Button(23)while True
:if
button.is_pressed:"Botón presionado"
) led.on()else
:"Botón no presionado"
) led.off() pause()
Este y otros contenidos los podés aprender en el Curso de Raspberry Pi