Manejo de LEDs con GPIO Zero en IOTeca

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 gpiozero import LED
from time import 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 gpiozero import LED
from signal import 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 gpiozero import LED
from signal import 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 gpiozero import PWMLED
from time import 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 gpiozero import PWMLED
from signal import 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 gpiozero import PWMLED
from signal import 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 gpiozero import 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 gpiozero import LED, Button
from signal import 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 gpiozero import LED, Button
from time import 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 gpiozero importt LED, Button
from signal import pause

led = LED(17)
button = Button(23)

while True:
	if button.is_pressed:
		print("Botón presionado")
		led.on()
	else:
		print("Botón no presionado")
		led.off()

pause()


Este y otros contenidos los podés aprender en el Curso de Raspberry Pi

Creado: 26/12/2019  

Publicidad

| Volver a Raspberry Pi |

Comentarios

Para poder comentar debés registrarte e ingresar al sitio.

jperez - 06/01/2020 a las 12:40

¿dónde puedo encontrar más info?

adrian - 06/01/2020 a las 15:05

en https://gpiozero.readthedocs.io está toda la documentación de la librería