Create and run a Python program on Raspberry Pi


May 15, 2019 • 33 • 4.2

Now that you have installed the Linux Raspberry Pi OS system on your Raspberry Pi, you can start creating your first Python programs. The Raspberry Pi has GPIO input/outputs. They allow communication with external components. For example, we can connect a temperature sensor, then retrieve the data it sends through these GPIOs.
To start, we'll write a very simple program that blinks an LED. This basic program uses the Raspberry Pi GPIOs without requiring prior knowledge.

Create and run a Python program on Raspberry Pi - Raspberry Lab

Prerequisites

To blink an LED using a Raspberry Pi, you'll need:

Once everything is gathered, let’s do the wiring.

Wiring an LED to the Raspberry Pi

To connect the LED to the Raspberry Pi, we'll need a resistor. LEDs operate at a voltage and current specified by the manufacturer. Here's how to choose the right resistor.

If voltage and current are not provided by the manufacturer, a 100Ω resistor is generally sufficient.

Information

Which resistor to choose?

To determine the optimal resistor value, simply apply loop and Ohm’s laws as shown in the diagram.

Calcul resistance necessaire pour LED Raspberry Francais

For an LED operating at 2V, 20mA, we need:
R = (3.3-2)/0.02
   = 65Ω

If the exact calculated value doesn't exist, pick the closest standard value.

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

How a breadboard works

A breadboard lets you easily connect components together without soldering. The board has two areas:

  • Side rails: Connect VCC and GND here. They’re available along the whole line. Here, they’re not used as we only power an LED.
  • Center area: Components are connected here. Each hole in a row is linked to the others, but rows are separated by a gap in the middle. Usually, row numbers are shown every 5 rows.

A diagram makes it easier to understand. Each colored line represents a set of interconnected holes.

Fonctionnement plaque d'essai / Breadboard - Raspberry Lab

Create the Python .py file

Once everything is wired, boot your Raspberry Pi and connect via keyboard/mouse or SSH to write your first Python program on Raspberry Pi.
Let’s start by creating a file. As Raspberry Pi OS is a Linux distribution, the commands are standard Linux commands you may already know Simply use:

 sudo nano filename.extension

For example, we can name the program as follows:

 sudo nano led.py

This command creates the led.py file in the home directory (/home/pi by default) and opens it in a text editor.

Writing the Python program

For the first program, I commented line by line :)

Save the program

Once we finish editing the file, we need to save and exit the editor. Press Ctrl+X, then y (for yes), and finally press Enter. We return to the command prompt having closed the editor.

Run the Python program

To run the program we created, just enter:

 sudo python led.py

Therefore, the general command to run a Python program is:

 sudo python filename.py


This second beginner tutorial is complete. We learned how to create and run a Python program on the Raspberry Pi to blink an LED.

Read next

Article image

Connect to Raspberry Pi via SSH


Article image

Choose and use a camera on Raspberry Pi






Ce tutoriel vous a plu ?

starstarstarstarstar

4.2/5 | 53 votes




Commentaires

33 commentaires publiés.

Anonyme, 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
Anonyme, 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@Anonyme:~ $ sudo python led.py
python: can't open file 'led.py': [Errno 2] No such file or directory
pi@Anonyme:~ $ sudo python led.py
python: can't open file 'led.py': [Errno 2] No such file or directory

Anonyme, 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()
Anonyme, 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
Anonyme, 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 :)
Anonyme, 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 @Anonyme,
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.
Anonyme, 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 :)
Anonyme, 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 @Anonyme,
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.
Anonyme, le 29/01/2020 à 17h43
Message supprimé par l'auteur.
Anonyme, 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.
Anonyme, le 03/12/2019 à 19h58
super ! très bien expliqué rien à ajouter je peut me lancer merci pour ce tuto
Anonyme, le 26/04/2019 à 18h18
Bonjour,
Un passage incontournable pour le novice que je suis.
C'était très clair, merci !
Anonyme, 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.
Anonyme, 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 Lab, le 21/03/2019 à 12h18
Bonjour @Anonyme,
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.

Anonyme, 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 @Anonyme,
Merci beaucoup pour votre commentaire !
Bonne continuation sur votre Raspberry Pi !

RaspberryLab.
Anonyme, le 10/03/2019 à 11h46
Bonjour, je debute sur raspberry et il me semble que la sortie du gpio est limité à 16 ou 17mA
Anonyme, 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 ?
Anonyme, 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 @Anonyme,
Dans le tuto, ce n'est pas marqué shift+X mais ctrl+X ;)
Ça devrait marcher comme ça !
Anonyme, le 28/11/2018 à 11h34
Les explications sont claires
Anonyme, 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é ! :)
Anonyme, 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.
Anonyme, 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 !
Anonyme, le 10/08/2018 à 12h00
excellent explication merci beaucoup
Anonyme, 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.