samedi 8 mars 2014

Contrôler les pins GPIO du Raspberry Pi

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

Sans trop de surprise, cette première expérience 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).

Voici un schéma montrant les 40 pins GPIO du Raspberry Pi 2:



Et voici les 26 pins GPIO du premier modèle de Raspberry Pi.


Puisque les concepteurs de matériel informatique détestent la simplicité, ces pins 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 pin 27 se situe entre la pin 17 et la pin 22, la pin 8 est à côté de la pin 25, et plusieurs numéros (1, 5, 6, 12, 13, 16, etc.) n'existent même pas.  Comme si ce n'était pas suffisant, certaines des pins portent un numéro différent selon que votre Raspberry Pi est de révision 1.0 ou 2.0 (le dessin ci-dessus concerne la révision 2).

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

Allumons une LED

Nous allons relier une LED à la pin GPIO 25 (en BCM), qui est en fait la 22e pin 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 pins GND, par exemple la numéro 6).  De cette façon, lorsque la pin 25 se mettra au niveau logique "haut" (3,3 V), la LED s'allumera.  Lorsque la pin 25 sera au niveau logique "bas" (0 V), la LED sera éteinte.

La LED doit être placée dans le bon sens:  la broche la plus longue du côté de la pin 25 du Raspberry Pi, et la 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. Puisque ce programme n'est pas très long, vous pouvez le recopier dans Nano, l'éditeur de texte présent par défaut dans le Raspberry Pi.  Personnellement, ne disposant pas d'un moniteur HDMI pour mon Raspberry PI, je préfère écrire mes programmes sur un PC (avec l'éditeur NotePad++), et je les copie sur le Raspberry Pi en utilisant le logiciel WinSCP.

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.



Si vous tapez "python BlinkBCM.py", la LED devrait se mettre à clignoter.  Si ce n'est pas le cas, revérifiez votre circuit.  (Avez-vous branché la LED dans le bon sens?  Est-elle branchée à la bonne pin?). Pour interrompre l'exécution du programme, vous pouvez faire "contrôle-c".

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




Ajoutons un bouton

Ensuite, nous allons utiliser un bouton poussoir qui permettra de mettre la pin GPIO 24 (la 18ème pin) à 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 pin de 3,3 volts et non à une pin 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 pins GPIO.
2) On choisit le mode de numérotation BCM
3) On indique que la pin 24 sera une entrée
4) On indique que la pin 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é (par la commande  "python boutonLedBOARD.py "), la LED s'allume pendant que le bouton est enfoncé, et s'éteint quand le bouton est relâché.

Maintenant, on pourrai 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 pin 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 pins 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

Related Posts Plugin for WordPress, Blogger...