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.
fromgpiozeroimportLEDfromtimeimportsleep 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().fromgpiozeroimportLEDfromsignalimportpause 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
fromgpiozeroimportLEDfromsignalimportpause 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).
fromgpiozeroimportPWMLEDfromtimeimportsleep 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().
fromgpiozeroimportPWMLEDfromsignalimportpause 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
fromgpiozeroimportPWMLEDfromsignalimportpause 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.
fromgpiozeroimportLED, 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:
fromgpiozeroimportLED, Buttonfromsignalimportpause 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:
fromgpiozeroimportLED, Buttonfromtimeimportsleep 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.
fromgpiozeroimportt LED, Buttonfromsignalimportpause led = LED(17) button = Button(23)while True:ifbutton.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
