samedi 8 mars 2014

Contrôler les broches GPIO du Raspberry Pi en python

(Plus récente mise à jour: 10 janvier 2020)

Je vous explique aujourd'hui comment faire un programme en Python permettant de lire les entrées et de contrôler les sorties GPIO (general purpose input output) du Raspberry Pi.

Cette première exploration consistera à allumer une LED en appuyant sur un bouton poussoir: nous aurons donc l'occasion d'utiliser une entrée (commandée par le bouton) et une sortie (qui contrôlera la LED).

La plupart des modèles de Raspberry Pi comportent 40 broches GPIO:



Si toutefois vous utilisez un très vieux modèle, il ne comporte que 26 broches:


Puisque les concepteurs de matériel informatique détestent la simplicité, ces broches peuvent être numérotées de deux façons différentes.  On peut les numéroter en mode BOARD (en bleu sur le dessin) ou en mode BCM (en jaune sur le dessin).

Le mode BCM semble défier toute logique:  la broche 27 se situe entre la broche 17 et la broche 22, la broche 8 est à côté de la broche 25, et plusieurs numéros (1, 5, 6, 12, 13, 16, etc.) n'existent même pas.

La numérotation en mode BOARD respecte l'ordre dans lequel les broches sont disposées sur la carte. Mais attention:  certaines broches ne peuvent pas être utilisées comme entrée, ni comme sortie programmable.  Quoi que vous fassiez, les broches 2 et 4 sont à 5 V, les broches 1 et 17 sont à 3,3 V, et les broches 6, 9, 14, 20, 25, 30, 34 et 39 sont à 0 V (GND).

Allumons une LED

Nous allons relier une LED à la broche GPIO 25 (en BCM), qui est en fait la 22e broche si on les compte dans l'ordre (en mode BOARD). Pour protéger la LED, il faut la mettre en série avec une résistance d'une centaine de ohms (ça peut être un peu plus) qui est elle-même reliée à la masse (une des nombreuses broches GND, par exemple la numéro 6).  De cette façon, lorsque la broche 25 se mettra au niveau logique "haut" (3,3 V), la LED s'allumera.  Lorsque la broche 25 sera au niveau logique "bas" (0 V), la LED sera éteinte.

La LED doit être placée dans le bon sens:  sa broche la plus longue du côté de la broche 25 du Raspberry Pi, et sa broche la plus courte du côté de la résistance.

Avant d'ajouter le bouton, on peut mettre notre petit circuit à l'épreuve avec le traditionnel programme qui fait clignoter une LED.

Le programme suivant, intitulé BlinkBCM.py, est conçu pour faire clignoter la LED.  Les deux premières lignes du programme ont principalement pour but de me permettre d'insérer des caractères accentués à l'intérieur des commentaires.  Fiez-vous sur les commentaires pour comprendre le fonctionnement du reste du programme.
-

-

Pour exécuter ce programme, une solution simple consiste à copier son contenu dans Thonny. La LED devrait se mettre à clignoter lorsque vous cliquez sur le bouton "Run". Vous cliquez sur le bouton "Stop" pour interrompre le programme.

Une autre option consiste à enregistrer le fichier sur votre Raspberry Pi au moyen d'un éditeur de texte en l'appelant, par exemple, "blinkBCM.py", et écrire la commande "python BlinkBCM.py" dans le terminal pour démarrer le programme. Pour interrompre l'exécution du programme, vous pouvez faire "contrôle-c".

Le programme ci-dessus utilisait la numérotation BCM, et faisait donc référence à la broche 25 du Raspberry Pi.  Si vous préférez, vous pouvez utiliser le mode BOARD et faire référence à la broche 22 (voir le programme ci-dessous).
-

-

Ajoutons un bouton

Ensuite, nous allons utiliser un bouton poussoir qui permettra de mettre la broche GPIO 24 (la 18ème broche) à 3,3 V (si le bouton est enfoncé) ou à 0 V (si le bouton est relâché).  Pour ce faire, le bouton sera relié à une résistance de tirage (j'ai utilisé 10 kilohoms).

Attention:  votre bouton doit être relié à une broche de 3,3 volts et non à une broche de 5 V!  Les entrées du Raspberri Pi sont conçues pour fonctionner en 3,3 V.

Voici le programme en mode "BCM":

1)  On importe la bibliothèque RPi.GPIO, spécialement conçue pour nous permettre d'interagir avec les broches GPIO.
2) On choisit le mode de numérotation BCM
3) On indique que la broche 24 sera une entrée
4) On indique que la broche 25 sera une sortie
5) Jusqu'à l'interruption du programme, on vérifie sans cesse l'état de l'entrée 24, et on règle la sortie 25 à la même valeur.
-
-
Si vous préférez la numérotation en mode  "BOARD":

-
-

Quand ce programme est exécuté, la LED s'allume pendant que le bouton est enfoncé, et s'éteint quand le bouton est relâché.

Maintenant, on pourrait ajouter un potentiomètre qui nous permettrait de contrôler de façon graduelle l'intensité lumineuse de la LED.  Pour ce faire, il s'agit d'utiliser une des entrées analogique du Raspberry Pi, comme par exemple la broche numéro...quoi?!?!?   Le Raspberry Pi ne comporte pas d'entrées analogiques???

Ha bon.  Alors nous nous arrêtons ici...pour l'instant.

Voir l'article suivant:  Lecture de capteurs analogiques sur le Raspberry Pi

Si vous préférez, vous pouvez également contrôler les broches GPIO au moyen de Scratch ou de Processing.

Yves Pelletier (Twitter:  @ElectroAmateur)

Source:  Getting Started With the Raspberry Pi, par Matt Richardson et Shawn Wallace.

1 commentaire:

  1. Bonjour et merci pour votre travail!
    J'ai juste un petite question qui va surement vous sembler bête mais ou faut-il mettre le fichier .py dans le Pi?
    Merci

    RépondreSupprimer