Cómo usar pulsadores con pines GPIO de Raspberry Pi

Si alguna vez has usado un LED con una Raspberry Pi, entonces probablemente sepas cómo funcionan las salidas GPIO. El código hace que la electricidad fluya a través de los pines de Entrada / Salida de Propósito General (GPIO), pasa a través de los LEDs y los ilumina. Pero, ¿alguna vez has intentado hacer lo contrario? Con los pulsadores, puedes hacer exactamente lo opuesto. ¡Este tutorial te muestra cómo convertir un pin GPIO en un pin de entrada, escuchando cada pulsación de botón que hagas!
Tabla de Contenidos
- Cómo funcionan los pulsadores
- Pulsadores de 4 pines
- Usando pulsadores con pines GPIO de Raspberry Pi
- Cómo usar pulsadores
- Hardware en pulsadores
- Comandos de importación
- Comandos de configuración
- Comandos en bucle
- Preguntas frecuentes
También lee: Cómo hacer LEDs intermitentes con la Raspberry Pi
Cómo funcionan los pulsadores
Un pulsador es un tipo de interruptor. Tiene dos pines conductores separados que impiden un circuito completo al estar separados entre sí. Cuando presionas un pulsador, en realidad estás uniendo los dos pines, completando el circuito. Pero si sueltas, hay un mecanismo similar a un resorte que separa los pines nuevamente.

También lee: Cómo convertir tu Raspberry Pi en una estación de videoconferencia
Pulsadores de 4 pines
El pulsador típico en kits de sensores tiene cuatro pines, con cada pin separado de los demás. Una placa de metal móvil se encuentra justo debajo del área del botón, que baja y conecta todos los otros pines cuando el pulsador se presiona hacia abajo.

Encontrarás dos placas dentro de un pulsador de 4 pines. Cada una está conectada a dos pines externos. Ambas placas se mantienen separadas entre sí y solo pueden conectarse presionando una tercera placa: la placa de metal debajo del botón.

De alguna manera, siempre hay dos pines conectados en un pulsador. Cuando presionas el pulsador de 4 pines, conectas los cuatro pines juntos.
También lee: Cómo programar un Arduino con una Raspberry Pi
Usando pulsadores con pines GPIO de Raspberry Pi
Esta vez, estamos haciendo que los pines GPIO de Raspberry Pi detecten una pulsación de botón de un pulsador. Cuando la electricidad pasa a través de él, la Raspberry Pi imprimirá un mensaje diciéndote que está funcionando.
Cosas que necesitarás
- Pulsador (4 pines)
- Resistor (uno entre 100Ω y 1000Ω debería funcionar)
- Cables de conexión
- Voltímetro (opcional)
- Raspberry Pi
- Monitor y teclado (o SSH)
También lee: Cómo instalar Windows 11 en una Raspberry Pi 4
Cómo usar pulsadores
- Abre tu editor de código preferido y pega el siguiente código:
import RPi.GPIO as GPIO
from time import sleep
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
GPIO.setup(7, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
while True:
if GPIO.input(7) == GPIO.HIGH:
print("¡El pin 7 está ALTO!")
elif GPIO.input(7) == GPIO.LOW:
print("El pin 7 está BAJO...")
sleep(0.15)Guarda como “rpi-pushbutton.py” (o cualquier nombre que desees siempre que la extensión del archivo sea la misma).
Construye el circuito. En un pin del pulsador, conéctalo al pin 7 y un resistor en paralelo. Conecta un cable de conexión a un pin GND (pines 6, 7, 14, 20, 25, 30, 34 o 39) en el otro lado de este resistor, luego conecta otro cable de conexión a un pin de 3.3V (pines 1 o 17) en un pin de pulsador separado.

Consejo: para encontrar el número de pin correcto, sostiene tu Raspberry Pi de manera que los pines GPIO estén en la esquina superior derecha. El pin superior izquierdo es el pin 1, y a su derecha está el pin 2. Debajo del pin 1 está el pin 3, a la derecha está el pin 4, y así sucesivamente.

- Enciende tu Raspberry Pi y abre la terminal. Usa
cdpara moverte al directorio del script de Python, luego ingresapython3 rpi-pushbutton.py. Si usaste un nombre de archivo diferente, usa ese en lugar de “rpi-pushbutton.”

- Deberías ver una nueva línea de texto que dice
El pin 7 está BAJO...cada 0.15 segundos en la terminal. Si presionas el botón, la nueva línea será¡El pin 7 está ALTO!.
Si cambias los pines GND y 3.3V, con 3.3V en el resistor y GND en el otro lado del pulsador, invertirás la lógica del pulsador. Saldrá ¡El pin 7 está ALTO! todo el tiempo y se convertirá en El pin 7 está BAJO cuando presiones el botón.

También lee: Las mejores alternativas a Raspberry Pi de 2024 que deberías revisar ahora
Hardware en pulsadores
Los pulsadores utilizan dos tipos de resistores: pull-up y pull-down. El que tiene 3.3V conectado al resistor es un resistor pull-up. Eleva el voltaje hacia arriba. Mientras tanto, los resistores pull-down bajan el voltaje al tener un pin GND conectado a ellos.
Aún puedes usar un pulsador sin un resistor, pero hacerlo deja tu pin GPIO en flotación. Un pin GPIO flotante no recibe carga eléctrica directa, por lo que busca cargas en su entorno. Si hay un campo electromagnético fuerte cerca, por ejemplo, simplemente medirá eso en su lugar.

Por eso necesitas un punto de referencia. Si conectas el pin GPIO a 0V (GND) por defecto, entonces medirá 0V mientras el botón no esté presionado. Pero si no lo haces, el valor del pin GPIO puede estar en cualquier lugar, ¡incluso en voltios negativos!
Los pines flotantes pueden hacer cosas interesantes, sin embargo. Si dejas un pin en flotación, puede detectar la diferencia de voltaje en el aire, midiendo incluso el efecto de mover tu dedo cerca del pin mismo. Es como un sensor de presencia electromagnética o algo así.
Es una pena que no puedas hacer eso en la Raspberry Pi, sin embargo. Para que eso sea útil, necesitarás pines analógicos, y la Raspberry Pi no los tiene.
Código para pulsadores
Sabiendo eso, deberías entender que el pin 7 detecta si pasan 3.3V o 0V a través de él. Si detecta 3.3V, entonces se reporta como ALTO. Pero si detecta 0V, entonces está BAJO.
Dividamos el código en tres partes: comandos de importación, comandos de configuración y comandos en bucle.
Comandos de importación
Estamos usando dos comandos de importación:
import RPi.GPIO as GPIO
from time import sleepimport RPi.GPIO as GPIO importa el módulo RPi.GPIO, que te permite hacer cosas con los pines GPIO de tu Raspberry Pi. Al agregar as GPIO al final, le estás diciendo a Python que escribir GPIO es equivalente a escribir RPi.GPIO. Incluso puedes reemplazarlo con otras cadenas, y el código debería seguir funcionando siempre que lo formatees correctamente.
Por otro lado, from time import sleep importa solo una parte del módulo de tiempo de Python. Te permite usar la función sleep().
Comandos de configuración
Estamos trabajando con los tres comandos del módulo RPi.GPIO en los comandos de configuración para fijar algunas configuraciones.
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
GPIO.setup(7, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)El módulo RPi.GPIO normalmente muestra un mensaje que te advierte sobre el uso de los pines GPIO tan pronto como inicias el script de Python. GPIO.setwarnings(False) evita que eso suceda.
GPIO.setmode(GPIO.BOARD) es otro comando del módulo RPi.GPIO. Le dice a Python que estás usando el pinout “BOARD”. Hay dos tipos de pinout en RPi.GPIO: BOARD y BCM. BOARD te permite elegir pines usando los números de pin. BCM (abreviatura de “Broadcom”) te permite elegir pines con su canal SOC Broadcom individual. BOARD es mucho más fácil de usar, ya que siempre es el mismo sin importar qué tipo de placa Raspberry Pi uses. El pinout BCM puede cambiar dependiendo de qué modelo uses.
Por último, GPIO.setup(7, GPIO.IN) te permite configurar el pin 7 como un pin de entrada. Utiliza la función .setup() y lee 7 como el pin que estás tratando de elegir. GPIO.IN significa que estás tratando de configurarlo como un pin de entrada.
También lee: Guía para principiantes de Arduino
Comandos en bucle
Los sistemas embebidos normalmente solo usan unas pocas líneas de código y las repiten indefinidamente. Diferentes lenguajes de programación utilizan diferentes formas de hacerlo. Pero el concepto es el mismo: utilizan algún tipo de bucle. Para Python, eso es while True:.
while True:
if GPIO.input(7) == GPIO.HIGH:
print("¡El pin 7 está ALTO!")
elif GPIO.input(7) == GPIO.LOW:
print("El pin 7 está BAJO...")
sleep(0.15)while True: te permite buclear el código indefinidamente. Todo lo que coloques en él se ejecutará para siempre mientras haya electricidad en la placa.
if GPIO.input(7) == GPIO.HIGH: es una declaración if. Dice que si el pin 7, que es un pin de entrada, se lee como ALTO, entonces debería hacer todo lo que hay dentro de él.
print("¡El pin 7 está ALTO!") está dentro de una declaración if. Todo lo que hace es imprimir ¡El pin 7 está ALTO! en la consola. Puedes reemplazar eso con cualquier cadena, número o variable que contenga esos.
A continuación está elif GPIO.input(7) == GPIO.LOW:. Es básicamente lo mismo que if GPIO.input(7) == GPIO.HIGH: excepto por la primera parte: usa elif en lugar de if. El código elif significa Else If. Lo que dice es que si todo el otro código anterior devuelve falso, entonces Python debería ejecutar esta declaración else-if.
Por último, sleep(0.15) pausa el código durante 0.15 segundos. ¿Por qué pausar el código en absoluto? Es principalmente por problemas de rendimiento. La Raspberry Pi enviará el código de salida tan rápido que hará que tu GUI se retrase un poco. Es aún más pronunciado si estás usando tu Raspberry Pi a través de SSH. Habrá un retraso notable que solo empeorará con el tiempo. Pausar el código lo ralentiza para evitar problemas de rendimiento.
También lee: Cómo programar Arduino a través de Visual Studio Code usando PlatformIO
Preguntas frecuentes
¿Es seguro intercambiar pines en caliente en la Raspberry Pi?
Intercambiar en caliente, o reemplazar los pines de la Raspberry Pi mientras está encendida, generalmente es una mala idea. Siempre es más seguro desconectarla de la fuente de alimentación antes de cambiar.
¿Qué hace que los pulsadores de 4 pines sean mejores que los pulsadores de 3 pines?
En términos de utilidad, son básicamente lo mismo. Pero tener cuatro pines te permite cablear el pulsador de 4 pines a otro pulsador en un circuito en serie.
¿Puedo convertir cualquier pin de la Raspberry Pi en un pin de entrada?
La Raspberry Pi puede tener 40 pines, pero solo 27 de ellos son GPIO. Solo puedes programar pines GPIO como pines de entrada y salida. La mayoría de los IDE no te permitirán reprogramar un pin que no sea GPIO como un pin de entrada.
Todas las fotos y capturas de pantalla por Terenz Jomar Dela Cruz