🛠 Dominar las E/S en Banana Pi BPI-CM5

Banana Pi BPI-CM5: Módulo de cómputo SoC Amlogic A311D2 compatible con Raspberry Pi CM4 · intermediaire · Apprenez à configurer et utiliser les broches GPIO pour interagir avec des capteurs et actionneurs sur le module BPI-CM5.

Objetivos

Este tutorial tiene como objetivo introducirte en la programación de entradas/salidas digitales (GPIO) en el Banana Pi BPI-CM5. A diferencia de los microcontroladores, el BPI-CM5 es un módulo SoC potente (Amlogic A311D2) que requiere un enfoque de software específico para acceder a periféricos físicos. Configuraremos un pin como salida para controlar un LED y leer el estado de un botón pulsador. Esta habilidad es fundamental para cualquier proyecto IoT o de domótica que utilice este módulo.

Material Necesario

Pasos

  1. Identificación de Pines: El BPI-CM5 utiliza conectores Board-to-Board compatibles con CM4. Consulta la documentación técnica de tu placa base para identificar el encabezado GPIO físico. Los pines GPIO generalmente están numerados del 1 al 40, pero los números lógicos (BCM) difieren de los números físicos. Para este tutorial, usaremos la biblioteca RPi.GPIO o lgpio adaptada a la arquitectura ARM64.
  1. Preparación del Entorno: Conéctate por SSH o pantalla. Actualiza el sistema e instala las bibliotecas necesarias. En Debian/Ubuntu:
sudo apt update
sudo apt install python3-rpi.gpio python3-pip

Si rpi.gpio no funciona nativamente en Amlogic, usa lgpio:

sudo apt install python3-lgpio
  1. Cableado de Hardware:
  1. Programación: Crea un archivo test_gpio.py:
import lgpio
import time

# Inicialización
handle = lgpio.gpiochip_open(0)

# Configurar GPIO 17 como salida
lgpio.gpio_claim_output(handle, 17)
# Configurar GPIO 22 como entrada con pull-up
lgpio.gpio_claim_input(handle, 22, lgpio.SET_PULL_UP)

try:
    while True:
        # Encender LED
        lgpio.gpio_write(handle, 17, 1)
        time.sleep(0.5)
        # Apagar LED
        lgpio.gpio_write(handle, 17, 0)
        time.sleep(0.5)
        
        # Leer estado del botón (0 si está presionado debido al pull-up)
        estado = lgpio.gpio_read(handle, 22)
        if estado == 0:
            print("¡Botón presionado!")
except KeyboardInterrupt:
    pass
finally:
    lgpio.gpiochip_close(handle)
  1. Ejecución: Ejecuta el script con privilegios de root si es necesario:
sudo python3 test_gpio.py

Verificación

Deberías observar el LED parpadeando a intervalos regulares. Cuando presiones el botón, debería aparecer el mensaje "¡Botón presionado!" en la terminal. Si el LED no se enciende, verifica la polaridad (ánodo/cátodo) y el valor de la resistencia. Si el botón siempre se considera presionado, verifica el cableado a tierra.

Para Ir Más Allá

Explora las interfaces avanzadas del BPI-CM5. Usa el bus I2C para conectar un sensor de temperatura (como el DS18B20 o un BME680) o el bus SPI para una pantalla OLED. El módulo también cuenta con dos interfaces de cámara MIPI-CSI; intenta capturar una imagen mediante OpenCV para explotar el ISP de 16 MP integrado, ofreciendo capacidades muy superiores a un simple GPIO.

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales