Créer et exécuter un programme Python sur Raspberry Pi


15 mai 2019 • 36 • 4.3

Maintenant que vous avez bien installé le système Linux Raspbian sur votre Raspberry Pi, vous pouvez commencer créer vos premiers programmes en Python. Le Raspberry Pi dispose d'entrées / sorties GPIO. Ils permettent la communication avec des composants extérieurs. Par exemple, on va pouvoir brancher une sonde de température, puis récupérer les données qu'elle envoie grâce à ces fameuses entrées/sorties.
Pour commencer, on va écrire un programme très simple qui fera clignoter une Led. Ce programme de base permet d'utiliser les GPIOs du Raspberry Pi, sans avoir besoin de connaissances préalables.

Créer et exécuter un programme Python sur Raspberry Pi - Raspberry Lab

Prérequis

Pour faire clignoter une LED à l'aide d'un Raspberry Pi, il vous faut :

Une fois tous les éléments réunis, passons au branchement.

Branchement d'une LED au Raspberry

Pour relier la LED au Raspberry Pi, on va avoir besoin d'une résistance. En effet, les LEDs fonctionnent avec une tension et une intensité donnée par le constructeur. Voici donc comment bien choisir sa résistance.

Si les tensions et intensités ne sont pas données par le constructeur, mettre une résistance de 100Ω est en général suffisant.

Information

Quelle résistance choisir ?

Pour savoir quelle valeur optimale de résistance choisir, il suffit d'appliquer les lois des mailles et d'ohm comme sur le schéma ci-contre.

Calcul resistance necessaire pour LED Raspberry Francais

Pour une led fonctionnant en 2V, 20mA, il faudra donc :
R = (3.3-2)/0.02
   = 65Ω

Si la valeur de résistance calculée n'existe pas, prendre la résistance qui a la valeur la plus proche.

Schéma du branchemant d'une LED au Raspberry 3
Information

Fonctionnement de la plaque d'essaie (breadboard)

Une breadboard permet de relier facilement les composants entre eux, sans avoir besoin de les souder. La plaque est composée de deux zones :

  • Les bandes de chaque côté : On branche ici le VCC et le GND. Ils seront ainsi disponibles sur toute la ligne. Ici, je ne les ai pas utilisé car nous n'alimentons qu'une LED.
  • La zone centrale : On branche ici les composants entre eux. Chaque trou d'une ligne est relié avec les autres, mais chaque ligne est séparée par un espace au milieu. En général, un numéro de ligne est indiqué toutes les 5 lignes.

Rien de mieux qu'un schéma pour bien comprendre. Chaque trait de couleur représente un ensemble de trous reliés entre eux.

Fonctionnement plaque d'essai / Breadboard - Raspberry Lab

Création du fichier Python .py

Une fois que tout est branché, vous pouvez démarrer votre Raspberry Pi, et vous connecter avec un clavier/souris ou par SSH pour écrire votre premier programme en Python sur le Raspberry Pi.
Commençons par créer un fichier. Le système Raspbian étant une distribution de Linux, les commandes entrées sont des commandes Linux que vous connaissez peut-être déjà Utilisez simplement la commande :

 sudo nano nomFichier.extension

On peut par exemple appeler le programme comme suit :

 sudo nano led.py

Cette commande crée le fichier led.py dans le répertoire principal (/home/pi par défaut) et l'ouvre dans un éditeur de texte.

Écriture du programme python

Pour le premier programme, j'ai commenté ligne par ligne :)

Enregistrement du programme écrit

Une fois que nous avons fini l'édition du fichier, on doit l'enregistrer et quitter l'éditeur. Pour se faire, on appuie sur Ctrl+X, sur y (pour yes) (et o si le Raspberry Pi est en français) et enfin sur la touche enter du clavier. On retourne donc dans l'invite de commande et nous avons fermé l'éditeur de texte.

Exécution du programme Python

Pour lancer le programme que nous avons créé, il suffit d'entrer :

 sudo python led.py

Par conséquent, la commande générale pour lancer un programme Python est :

 sudo python nomFichier.py


Le second tutoriel pour débuter sur le Raspberry Pi touche à sa fin. Nous avons appris à créer et exécuter un programme Python sur le Raspberry Pi permettant de faire clignoter une LED.

A lire

Branchement caméra - présentation

Se connecter au Raspberry Pi en SSH


Branchement caméra - présentation

Choisir et utiliser une caméra sur un Raspberry Pi






Ce tutoriel vous a plu ?

starstarstarstarstar

4.3/5 | 47 votes




Commentaires

33 commentaires publiés.

ayb, le 09/08/2022 à 10h39
bonjour tlmd
j'ai un problème j'ai fais un script python qui serte a lire des codes bar par une scanette et de l'ai traiter, j'ai arrivé a lancer le programme au démarrage de raspberry pi 4 mais la scanette ça marche pas ou bien le mode saies j'arrive pas par contre ca marche qu'on j'envoie le programme manuellement (à travers python cliquer sur run) , quand j'ai cherché j'ai trouvé l'erreur c'est

Traceback (most recent call last):Traceback (most recent call last):
File "/home/se/Desktop/scan_projet.py", line 44, in
ref_base = str(input())
EOFError: EOF when reading a line

Est-ce que vous pouvez m'aider sur ça
merci d'avance
captains-alain, le 23/09/2020 à 18h07
Bonjour,

Je suis en train de tester le programme , et j'ai un problème d'enregistrement... site à la commande "sudo python led.py" j'ai un document "led.py.save" qui se crée dans le dossier "/home/pi mais ensuite celui-ci ne veut pas s'ouvrir...
Je suis débutant raspberry pourriez vous m'aider...
Merci d'avance
Alain
Ci joint la réponse du raspberry:
pi@raspberrypi:~ $ sudo python led.py
python: can't open file 'led.py': [Errno 2] No such file or directory
pi@raspberrypi:~ $ sudo python led.py
python: can't open file 'led.py': [Errno 2] No such file or directory

Raptop, le 06/02/2020 à 10h08
Bonjour @RaspberryLab,

Le but est de créer le jeu du super simon,
Je suis bloqué sur un point de mon programme, au niveau du "input" qui sert à demander au joueur de jouer sa séquence , mais je n'arrive pas à passer à l'étape suivante lorsque j'appui sur le bouton correspondant à la LED qui s'est allumé,
Auriez-vous une idée?
Merci
Voici le programme que j'ai fait:

from time import sleep
import RPi.GPIO as GPIO
import numpy as np
import time
import os
import RPi.GPIO as GPIO
GPIO.setwarnings(False)
# on met RPi.GPIO en mode notation BCM (numero des pins)
GPIO.setmode(GPIO.BCM)

# Déclaration des emplacements
ButtonPin = 3
ButtonPin2=2
ButtonPin3=23
ButtonPin4=22
BlueLedPin = 18
GreenLedPin = 17
RedLedPin=16
YellowLedPin=19
leds = [16, 17, 18, 19]

mode = GPIO.BCM #Lecture des pin par "nom"
#mode = GPIO.BOARD #Lecture des pins par emplacement

def SequenceLeds(pins):
for pin in pins:
print(str(pin))
GPIO.output(pin, True)
sleep(1)
GPIO.output(pin, False)
sleep(1)

# Différents paramétrages pour nos pins
def setup():
GPIO.setmode(mode)
GPIO.setwarnings(False)
GPIO.setup(ButtonPin, GPIO.IN, pull_up_down=GPIO.PUD_UP) #Ecoute le pin s'il reçoit un message
GPIO.setup(ButtonPin2, GPIO.IN, pull_up_down=GPIO.PUD_UP) #Ecoute le pin s'il reçoit un message
GPIO.setup(ButtonPin3, GPIO.IN, pull_up_down=GPIO.PUD_UP) #Ecoute le pin s'il reçoit un message
GPIO.setup(ButtonPin4, GPIO.IN, pull_up_down=GPIO.PUD_UP) #Ecoute le pin s'il reçoit un message
GPIO.setup(BlueLedPin, GPIO.OUT, initial=GPIO.LOW) #Eteint LED Bleu
GPIO.setup(GreenLedPin, GPIO.OUT, initial=GPIO.LOW) #Eteint LED Verte
GPIO.setup(RedLedPin, GPIO.OUT, initial=GPIO.LOW) #Eteint LED Rouge1
GPIO.setup(YellowLedPin, GPIO.OUT, initial=GPIO.LOW) #Eteint LED Rouge2
# Méthode appelée par le callback attendant une action sur le boutton
def swLed(ev=None):
# Lecture de la LED (LOW = éteint // HIGH = allumé)
BlueLedStatus = GPIO.input(ButtonPin)
GreenLedStatus = GPIO.input(ButtonPin2)
RedLedStatus = GPIO.input(ButtonPin3)
YellowLedStatus = GPIO.input(ButtonPin4)
sequence_joueur=[]

# On change l'état des LED
if BlueLedStatus == 0:
print ('On allume la Bleu')
GPIO.output(BlueLedPin, GPIO.HIGH)
time.sleep(1)
GPIO.output(BlueLedPin, GPIO.LOW)
time.sleep(1)
sequence_joueur.append(BlueLedPin)
if GreenLedStatus == 0:
print ('On allume la verte')
GPIO.output(GreenLedPin, GPIO.HIGH)
time.sleep(1)
GPIO.output(GreenLedPin, GPIO.LOW)
time.sleep(1)
sequence_joueur.append(GreenLedPin)
if RedLedStatus == 0:
print ('On allume la Rouge')
GPIO.output(RedLedPin, GPIO.HIGH)
time.sleep(1)
GPIO.output(RedLedPin, GPIO.LOW)
time.sleep(1)
sequence_joueur.append(RedLedPin)
if YellowLedStatus == 0:
print ('On allume la Rouge2')
GPIO.output(YellowLedPin, GPIO.HIGH)
time.sleep(1)
GPIO.output(YellowLedPin, GPIO.LOW)
time.sleep(1)
sequence_joueur.append(YellowLedPin)
print(sequence_joueur)


# Callback appelé lorsque nous appuyons sur le boutton poussoir
def callbackBtn(ev=None):
print("Pression sur le boutton")
swLed()


# Boucle du programme pour intércepter les appels du bouttons poussoir
def loop():
GPIO.add_event_detect(ButtonPin, GPIO.FALLING, callback=callbackBtn) #Attend d'être appelé
GPIO.add_event_detect(ButtonPin2, GPIO.FALLING, callback=callbackBtn) #Attend d'être appelé
GPIO.add_event_detect(ButtonPin3, GPIO.FALLING, callback=callbackBtn) #Attend d'être appelé
GPIO.add_event_detect(ButtonPin4, GPIO.FALLING, callback=callbackBtn) #Attend d'être appelé
while True:
pass # Don't do anything

def destroy(): # Eteindre les LED
GPIO.output(BlueLedPin, GPIO.LOW)
GPIO.output(GreenLedPin, GPIO.LOW)
GPIO.output(RedLedPin, GPIO.LOW)
GPIO.output(YellowLedPin, GPIO.LOW)
GPIO.cleanup() # Relâcher les ressources



# Le programme démarre ici
for gpio in leds:
GPIO.setup(gpio, GPIO.OUT)
GPIO.output(gpio, False)

for i in range(1, 200):
niveau=1
niveau=niveau+1
print("Tour #" + str(i) + ":")
ledsAAllumer = []
for j in range(0, i):
r = np.random.randint(0, len(leds))
ledsAAllumer.append(leds[r])
SequenceLeds(ledsAAllumer)
if __name__ == '__main__':
setup()
try:
loop()
input()
if sequence_joueur == LedsAAllumer:
print("gagné")
niveau= niveau+1
else :
print("perdu")
niveau=niveau - 1

except KeyboardInterrupt: # Si on interrompt le programme, on passe d'abord par la fonction destroy
destroy()
Zei, le 01/02/2020 à 18h09
Bonsoir @RaspberryLab
je suis en plein projet de fin d'études , mon projet consiste à lire les courriers qui seront placer sur le RFID (détecté par le RFID ) ce dernier est bien connecté avec la carte Raspberry PI , honnêtement j'en ai fait des recherches mais je suis loin a écrire le code avec python de cette tâche et je débute avec Raspberry PI , si vous pouvez m'aider à propos de ce projet je vous serais reconnaissante . Merci beaucoup
Zei, le 05/02/2020 à 09h54
Bonjour
voila je débute sur Raspberry pi est du coup je dois écrire un programme en python qui lit et enregistre le ID (code à barre d'un courrier) qui sera détecté par le RFID pouvez-vous m'aider s'il vous plait , je suis en plein projet de fin d'étude et mes compétence ne sont pas très avancer dans ce sujet :(
je vous remercie d'avance :)
Raptop, le 27/01/2020 à 17h51
Bonjour RaspberryLab,

Je suis sur un projet où je dois faire allumer une LED au hasard parmi 4 LED, puis 2, puis 3 etc... en gros je dois incrémenter une LED au hasard à chaque boucle,
Pour cela j'ai créé un tableau vide et une fonction qui sélectionne un chiffre aléatoirement parmi mes 4 ports GPIO, ce chiffre vient remplir mon tableau vide et a chaque boucle j’incrémente le nombre de chiffres sectionné (c'est-à-dire au 1er tour je sélectionne 1chiffre, au 2nd je selectionne 2 chiffres puis 3 etc....).
J'ai donc ajouté à tout ça une condition qui dit si mon chiffre sélectionné est égale à X alors j'allume le port GPIO X, si c'est Y j'allume le port GPIO Y....

mon programme fonctionne bien pour le 1er tour car je n'ai qu'un seul chiffre mais au second tours vu que mon tableau se compose de 2 chiffres mon programme plante car je n'ai pas codé une fonction adéquate pour une sélection superieur à 1 chiffre.

Pourriez-vous m'aider sur ce point,

Merci d'avance

Voici mon programme, il y a pleind de fonctions qui servent à rien au dessus de ma boucle For, ne faite pas attention c'est pour d'autres choses:

import RPi.GPIO as GPIO
import time
import numpy as np
import random
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)

led3 = 17
led = 16
pinBtn2 = 3
led2= 19
led4=18
pinBtn = 6
id_led=[17,16,19,18]
GPIO.setup(17, GPIO.OUT)
GPIO.setup(16, GPIO.OUT)
GPIO.setup(19, GPIO.OUT)
GPIO.setup(18, GPIO.OUT)
niveau= 1
print('Heure courante ', time.strftime('%H:%M:%S'))
for i in range (1, 200, 1):

tab=[]
val=np.random.randint(16, 19, int(niveau))
tab.append(int(val))

if tab==[16]:
GPIO.output(16,True)
time.sleep(2)
GPIO.output(16,False)
time.sleep(2)
if tab==[17]:
GPIO.output(17,True)
time.sleep(2)
GPIO.output(17,False)
time.sleep(2)
if tab==[18]:
GPIO.output(18,True)
time.sleep(2)
GPIO.output(18,False)
time.sleep(2)
if tab==[19]:
GPIO.output(19,True)
time.sleep(2)
GPIO.output(19,False)
time.sleep(2)
print(tab)
niveau=niveau+1
Raspberry Lab, le 27/01/2020 à 18h59
Bonjour @Raptop,
Je vous ai écrit un petit script qui devrait vous aider. Je ne peux pas le tester physiquement sur Raspberry Pi, mais d'après la console, il devrait fonctionner.





Bien cordialement,
RaspberryLab.
Raptop, le 28/01/2020 à 10h36
Bonjour @RaspberryLab,

Merci Beaucoup pour le programme que vous m'avez fait, je l'ai testé et il marche très bien, cependant ce n'est pas tout à fait ce que je cherchais à faire bien que ça s'en rapproche, je me suis mal exprimé dans mon premier message.
Ce que je cherche à faire c'est d'allumer la led sur le pin 16 par exemple, pendant 2sec, puis de l’éteindre .....second tour choisir 2 LED aléatoire mais allumer la première LED sélectionné aléatoirement pendant 2sec, puis l'éteindre, ensuite allumer la seconde LED sélectionné aléatoirement pendant 2sec, puis l'éteindre et ainsi de suite mais sans me limiter à 4 tours....Le principe est un peu le même que celui du jeu du supersimon.

Je vous remercie tout de même, je vais tenter de modifier le programme que vous m'avez fait, et je partagerai avec vous si je trouve la solution :)
Raptop, le 29/01/2020 à 15h24
Après une journée entière à réfléchir et à tester des choses, je n'ai pas trouvé la fonction qui me permettrait d'allumer mes LED comme dans un jeu du simon,

Si vous pouvez m'éclairer ça serait sympa,

Merci à vous
Raspberry Lab, le 29/01/2020 à 16h55
Bonjour @Raptop,
En effet il n'y a pas grand chose à changer, principalement que des choses à supprimer même :)
J'ai corrigé le script, il devrait maintenant faire ce que vous cherchez, n'hésitez pas si vous avez des questions !



Bonne fin de journée,
RaspberryLab.
Raptop, le 29/01/2020 à 17h43
Message supprimé par l'auteur.
Raptop, le 30/01/2020 à 09h47
Bonjour @RaspberryLab,

J'efface mon précédent message, le programme que vous avez fait est parfait, ça répond exactement à mon besoin,

Je vous remercie beaucoup pour votre programme :)))

Raspberry Lab, le 31/01/2020 à 23h12
Super, avec plaisir !

Bonne continuation sur votre Raspberry PI :)
RaspberryLab.
Chris, le 03/12/2019 à 19h58
super ! très bien expliqué rien à ajouter je peut me lancer merci pour ce tuto
Guillaume, le 26/04/2019 à 18h18
Bonjour,
Un passage incontournable pour le novice que je suis.
C'était très clair, merci !
Jean-Pierre, le 26/03/2019 à 09h44
Bonjour,
Grâce à vos explications j'ai tout compris. Je suis vraiment heureux car j'aurai du coup une très bonne note à mon projet qui est coefficient 12.
Nizar TAHRI , le 21/03/2019 à 10h58
Merci pour le code , sauf que dès que j aurai la premiere question normalement je tape par exemple 10 , quand j appuie sur entree le code s arrete..
Raspberry LabFracais, le 21/03/2019 à 12h18
Bonjour @Nizar,
Je viens de tester le code et il semble fonctionner... Le code s’arrête sans message d'erreur dès la première question ?

Cordialement,
RaspberryLabFracais.

Tristewoman, le 19/03/2019 à 09h24
Bonjour,
Je voulais vous dire à quel point votre site est formidable parce qu'il m'apporte énormément de joie.
Raspberry Lab, le 21/03/2019 à 12h11
Bonjour @Tristewoman,
Merci beaucoup pour votre commentaire !
Bonne continuation sur votre Raspberry Pi !

RaspberryLab.
romualdhino, le 10/03/2019 à 11h46
Bonjour, je debute sur raspberry et il me semble que la sortie du gpio est limité à 16 ou 17mA
bilel123, le 01/02/2019 à 17h52
bonjour, stp est ce que vous pouvez m'aider ?j'ai besoin de comprendre comment peut ajouter un ficher a raspberry et puis l'importer au code python ?
vincent59, le 02/01/2019 à 12h07
Bonjour et meilleur voeux a la team
voila j arrive pas a enregistrer le programme Python .
Sur mon Raspberry sa me dit ^X et vous shift +x , mais rien ne fonctionne .
Comment faire ?
Merci de votre aide
Raspberry Lab, le 02/01/2019 à 19h01
Bonsoir @vincent59,
Dans le tuto, ce n'est pas marqué shift+X mais ctrl+X ;)
Ça devrait marcher comme ça !
Ouatt, le 28/11/2018 à 11h34
Les explications sont claires
Nico, le 14/11/2018 à 10h51
La sortie sur le GPIO est limité à 3.3V et pas 5V comme dans le calcul proposé. La résistance devra donc être plus faible pour obtenir une même intensité de courant.
R = (3.3 - 2.2) / 0.02
Raspberry Lab, le 14/11/2018 à 16h33
Salut Nico,
Merci pour ton commentaire, le schéma & le calcul ont été changé ! :)
Francois-83, le 09/09/2018 à 19h43
Bonjour
J'ai recopié le code et il bute sur
GPIO.output(18, True)

Message : SyntaxError: unexpected indent.

Pouvez vous me dire le problème.
Merci
Raspberry Lab, le 09/09/2018 à 19h53
Bonjour Francois,
Les erreurs de type SyntaxError: unexpected indent. sont dues à l'indentation de la ligne de code. (L'espace qui se trouve avant le premier caractère). Des fois python ne comprend pas l'indentation des copier/coller et il faut alors supprimer l'espace devant le texte et le remplacer par 4 espaces dans l'éditeur texte du Raspberry.

Je vais voir si je peux remédier au problème en modifiant le code publié.

En espérant avoir répondu à votre question,
RaspberryLab.
Clem, le 06/09/2018 à 09h21
Bonjour,
je pense qu'il y a une erreur sur le câblage de la masse. Sinon la résistance ne servirait à rien.
Rien de très grave en soit mais si un vrai débutant passe en ne sachant pas utiliser une plaque lab ça va être laborieux pour lui...
En tout cas merci pour le tuto et le code ! C'est top !
Raspberry Lab, le 06/09/2018 à 09h46
Bonjour Clem,
Merci pour ton commentaire, je viens de modifier les schémas afin qu'ils soient corrects.

Bonne continuation sur ton Raspberry !
said, le 10/08/2018 à 12h00
excellent explication merci beaucoup
KARIMOU ABDOUL, le 07/03/2018 à 22h31
programme bien structuré


Commenter
Votre adresse mail ne sera pas visible sur le site.

Les commentaires sous soumis à vérification avant publication.