đź•’ : 3 h maximum

Prérequis:

  • cours Raspberry Pi
  • cours libgpiod
  • Avoir fait RPI_0 et disposer d’un Raspberry PI OS64 avec ssh
  • Savoir utiliser une plaque d’essais ,et câbler des LED de couleurs.
  • Utilisation de fritzing pour les schĂ©mas et plans de câblage
  • Câbler un interrupteur, un relais REED ou ILS interrupteur Ă  lame souple et son AIMANT
  • Pull UP et Pull Down , RĂ©sistance de rappel haut , et rĂ©sistance de rappel bas , Externe et Interne

But:

  • Mettre en oeuvre un code pilotant les GPIO en Shell Bash et ligne de commande
  • Estimation de la valeur de la resistance de limitation de courant dans une led
  • Utilisation de PULL UP / DOWN sur GPIO , externe et interne

Répertoire du travail:

~/Works/RPI_1


Les GPIO en ligne de commande sous RASPI OS 64

Brochage du connecteur RPI (J8)

Les GPIO (General Purpose Input/Output) du Raspberry Pi sont des broches numĂ©riques programmables qui permettent d’interagir avec des composants Ă©lectroniques externes. Elles peuvent ĂŞtre configurĂ©es en entrĂ©e (pour lire un signal, comme un bouton-poussoir) ou en sortie (pour envoyer un signal, comme allumer une LED).

Caractéristiques principales :

  • Broches numĂ©riques : Fonctionnent en 3,3V (ne supportent pas le 5V en entrĂ©e sans prĂ©cautions).
  • Configurables : En entrĂ©e (input) ou en sortie (output) via des commandes logicielles.
  • Protocoles supportĂ©s : Certaines broches gèrent des protocoles comme I2C, SPI, UART.
  • PWM (Pulse Width Modulation) : Certaines broches permettent de gĂ©nĂ©rer un signal PWM pour contrĂ´ler des moteurs ou des LEDs.

Utilisations courantes :

  • ContrĂ´ler des LEDs, des moteurs ou des relais.
  • Lire des capteurs (tempĂ©rature, humiditĂ©, boutons, etc.).
  • Communiquer avec d’autres appareils via I2C/SPI.

Exemple de broches GPIO (modèle 40 broches, RPI3/4 :

  • Broches 3,3V et 5V : Alimentation.
  • Broches GND : Masse (ground).
  • Broches GPIO numĂ©rotĂ©es (ex: GPIO2, GPIO17, etc.).

⚠️ Attention : Il faut toujours utiliser des rĂ©sistances de limitation de courant pour Ă©viter d’endommager le Raspberry Pi.

Ces broches sont contrĂ´lables via des langages comme Python (bibliothèque RPi.GPIO ou gpiozero), C, ou des scripts shell.

La commande pinout

Utiliser les GPIO, avec libgpiod

Piloter une LED ROUGE

cours sur les GPIO du Raspberry Pi avec libgpiod

Pour dĂ©couvrir les gpio , on va utiliser une plaque d’essai , une led rouge et une rĂ©sistance de limitation pour la tension de 3,3V

Câblage

Repèrer l’anode et la cathode de la LED

la ligne du haut sera au 3,3V (on prend l’habitude de mettre les alimentations , le 0V ligne en bas fil bleu et 3,3V ici le +3,3V)

Le fil jaune ,signal de commande GPIO17 sur l’anode la cathode au 0V (masse, terre..) a travers la rĂ©sistance de limitation de courant.

Schéma LED ROUGE GPIO17

Calcul de la résistance de limitation

on va apprendre à estimer la valeur de la résistance de limitation de courant de la LED

La patte la plus courte est la Cathode , K ,« K » vient de l’allemand « Kathode », et son usage persiste en électronique pour éviter des ambiguïtés.

Anode la plus longue (la plus), si les pattes sont coupĂ©es … le mĂ©plat va permettre de repĂ©rer l’anode a droite la cathode Ă  gauche

un moyen mnĂ©motechnique : on dit plus facilement l’alphabet de A Ă  K et pas de K Ă  A , pour retenir le sens du courant

les caractéristiques des diodes LED

Calculer la résistance de limitation du courant en fonction de la couleur

https://www.digikey.fr/fr/resources/conversion-calculators/conversion-calculator-resistor-color-code

pour avoir la valeur de votre résistor.

Pour la led rouge par exemple le point de fonctionnement pour une bonne luminosité est de 1.93 V pour 20 mA

R=U/I   

U=3.3-1.93

Donner R

remarque: Les résistances misent à disposition sont bien pour toutes les couleurs.

on va piloter la led en ligne de commande

# allumer la led
gpioset gpiochip0 17=1
# eteindre la led
gpioset gpiochip0 17=0

Utiliser shell bash pour réaliser des scripts

l’avantage de shell bash, est qu’ils sont vite rĂ©alisĂ©s , et pratique pour tester rapidement un montage.

Mais il faut préférer un langage comme le C/C++ , voir le python .

code bash shell blinkgpio17.sh

répertoire: shellbash code: blinkgpio17.sh

#!/bin/bash
# Clignotement LED sur GPIO17
while true; # boucle sans fin
do
  gpioset gpiochip0 17=1 && sleep 1  #allume la led durant 1 seconde
  gpioset gpiochip0 17=0 && sleep 1  #eteint la led durant 1 seconde
done

rendre exécutable et tester blinkgio17.sh

quelle est la fréquence de clignotement de la LED?

Ajouter une LED verte sur votre plaque d’essais sur GPIO27

Pour faire les câblages il est prĂ©fĂ©rable d’Ă©teindre vos Raspberry Pi , pour les arrĂŞter , sudo halt et dĂ©brancher quand il n y a plus de signe d’activiter.

Pour valider vos acquis précédent, vous aller câbler une LED verte en justifiant vos choix.

Proposer un schéma et un câblage, et le calcul de la résistance de limitation pour la led verte. (utiliser Fritzing)

La led verte sera sur GPIO27 , on garde la rouge précédente sur GPIO17

Proposer la ligne commande qui va allumer la led verte

Donner un shell bash script qui va faire alterner les 2 leds à la fréquence de 0.1 Hertz.

répertoire: deuxleds , code : alterne2.sh

Entrée et Sortie

on va introduire ici le relais ILS , interrupteur Ă  lame souple , qui va nous servir de capteur , prĂ©sence d’un champ magnĂ©tique (aimant) ou non .

L’Ă©tat de l’ILS sera lu sur GPIO27 (sur notre câblage GPIO27 lit 0 si aucun aimant et 1 si aimant !)

On garde une LED ROUGE avec sa résistance de limitation de courant sur GPIO17

Schéma ILS et LED ROUGE, GPIO27 et GPIO17

Identifier la résistance limitation de courant

Justifier votre réponse

On câble ici un ILS (interrupteur à lame souple)

Il est associé à un aimant

si il n’y a pas d’aimant donner l’Ă©tat logique sur GPIO27

pourquoi ?

on approche l’aimant de l’ils quel est l’Ă©tat logique sur GPIO27

pourquoi ?

Donner la commande sous linux pour lire l’état de GPIO27

Utiliser cette commande pour confirmer avec aimant et sans

Justifier la présence de la résistance de rappel bas (pull down)

Code pour piloter la LED avec l’aimant (sur ILS)

Répertoire: piloteled , code : piloteled.sh

#!/bin/bash

# Configuration
LED_GPIO="17"      # Broche BCM17 pour la LED
ILS_GPIO="27"      # Broche BCM27 pour l'ILS
CHIP="gpiochip0"   # Chip GPIO par défaut

# Configurer la LED en sortie
gpioset $CHIP $LED_GPIO=0  # Initialisation Ă  OFF

echo "Monitoring ILS sur GPIO$ILS_GPIO -> LED GPIO$LED_GPIO (Ctrl+C pour quitter)"

# Boucle principale
while true; 
do
  # Lire l'état de l'ILS (sortie brute: "1" ou "0")
  STATE=$(gpioget $CHIP $ILS_GPIO)
  
  # Inverser l'état pour la LED (car pull-up: 0=actif)
  if [ "$STATE" = "0" ]; then
    gpioset $CHIP $LED_GPIO=1  # LED ON
  else
    gpioset $CHIP $LED_GPIO=0  # LED OFF
  fi
  
  sleep 0.1  # Délai optionnel
done

Utilisons la résistance de rappel haut

on va modifier le câblage, pour le simplifier, ce qui ajoutera un peu plus de code..

enlevons la résistance de rappel externe bas, et mettons a la place notre ILS

Donc on simplife le cablage , le cable rouge de l’ILS disparait et la rĂ©sistance externe aussi !

Donner le schéma de câblage avec Fritzing avec les modifications

Donner l’etat de GPIO27 si il y a l’aimant.

c’est très net ici, aucun doute possible !

Donner l’Ă©tat de GPIO27 si l y n’a plus d’aimant.

attention … a priori la broche est en entrĂ©e .. donc en haute impĂ©dance, et il n’y a pas d’état logique imposĂ©.

ici c’est une antenne!

Utilisation d’une rĂ©sistance de pull up interne

Dans le Data sheet du SOC BCM2837 on voit qu’une rĂ©sistance de rappel interne de 50 kO est intĂ©grĂ©e pour chaque GPIO

La solution avec une commande la libgpiod :

gpioget --bias=pull-up gpiochip0 27

–bias=pull-up va ajouter sur l’entrĂ©e 27 une rĂ©sistance interne de pull UP

Code pour piloter la led avec l’aimant sans la rĂ©sistance de rappel externe.

Répertoire: piloteled , code piloteledsr.sh

#!/bin/bash

# Configuration
LED_GPIO="17"      # Broche BCM17 pour la LED
ILS_GPIO="27"      # Broche BCM27 pour l'ILS
CHIP="gpiochip0"   # Chip GPIO par défaut

# Configurer la LED en sortie
gpioset $CHIP $LED_GPIO=0  # Initialisation Ă  OFF

echo "Monitoring ILS sur GPIO$ILS_GPIO -> LED GPIO$LED_GPIO (Ctrl+C pour quitter)"

# Boucle principale
while true; do
  # Lire l'état de l'ILS (sortie brute: "1" ou "0")
  STATE=$(gpioget --bias=pull-up $CHIP $ILS_GPIO)
  
  # Inverser l'état pour la LED (car pull-up: 0=actif)
  if [ "$STATE" = "0" ]; then
    gpioset $CHIP $LED_GPIO=1  # LED ON
  else
    gpioset $CHIP $LED_GPIO=0  # LED OFF
  fi
  
  sleep 0.1  # Délai optionnel
done

Rendre ce code exécutable , et tester

Conclure sur le développement de projet en Shell bash