🛠 Maîtriser les E/S sur Banana Pi BPI-CM5
Objectifs
Ce tutoriel vise à vous initier à la programmation des entrées-sorties numériques (GPIO) sur le Banana Pi BPI-CM5. Contrairement aux microcontrôleurs, le BPI-CM5 est un module SoC puissant (Amlogic A311D2) qui nécessite une approche logicielle spécifique pour accéder aux périphériques physiques. Nous allons configurer une broche en sortie pour piloter une LED et lire l'état d'un bouton-poussoir. Cette compétence est fondamentale pour tout projet IoT ou de domotique utilisant ce module.
Matériel nécessaire
- Module Banana Pi BPI-CM5 (avec carte porteuse compatible CM4 ou adaptateur GPIO spécifique)
- Alimentation 5V stable
- Carte SD ou stockage eMMC avec Linux (Ubuntu, Debian ou Armbian)
- 1 LED rouge et une résistance de 220 à 330 ohms
- 1 Bouton-poussoir
- Fils de connexion (jumpers)
- Multimètre (optionnel pour la vérification de tension)
Étapes
- Identification des broches : Le BPI-CM5 utilise des connecteurs Board-to-Board compatibles CM4. Consultez la documentation technique de votre carte porteuse pour identifier le header GPIO physique. Les broches GPIO sont généralement numérotées de 1 à 40, mais les numéros logiques (BCM) diffèrent des numéros physiques. Pour ce tutoriel, nous utiliserons la bibliothèque
RPi.GPIOoulgpioadaptée à l'architecture ARM64.
- Préparation de l'environnement : Connectez-vous en SSH ou via un écran. Mettez à jour le système et installez les bibliothèques nécessaires. Sous Debian/Ubuntu :
sudo apt update
sudo apt install python3-rpi.gpio python3-pip
Si rpi.gpio ne fonctionne pas nativement sur Amlogic, utilisez lgpio :
sudo apt install python3-lgpio
- Câblage matériel :
- Reliez la broche GPIO 17 (numéro physique 11 sur beaucoup de cartes CM4) à l'anode (patte longue) de la LED via la résistance.
- Reliez la cathode de la LED au GND (masse).
- Reliez une broche du bouton à la broche GPIO 22 (physique 15) et l'autre au GND. Nous activerons une résistance de pull-up logicielle.
- Programmation : Créez un fichier
test_gpio.py:
import lgpio
import time
# Initialisation
handle = lgpio.gpiochip_open(0)
# Configuration GPIO 17 en sortie
lgpio.gpio_claim_output(handle, 17)
# Configuration GPIO 22 en entrée avec pull-up
lgpio.gpio_claim_input(handle, 22, lgpio.SET_PULL_UP)
try:
while True:
# Allumer la LED
lgpio.gpio_write(handle, 17, 1)
time.sleep(0.5)
# Éteindre la LED
lgpio.gpio_write(handle, 17, 0)
time.sleep(0.5)
# Lire l'état du bouton (0 si pressé grâce au pull-up)
etat = lgpio.gpio_read(handle, 22)
if etat == 0:
print("Bouton pressé !")
except KeyboardInterrupt:
pass
finally:
lgpio.gpiochip_close(handle)
- Exécution : Lancez le script avec les droits root si nécessaire :
sudo python3 test_gpio.py
Vérification
Vous devez observer la LED clignoter à intervalle régulier. Lorsque vous appuyez sur le bouton, le message « Bouton pressé ! » doit s'afficher dans le terminal. Si la LED ne s'allume pas, vérifiez la polarité (anode/cathode) et la valeur de la résistance. Si le bouton est toujours considéré comme pressé, vérifiez le câblage vers la masse.
Pour aller plus loin
Explorez les interfaces avancées du BPI-CM5. Utilisez le bus I2C pour connecter un capteur de température (comme le DS18B20 ou un BME680) ou le bus SPI pour un affichage OLED. Le module dispose également de deux interfaces caméra MIPI-CSI ; essayez de capturer une image via OpenCV pour exploiter l'ISP 16 MP intégré, offrant des possibilités bien supérieures à un simple GPIO.