Allumer et éteindre une LED avec la Raspberry Pi et Python.
CommentairesCe tutoriel est le premier d’une série dédiée à l’utilisation des ports GPIO de la Raspberry Pi contrôler des composants électroniques.
Vous le savez sans doute, la Raspberry Pi possède des ports appelés GPIO (General Purpose Input Output) qui permettent de contrôler un certain nombre de composants électroniques.
Dans ce tutoriel, nous allons voir comment utiliser ces ports GPIO pour contrôler une LED avec la Raspberry Pi.
Le matériel nécessaire
Pour suivre ce tutoriel, vous aurez besoin du matériel suivant :
- une Raspberry Pi
- son alimentation
- sa carte MicroSD
- un kit basique d’électronique, avec LED, résistances et plaque de test.
Ce tutoriel peut être suivi totalement sans avoir besoin de souder le moindre composant.
Par ailleurs, vous devrez avoir installé Raspbian sur votre carte SD, et avoir un moyen de contrôler votre Raspberry Pi, soit directement via clavier/souris/écran, soit via SSH.
Les notions de base autour des GPIO
Les ports GPIO sont des ports physiques se présentant généralement sous forme de picots métalliques carrés qui permettent de transmettre un signal électrique.
Un port GPIO transmet un signal relativement binaire (pas de courant ou du courant). Dans le cas de la Raspberry Pi, les ports GPIO travaillent en 3.3 V et environ 20 mA.
Les ports GPIO sont donc un moyen simple de communiquer ou de contrôler des éléments physiques.
Les modèles les plus récents de la Raspberry Pi disposent de 40 connectiques GPIO, qui se divisent en différentes catégories avec des usages spécifiques.
- Power + : Alimentation électrique continue
- GND : Ground = Retour à la terre
- I2C : Protocole série synchrone
- SPI : Autre protocole série synchrone
- UART : Protocole asynchrone + conversion communication série vers parallèle.
- GPIO : Port général qui peut éventuellement être transformé en I2C ou SPI.
Les ports GPIO sont numérotés de 1 à 40, en partant du haut à gauche quand vous tenez la Raspberry pi ports GPIO à droite. C’est le mode de numérotation dit « Board ». Un autre mode de numérotation existe, qui repose sur l’adressage processeur, appelé mode « BCM ».
Dans le cadre de ce tutoriel nous allons uniquement utiliser les ports de type GPIO et GND et la numérotation « Board ».
Brancher la LED à la Raspberry Pi
Pour réaliser notre branchement nous allons utiliser les composants suivants : une LED, une résistance, une bread-board et la Raspberry.
La première étape de notre tutoriel va être de concevoir le circuit reliant la LED à la Raspberry Pi. Ne vous en faites pas, c’est très simple et nous n’allons pas avoir à faire des schémas compliqués !
Comment choisir la résistance ?
La première chose à savoir, c’est qu’une LED doit toujours utiliser une résistance. En effet, les LED ont ce que l’on appelle une « tension de seuil ». Pour faire simple, un peu trop de courant et la LED grille immédiatement, la résistance est donc une protection.
Nous allons donc devoir choisir quelle résistance utiliser. Pour cela, il existe une formule mathématique permettant de calculer la taille de la résistance à employer.
Rmin = (Ualim - Uled) / Imax
À moins que vous ayez de bons restes de vos cours de physique, je présume que ça ne vous avance pas tellement. Petite explication :
- Rmin : Résistance minimum à utiliser, exprimée en ohms (Ω)
- Ualim : Tension de l’alimentation, exprimée en volts (V)
- Uled : Tension de seuil de la LED, exprimée en volts (V)
- Imax : L’intensité max de la LED, exprimée en ampères (A)
Nous l’avons dit, nos GPIO fournissent 3.3 V et 20 mA. La LED elle possède une intensité max de 20 mA (20 mA = 0.020 A) et une tension de seuil comprise en 1.5 et 1.9 V.
La formule est donc la suivante :
Rmin = (3.3 - 1.5) / 0.020
Nous obtenons donc une résistance minimum de 90 Ω, que nous allons arrondir à 100 Ω. Nous allons prendre de la marge en choisissant plutôt une résistance 270 Ω (ou bien 330 Ω, valeurs normalisées), nous protégeant ainsi d’un éventuel pic de courant sur le GPIO.
Pour trouver la valeur d’une résistance, deux possibilités :
- C’est noté sur la bande de papier qui maintient les LEDs ensemble.
- Vous devez lire les bagues de couleurs sur la résistance pour calculer sa valeur. Vous trouverez des tutos et sites en ligne pour vous aider. (100 Ω = marron-noir-marron, 270 Ω = rouge-violet-marron et 330 Ω = orange-orange-marron)
Connecter la LED aux GPIO de la Raspberry Pi
Maintenant que nous savons quelle résistance utiliser, il ne nous reste plus qu’à relier le tout à la Raspberry Pi.
Pour cela, prenez deux câbles Dupont mâle/femelle, on choisira un câble rouge pour l’alimentation, et un câble noir pour le retour à la terre (c’est une convention).
Branchez le câble rouge au port GPIO 7, et le noir au GPIO 6.
Branchez les deux câbles à votre bread-board séparés de quelques rangées. Reliez le câble rouge à l’anode de votre LED (la patte allongée ou longue), une patte de la résistance à la cathode (l’autre patte de la LED, la patte courte donc), et l’autre patte de la résistance au câble noir.
Astuce : Vous avez du mal à retenir quelle patte est l’anode et laquelle est la cathode ? Moyen mnémotechnique simple, l’Anode Allongée Alimente !
C’est pas très clair ? Pas de panique, « un petit dessin vaut mieux qu’un long discours ! »
Si vous voulez être certain que tout fonctionne bien, un petit test simple est possible. Débranchez le câble rouge du GPIO n° 7 et branchez le au n° 1. Celui-ci fournis 3.3 V en permanence, si votre câblage est bon, la LED sera donc allumée 🙂 !
Écrire le programme pour contrôler la LED avec la Raspberry
Maintenant que notre circuit est prêt, il ne nous reste plus qu’à écrire le programme permettant de contrôler les ports GPIO pour allumer et éteindre la LED.
Pour cela, nous allons utiliser le langage de programmation Python. Dans ce tutoriel nous resterons très basique, et nous contenterons de donner un exemple de programme en expliquant comment l’utiliser et comment il fonctionne.
Il ne s’agit donc pas d’un cours de Python. Cependant, si vous souhaitez nous avons récemment publié un cours d’introduction à Python qui vous permettra d’apprendre à utiliser Python afin d’écrire vos propres programmes pour vos projets !
Créez donc un dossier /home/pi/electronic
et un fichier led.py
dans ce dossier, et écrivez-y le code suivant :
Notez que les textes derrière des #
sont des commentaires servant à expliquer ce que fait le code, mais n’ayant aucune influence sur le programme. Vous n’êtes pas obligés de le recopier, sauf pour les deux premières lignes.
#!/usr/bin/env python3
#-- coding: utf-8 --
import RPi.GPIO as GPIO #Importe la bibliothèque pour contrôler les GPIOs
GPIO.setmode(GPIO.BOARD) #Définit le mode de numérotation (Board)
GPIO.setwarnings(False) #On désactive les messages d'alerte
LED = 7 #Définit le numéro du port GPIO qui alimente la led
GPIO.setup(LED, GPIO.OUT) #Active le contrôle du GPIO
state = GPIO.input(LED) #Lit l'état actuel du GPIO, vrai si allumé, faux si éteint
if state : #Si GPIO allumé
GPIO.output(LED, GPIO.LOW) #On l’éteint
else : #Sinon
GPIO.output(LED, GPIO.HIGH) #On l'allume
Ceci fait, nous allons rendre le programme exécutable. Pour cela, il vous suffit de lancer la commande suivante :
chmod +x /home/pi/electronic/led.py
Il ne vous reste plus qu’à lancer le script en l’appelant comme ceci :
/home/pi/electronic/led.py
À chaque fois que vous exécuterez le script, la LED s’allumera si elle est éteinte, et s’éteindra si elle est allumée.
Et voilà, vous savez désormais les bases pour allumer et éteindre une LED avec la Raspberry Pi. Il ne vous reste plus qu’à adapter le code selon vos besoins. Pour cela, n’hésitez pas à consulter notre cours sur Python !
Il ne vous reste plus qu’à passer au prochain tutoriel de cette série, lire une carte RFID avec la Raspberry Pi !
Bonjour
Je jetais un coup d’œil sur le tuto car je ne connais pas le monde des GPIO.
En fait, je veux simplement (pour le moment) faire clignoter une LED toutes les secondes.
Il y a moyen de simplifier le code comme suit :
GPIO.output(LED , not GPIO.input(LED))
Bonne continuation,
Pascal
Bonjour,
Quel(le) logiciel/interface utilisez-vous pour illustrer les raccordements avec le raspberry PI ? comme celui où on peut voir le raccordement de la LED rouge sur la Breadboard avec le raspberry PI.
Je connais TinkerCAD qui fait la même chose mais ce sont des Arduino qui sont utilisé.
Merci
Salut, nous utilisons Fritzing, c’est un très bon outil pour faire une représentation graphique d’un montage, en revanche je ne conseil pas de l’utiliser pour faire un circuit imprimé, tâche pour laquelle il vaudrait mieux privilégier Kicad.
Bonjour,
Merci pour ce travail.
Comme j’ai déjà précisé, essayez d’utiliser la module « GPIOZERO » pour le codage. C’est très pratique !!!!!!
Abdellah DRISSI
Bonjour à la communauté ,je suis débutant je voudrais connaître le python quel livre est le plus approprier pour un débutant je ne connais que le GW Basic .
merci à tous
Robert
Bonjour.
lorsque je lance la commande : » /home/pi/electronic/led.py »
je n’est pour réponse que : »/usr/bin/env: « python3\r »: Aucun fichier ou dossier de ce type »
si quelqu’un peu me dire où je me suis trompé.
Salut, il y a un \r en trop après python3. C’est probablement du à un transfert de windows à linux avec des caractères de fin de ligne différents
Bonjour,
Attention de ne pas faire de confusion entre numéro GPIO et numéro de broche.
La broche 7 correspond au GPIO4 et donc on ne la nomme pas GPIO7……..
Dans la première ligne de votre programme, vous avez ‘#!/usr/bin/env python3.5’. Du coup, le programme ne se lancera pas si ce n’est pas précisément la version 3.5 de Python qui est installée.
J’en profite pour parler d’un programme petit en Python que j’ai écrit pour tester plus facilement les montages électroniques. Il permet de piloter individuellement chaque port GPIO à partir d’une interface graphique. Pour ceux que cela intéresse : https://github.com/epeios-q37/atlas-python
Effectivement, nous allons modifier ça pour mettre 3 à la place.