como-usar-gpio-raspberry-pi

Qué son y cómo usar los GPIO en Raspberry Pi

  • 5 min

Los GPIO son pines de entrada/salida de propósito general que permiten a la Raspberry Pi interactuar con dispositivos externos.

Estos pines pueden configurarse como entradas (para leer datos) o como salidas (para enviar señales).

Los GPIO permiten a la Raspberry Pi interactuar con el mundo físico, ya sea para leer datos de sensores o para controlar dispositivos externos como LEDs, motores o relés.

Características principales de los GPIO

  • Voltaje: 3.3V (nunca exceder este voltaje).
  • Corriente máxima por pin: 16mA.
  • Corriente total máxima para todos los pines: 50mA.
  • Pines disponibles: Depende del modelo de Raspberry Pi, pero la mayoría tiene 40 pines GPIO.

Los GPIO en Raspberry Pi son más “delicados” que los de un Arduino o un ESP32. Tratadlos con cuidado, o podéis convertir vuestra Raspberry en un pisapapeles.

Los GPIO funcionan a 3.3V. No excedáis esta tensión, o dañaréis la Raspberry Pi.

Salida digital con GPIO

Para utilizar los GPIO en la Raspberry Pi, es necesario configurar los pines como entradas o salidas. Esto se puede hacer utilizando lenguajes de programación como Python (que es el más comúnmente utilizado para aprender).

Para poder usarlos, tenemos la biblioteca RPi.GPIO es una de las más populares para interactuar con los GPIO en Python. Podemos instalarla ejecutando el siguiente comando en la terminal de tu Raspberry Pi:

sudo apt-get update
sudo apt-get install python3-rpi.gpio

Ahora, podemos configurar un pin GPIO como salida y encender un LED:

import RPi.GPIO as GPIO
import time

# Configura el modo de los pines
GPIO.setmode(GPIO.BCM)  # Usa la numeración BCM (Broadcom)

# Define el pin GPIO como salida
LED_PIN = 18
GPIO.setup(LED_PIN, GPIO.OUT)

try:
    while True:
        # Enciende el LED
        GPIO.output(LED_PIN, GPIO.HIGH)
        time.sleep(1)  # Espera 1 segundo

        # Apaga el LED
        GPIO.output(LED_PIN, GPIO.LOW)
        time.sleep(1)  # Espera 1 segundo
except KeyboardInterrupt:
    # Limpia los pines GPIO al salir
    GPIO.cleanup()

En este ejemplo, el LED conectado al pin GPIO 18 se enciende y apaga cada segundo.

Entrada digital con GPIO

Además de controlar dispositivos de salida, los GPIO también pueden utilizarse para leer datos de dispositivos de entrada (como sensores o señales proporcionadas por otros dispositivos).

Por ejemplo, así podríamos configurar un pin GPIO como entrada y leer un nivel de tensión proporcionado por otro dispositivo:

import RPi.GPIO as GPIO
import time

# Configura el modo de los pines
GPIO.setmode(GPIO.BCM)

# Define el pin GPIO como entrada
INPUT_PIN = 17
GPIO.setup(INPUT_PIN, GPIO.IN)

try:
    while True:
        # Lee el nivel de tensión en el pin
        input_state = GPIO.input(INPUT_PIN)
        if input_state == GPIO.HIGH:
            print("Nivel de tensión ALTO detectado")
        else:
            print("Nivel de tensión BAJO detectado")
        time.sleep(0.1)  # Espera 100ms para evitar lecturas rápidas
except KeyboardInterrupt:
    # Limpia los pines GPIO al salir
    GPIO.cleanup()

En este ejemplo,

  • El programa lee el nivel de tensión en el pin GPIO 17, que podría estar conectado a otro dispositivo que proporciona una señal de 3.3V (ALTO) o 0V (BAJO).
  • Dependiendo del nivel de tensión, se imprime un mensaje en la consola.

Uso de resistencias pull-up y pull-down

Cuando se utilizan entradas GPIO, es común utilizar resistencias pull-up o pull-down para asegurar que el pin tenga un estado definido cuando no está siendo activado por un dispositivo externo.

La Raspberry Pi tiene resistencias pull-up y pull-down internas (de entre 50k-60k) que pueden ser activadas mediante software.

Si deseas utilizar una resistencia pull-down, puedes hacerlo de la siguiente manera:

GPIO.setup(INPUT_PIN, GPIO.IN, pull_up_down=GPIO.PUD_UP)  # Resistencia pull-up
# o
GPIO.setup(INPUT_PIN, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)  # Resistencia pull-down

En la siguiente entrada, veremos cómo leer un pulsador utilizando un GPIO.

Ejemplos prácticos