Comment Programmer en Python sur Raspberry Pi ? (Tuto facile)


Je ne connaissais rien au Python avant d’écrire cet article 🙂
Alors pourquoi devriez-vous le lire ?
Parce que je suis assez bon en programmation avec beaucoup d’autres langages, et que je commence à bien connaître le Raspberry Pi.
Et aussi parce qu’à la fin de cet article, vous saurez programmer en Python 🙂

Comment apprendre à programmer en Python avec un Raspberry Pi ?
Comme tout langage de programmation, des étapes de préparation sont nécessaires pour apprendre le Python : trouver un bon IDE sur Raspberry Pi OS, puis apprendre la syntaxe de base et la gestion des broches GPIO.

Python est un langage intéressant à apprendre, pas compliqué et populaire parmi les programmeurs.
Je vais essayer d’écrire cet article pour aider aussi bien les débutants en programmation que les débutants en Python (mais qui connaissent déjà d’autres langages). À vous d’adapter le rythme de lecture à votre niveau. Si vous codez déjà avec d’autres langages, les extraits de code peuvent suffire à comprendre la syntaxe.

Au passage, si vous vous sentez dépassé dès que Python est nécessaire pour un projet, je vous conseille de télécharger mon e-book « Maîtrisez Python on Raspberry Pi« . Il vous guidera pas à pas pour apprendre les concepts essentiels (et uniquement ceux-là) pour réaliser n’importe quel projet à l’avenir. Un Raspberry Pi sans Python, c’est comme une voiture sans moteur, vous ratez le plus intéressant ;-).
Profitez de 10 % de réduction en le téléchargeant dès aujourd’hui !

Le lien entre Python et Raspberry Pi

Téléchargez mon antisèche !
Toute la syntaxe Python indispensable à connaitre (1 page au format PDF).

Introduction au Python

Python est un langage de haut niveau pour programmer toutes sortes de logiciels (comme le C, C ++ ou d’autres langages).
Il est similaire à un script bash, car vous pouvez l’exécuter directement (sans le compiler).
La plupart des codes sources Python possèdent une extension de nom de fichier en .py et vous pouvez l’exécuter en tapant « python fichier.py ».

La conception du langage Python a commencé dans les années 80 et c’est toujours un langage actif, avec une grande communauté.
Beaucoup de grandes entreprises utilisent Python dans leurs applications, comme Google, Facebook, Netflix ou Spotify.
Ce n’est pas un langage obsolète, l’apprendre maintenant pourrait vous aider dans votre carrière ou vos projets.

Philosophie

Tim Peters a écrit la philosophie Python en vingt aphorismes dont ceux-ci :

Le beau est mieux que le laid.
L’explicite est mieux que l’implicite.
Le simple est mieux que le complexe.
Le complexe est mieux que le compliqué.
L’horizontal est mieux que l’imbriqué.
L’aéré est mieux que le dense.
La lisibilité compte.

Cela vous donne un apercu de l’idéologie derrière le Python.
L’un des principaux objectifs est de le rendre amusant à utiliser.

Vous pouvez trouver la liste complète sur le site officiel Python.org.

Le Python et le Raspberry Pi

Au début, le projet Raspberry Pi visait à aider les jeunes étudiants à apprendre à coder.
La fondation Raspberry Pi a distribué beaucoup de Raspberry Pi dans les écoles britanniques et a également créé des clubs pour apprendre aux enfants à coder.

Comme vous l’avez peut-être remarqué, Raspberry Pi OS est livré par défaut avec Python et un IDE complet déjà installé (dans la version Desktop).
Donc, si vous avez un Raspberry Pi et que vous souhaitez apprendre à programmer, Python est un langage natif et le moyen naturel de commencer.

Cependant, comme je l’ai suggéré plus haut, il n’est pas obligatoire d’avoir un Raspberry Pi pour apprendre le Python.
N’achetez pas un Raspberry Pi uniquement pour apprendre le Python.
Vous pouvez faire la même chose sur n’importe quel système d’exploitation, car Python est un langage multiplateforme.
Il vous suffit de trouver un éditeur adapté à vos besoins sur votre système d’exploitation actuel.

Maîtrisez Raspberry Pi en 30 jours
10% de remise aujourd'hui !
Téléchargez le livre numérique.
Découvrez les secrets du Raspberry Pi à travers un challenge de 30 jours.

Installez votre système d’exploitation

Si vous ne l’avez pas déjà fait, vous devrez d’abord installer un système d’exploitation sur votre Raspberry Pi.
Je vous recommande d’utiliser Raspbian Desktop, qui est distribué avec tout ce dont vous avez besoin pour commencer.
Mais n’importe quelle distribution peut faire l’affaire si vous avez une préférence (mes préférées sont listées ici).

Vous pouvez lire mon article sur «comment installer Raspbian sur un Raspberry Pi » si vous ne savez pas comment faire.
Si vous n’avez pas un bon environnement de travail sur votre Raspberry Pi, je vous recommande d’activer SSH et peut-être d’installer Xrdp ou VNC pour vous connecter à distance sur votre Raspberry Pi.
Il peut être plus confortable de lire cet article et d’écrire du code depuis votre ordinateur habituel.

Une fois que votre installation est faite, passez à l’étape suivante.

Initiation au Raspberry Pi
10% de remise aujourd'hui !
Visionnez ma formation vidéo pour démarrer du bon pied.
Découvrez le Raspberry Pi, le matériel, ses logiciels particuliers et créez vos 5 premiers projets avec moi.

Les logiciels pour coder en Python

Les deux principales options pour coder en Python sur un Raspberry Pi sont :

Python IDE

Sur Raspbian Desktop, vous obtiendrez l’IDE Thonny Python par défaut.

C’est une interface de base pour écrire votre code, le sauvegarder, l’exécuter, et voir ce qui se passe dans une console intégrée.
Voici ce que vous obtiendrez au premier démarrage :

Cette interface épurée est intuitive.
Dans le menu du haut, vous trouverez les icônes les plus utiles pour créer un fichier, le sauvegarder ou le charger, lancer le script, ainsi que des raccourcis pour formater le code.
Les actions avancées sont toutes cachées dans les menus, pour ne pas déranger les débutants.

La première zone de texte est pour votre script et la seconde est une console pour voir ce qui se passe lorsque vous exécutez votre script (sortie ou erreurs).
Si vous commencez avec Python ou la programmation, je vous recommande de travailler avec cet outil.
Vous gagnerez du temps et, si vous avez besoin d’autre chose plus tard, ce n’est pas compliqué de passer à un autre éditeur.

N’importe quel éditeur de texte

Comme je l’ai dit dans l’introduction, un script Python peut être exécuté avec une commande comme celle-ci:

python monscript.py

Grâce à ça, vous pouvez créer un script avec n’importe quel éditeur de texte tel que nano ou Eclipse si vous voulez (mes éditeurs préférés pour Python ici).
Pour les débutants, je pense que cela ne fera qu’ajouter des questions, mais pour les grands projets, une interface puissante pourrait vraiment être utile.

Les interfaces les plus connues pour coder en Python sont :

  • Les éditeurs de code comme Sublime Text, Visual Studio Code ou Notepad ++
  • Les IDE comme Eclipse avec PyDev, PyCharm ou Spyder
  • Les éditeurs Python spécifiques comme SPE

N’importe quel éditeur peut faire le travail. Vous avez le choix 🙂

Maîtrisez Python sur Raspberry Pi
10% de remise aujourd'hui !
Téléchargez le livre numérique.
Envie d'aller un peu plus loin que faire clignoter une LED ? Vous avez besoin de ce livre pour passer à des projets plus avancés.

Des exemples basiques pour apprendre

Commençons par vos premières lignes de code.
Sur cette partie, vous allez apprendre la syntaxe basique du langage Python.
Ce n’est pas spécifique au Raspberry Pi. Cela fonctionnera n’importe où.

Hello world !

C’est une tradition lorsque vous apprenez  un nouveau langage de programmation, alors commençons par celui-ci.
Comment afficher le fameux « Hello World » en Python ?

C’est aussi simple que ça :

print('Hello World!')

Dans l’IDE Thonny, vous devriez avoir quelque chose comme ça :

Comme vous pouvez le voir dans la console, le script affiche précisément ce que vous avez entré dans le paramètre de la fonction « print ».
Print est une fonction fondamentale du Python. Elle est déjà codée pour vous, vous pouvez donc l’utiliser directement pour afficher des messages.
Les apostrophes autour du texte sont une convention de syntaxe pour identifier des chaînes de caractères dans une ligne de code.

Variables

Dans n’importe quel langage de programmation, les variables sont utilisées pour stocker des valeurs localement et temporairement.
Par exemple, vous pouvez demander le nom de l’utilisateur au début de votre script et l’afficher plus tard dans votre code.
Pour ce faire, vous devez définir une variable et l’utiliser pour y stocker le nom de l’utilisateur.

En Python, voici à quoi ressemble cet exemple :
username='Raspberry'
print('Hello '+username)

Sur la première ligne, nous définissons la variable username et y attribuons la chaîne de caractères ‘Raspberry’.

Dans la plupart des langages, vous devez d’abord créer une variable, en définissant son type (chaîne, entier, tableau), avant de l’utiliser dans le code
En Python, il y a aucune syntaxe particulière pour déclarer une variable. Vous pouvez l’utiliser directement.

Sur la deuxième ligne, nous utilisons la même fonction d’impression que celle vue précédemment.
J’ai introduit un nouvel élément de syntaxe avec le ‘+’, utilisé pour concaténer des chaînes de caractères.

Lorsque nous demandons d’afficher ‘Hello ‘+ username, cela affichera ‘Hello Raspberry’ à la place.
La valeur de la variable est utilisée comme une chaîne de caractères à afficher, collée à la première partie.

Si vous me suivez, vous auriez dû remarquer que ce n’est pas exactement l’exemple que j’ai donné 🙂
Voici comment demander le nom d’utilisateur et l’afficher dynamiquement en fonction de la réponse de l’utilisateur :

La fonction input demande à l’utilisateur d’entrer une valeur ou du texte et le stocke dans la variable username.
Ensuite, vous pouvez afficher cette variable comme dans l’exemple précédent.

Nous utilisons la barre oblique inverse « \ » pour dire à Python que l’apostrophe suivante n’est pas pour fermer la chaîne.
Vous pouvez utiliser des guillemets pour éviter ça :

input("What's your name? ")

Les conditions

La théorie

L’étape suivante vous permettra de découvrir ce que sont les conditions et comment les utiliser en Python.
Lorsque vous écrivez un programme, celui-ci devra souvent faire des choix et des actions différentes en fonction d’une valeur :

  • Si la chaîne de caractères entrée est vide, afficher une erreur
  • Si le bouton est enfoncé, allumez la LED
  • Si le mot de passe est correct : effectuez une action, sinon, demandez à nouveau

Dans la plupart des langages, vous pouvez utiliser trois conditions, dans cet ordre :

  • If (si)
  • Elseif (sinon si)
  • Else (sinon)

Pour if ou elseif, vous devez définir la condition à tester et le code à exécuter si elle est vraie.
Cette condition est appelée un test booléen. Le résultat ne peut être que vrai ou faux.

« else » s’applique à tous les autres cas, non décrits dans if et elseif

En Python

En Python, vous trouverez quelque chose de similaire, sauf que elseif s’écrit elif:

value=input("Value?")
if value == 'a':
    print("a")
elif value == 'b':
    print("b")
else:
    print("Anything else")

Pour chaque condition, la méthode à adopter est d’utiliser l’instruction if, elif ou else.
Pour if et elif, vous trouverez la condition booléenne juste après (valeur == « a »). Le résultat est vrai si la valeur contient « a », sinon il est faux.
« else » n’a aucune condition, il exécutera le code si la valeur est autre chose que « a » ou « b » (pour l’exemple donné).
Le « : » à la fin de la ligne est là pour indiquer la fin de la condition.

Lorsque vous exécutez ce code, vous pouvez essayer d’entrer a, b ou toute autre valeur lorsqu’on vous le demande et voir ce qu’il se passe.
Contrairement à l’exemple du paragraphe précédent, l’affichage sera différent en fonction de la valeur que vous entrerez

Pour aller plus loin

Les instructions « elif » et « else » sont facultatives.
Si vous n’avez qu’une seule valeur à tester, vous pouvez omettre une partie, comme ceci :

value=input("Password?")
if value == '1234':
   print("Access granted")
else:
   print("Try again")

Si vous avez plus de deux valeurs à tester, vous pouvez ajouter autant de « elif » que nécessaire

value=input("Value?")
if value == 'a':
   print("a")
elif value == 'b':
   print("b")
elif value == 'c':
   print("c")
elif value == 'd':
   print("d")
else:
   print("Error")

Lorsque le code sous la condition correspondante se termine, le script se poursuit après la fin du groupe conditionnel.
Il n’exécutera pas et ne testera pas les autres conditions.

Dans l’IDE Thonny, vous devriez avoir quelque chose comme ça :

Si vous commencez à apprendre le code aujourd’hui, prenez le temps de digérer déjà ça, car ce qui suit se complique 🙂
C’est une logique à apprendre, plus qu’un langage.
N’hésitez pas à faire quelques tests de votre côté pour être sûr de bien comprendre cette partie.

Les boucles

La théorie

Le dernier concept que je souhaite introduire est celui des boucles.
Les boucles sont un moyen d’exécuter plusieurs fois la même portion de code.

Prenons quelques exemples :

  • Tant que le mot de passe saisi n’est pas le bon, demandez-le encore et encore
  • Pour chaque fichier d’un dossier, exécuter une action identique
  • Une boucle infinie : faire la même action toutes les X minutes

Ce concept va nous permettre d’avoir un code dynamique dépendant de quelque chose d’autre.
Cela évite aussi d’avoir de nombreux morceaux de code identiques, ou d’exécuter le même code trop souvent.

En Python

En Python, vous n’avez que deux façons de créer des boucles :

  • La boucle « for » : exécute le code pour chaque élément dans une séquence (liste, plage, chaîne de caractères, …)
  • La boucle « while » : tant que la condition est vraie, le code sera exécuté en boucle

Pour ceux qui la connaissent dans un autre langage, il n’y a pas d’instruction « foreach » en Python. Vous devez utiliser « for » à la place.

La boucle « while »

Je vais commencer par la boucle « while » car c’est très proche des conditions que nous avons vues juste avant.
Comme je l’ai dit, elle exécutera votre code jusqu’à ce que l’instruction booléenne devienne fausse.

Voici le même exemple de mot de passe, mais avec une boucle :

password=input("What's your password?")
while password!="1234":
  print("Error")
  password=input("What's your password?")

print("Password correct")

On connait déjà presque tout dans ce code.
On commence par demander le mot de passe.
Ensuite, il y a deux cas :

  • Le mot de passe est incorrect :
    • Le script entrera dans la boucle « while »
    • Il affiche une erreur et demande à nouveau le mot de passe
    • Après cela, le script revient au mot « while » et réessaye la même condition booléenne
    • Cette boucle ne s’arrêtera jamais tant que le mot de passe n’est pas correct
  • Le mot de passe est correct :
    • Le script n’entre pas dans la boucle while car la condition est fausse
    • C’est la même chose qu’un « if » dans ce cas

N’oubliez pas de modifier (par l’utilisateur dans l’exemple donné) les variables testées dans la condition du « while » à l’intérieur de la boucle. Sinon, vous créerez une boucle infinie.

L’exécution de ce script dans l’IDE Thonny avec deux erreurs de mot de passe ressemble à ceci :

For

La boucle « for » est un peu différente.
Vous l’utiliserez pour répéter une séquence de choses déjà définie, et non en fonction de l’entrée de l’utilisateur ou d’une variable qui évolue.

Voici un exemple :

alphabet= ["a", "b", "c"]
for letter in alphabet:
  print(letter)

Sur la première ligne, j’introduis un nouveau type de variables. C’est une liste d’éléments (comme un tableau dans d’autres langages).
La syntaxe de la boucle « for » crée une nouvelle variable avec l’élément courant de votre liste (je l’appelle « letter »).
Ensuite, vous pouvez utiliser cette variable dans le code de la boucle.

Sur l’IDE Thonny, vous obtiendrez ceci :

Comme vous pouvez le voir, l’instruction « print(letter) »est exécuté trois fois, une fois pour chaque lettre de la liste.
J’utilise une seule instruction à l’intérieur de la boucle, mais il n’y a pas de limite, il aurait pu y avoir 300 lignes.

Pour aller plus loin

Je vous ai seulement donné les bases pour présenter les boucles.
Il existe de nombreux types de variables et de fonctions que vous pouvez utiliser pour répondre à vos besoins avec des boucles.

Voici un exemple:

  • range (0,10) : pour exécuter une boucle sur une variable de 0 à 10
  • range (0,100,3) : pour exécuter une boucle de 0 à 100 mais en incrémentant la variable de 3 à chaque fois
  • string : pour parcourir les lettres d’une chaîne

Vous pouvez trouver plus d’informations sur le wiki officiel de Python

Je ne veux pas perdre tout le monde ici, mais il y a une dernière chose dont vous pourriez avoir besoin avec ces boucles, j’ai suggéré de créer une boucle infinie avec un délai dans l’introduction, mais je ne vous ai pas expliqué comment attendre un certain temps à chaque exécution.

Voici comment procéder :

import time;
password=input("What's your password?")
while password!="1234":
  print("Error")
  time.sleep(10)
  password=input("What's your password?")

print("Password correct")

Comme vous pouvez le voir c’est le même exemple que plus haut avec le mot de passe
Nous introduisons ici un temps d’attente de 10 s avant d’essayer un autre mot de passe (pour des raisons de sécurité par exemple).

Pour ce faire, nous devons utiliser une bibliothèque Python et l’appeler avec la syntaxe d’importation « import ».
Cette bibliothèque vous fournira de nouvelles fonctions que vous pourrez utiliser dans votre script.
Nous utilisons donc time.sleep(10) dans la boucle pour attendre 10s avant de demander d’entrer un nouveau mot de passe.

Il y a beaucoup de bibliothèques Python que vous pouvez utiliser comme celle-ci.
Nous en verrons certaines dans le paragraphe suivant, mais n’oubliez pas de faire une recherche avant d’écrire du code que quelqu’un aurait déjà créé.

Du code pour le Raspberry Pi

Ok, maintenant que nous avons vu ou revu les bases de la programmation en Python, nous pouvons nous concentrer sur notre objectif principal : les projets pour Raspberry Pi que nous allons pouvoir réaliser avec quelques compétences supplémentaires en Python

Contrôler la camera

Si vous avez une caméra sur le port caméra de votre Raspberry Pi, vous pouvez essayer de la contrôler avec du code Python.
Il existe une bibliothèque appelée « picamera » qui vous permet d’utiliser votre caméra dans un script Python.

Voici un exemple de base comprenant les principales fonctions :

import picamera
with picamera.PiCamera() as camera:
    camera.start_preview()
    camera.capture('/home/pi/Images/python.jpg')
    camera.stop_preview()

Ce script prendra une photo à chaque fois que vous l’exécuterez et enregistrera l’image dans le dossier spécifié.
N’oubliez pas d’importer la bibliothèque « picamera » au début du script
Ensuite, il faut utiliser « start_preview » pour démarrer la caméra, « capture » pour enregistrer l’image et « stop_preview » pour arrêter la caméra.

J’ai fait un article entier sur des projets sympas à faire avec une caméra sur Raspberry Pi (en anglais pour l’instant).
N’hésitez pas à le lire si vous voulez d’autres exemples

Téléchargez mon antisèche !
Toute la syntaxe Python indispensable à connaitre (1 page au format PDF).

Les pins GPIO

Une caractéristique intéressante du Raspberry est qu’il dispose de broches GPIO que vous trouverez sur la carte.
Ces broches vous permettent de connecter un circuit électronique avec des composants comme des LEDs, des boutons poussoirs ou autre.
Et vous pouvez le contrôler avec un script Python.

Je ne suis pas un expert dans ce genre de choses, donc je vais vous donner un court exemple en utilisant la bibliothèque GPIO Zero:

from gpiozero import LED
from time import sleep
led = LED(17)
while True:
    led.on()
    sleep(1)
    led.off()
    sleep(1)

Source: RaspberryPi.org

Au début du script, nous devons importer deux bibliothèques (« gpiozero » pour la gestion des LEDs et « time » pour la fonction de veille que nous avons vue auparavant).
Ensuite, nous définissons la broche GPIO à utiliser pour la suite du script.
Et enfin, nous créons une boucle infinie qui fait clignoter la LED toutes les secondes.

Cet exemple entier n’utilise pas plus de concepts que ceux vus auparavant dans cet article.

Il existe d’autres bibliothèques similaires à gpiozero que vous pouvez utiliser, comme « RPI.GPIO », « pigpio » ou « wiringPi ».
Si vous débutez, « gpiozero » est surement la plus simple pour comprendre comment tout cela fonctionne.

Conditions préalables

Pour démarrer sur ce genre de projets électroniques, vous aurez besoin de quelques composants pour créer votre circuit.

Je vous recommande de vous procurer un kit comme celui-ci sur Amazon avec tout le nécessaire.
Même si vous pensez qu’il y a trop de choses pour vous dedans, c’est tellement bon marché que vous pouvez le prendre directement.
Vous pourrez utiliser des éléments sur vos prochains projets 🙂

Pour le reste, j’explique les bases de l’utilisation des ports GPIO ici.

Questions liées

Pourquoi le Python est-il utilisé dans les Raspberry Pi ? Python est le langage préféré sur Raspberry Pi car tout est déjà inclus. Dès que vous installez votre système, vous obtenez tous les prérequis pythons installés, un IDE et toutes les bibliothèques nécessaires pour votre Raspberry Pi.

Devez-vous apprendre le Python comme premier langage de programmation ? Il y a des langues plus ou moins compliquées à maîtriser. Python est l’un des plus faciles à apprendre. Ce n’est donc pas un mauvais choix. Vous apprendrez également les bases de l’algorithmique qui vous aideront ensuite à passer à un autre langage sans difficultés.

Pouvez-vous utiliser d’autres langages sur le Raspberry Pi ? Si votre objectif principal est de développer des projets sur votre Raspberry Pi, vous pouvez utiliser de nombreux autres langages. Tous les langages capables d’être compilé pour un microcontrôleur ARM peuvent être utilisés (C, C ++, Scratch). Vous pouvez également jeter un œil aux langages Web (HTML, PHP, JavaScript).

Conclusion

Nous y sommes. J’espère que vous avez appris beaucoup de choses sur le Python et sur ce que vous pourriez en faire sur un Raspberry Pi.

La programmation nécessite de la pratique.
Si vous commencez à apprendre à programmer aujourd’hui, vous ne pourrez pas faire quelque chose de parfait la première fois.
Vous devrez essayer des choses, en apprendre d’autres et surtout ne pas vous arrêter là.
Si vous ne faites rien en Python dans les deux prochaines semaines, vous allez tout oublier :/

Ressources supplémentaires pour votre Raspberry Pi

Initiation au Raspberry Pi en vidéo
Si vous débutez et voulez passer rapidement à la vitesse supérieure, j’ai exactement ce qu’il vous faut.
Regardez ma formation vidéo qui vous aidera à démarrer du bon bien, choisir votre matériel, installer les meilleures applications et vous lancer directement dans vos premiers projets avec mon aide.
Regarder les vidéos dès maintenant

Maîtrisez votre Raspberry Pi en 30 jours
Vous avez besoin de plus ? Si vous êtes à la recherche des meilleures astuces pour devenir expert sur Raspberry Pi, ce livre est fait pour vous. Développez vos compétences sous Linux et pratiquez via de nombreux projets en suivant mes guides étape par étape. 10% de remise aujourd’hui !
Télécharger le livre au format PDF ici

Maîtrisez Python sur Raspberry Pi
Pas besoin d’être un génie pour coder quelques lignes pour votre Raspberry Pi.
Je vous apprends juste ce qu’il faut sur Python afin de réaliser n’importe quel projet. La seconde partie du livre est d’ailleurs consacrée à des exemples de projets ou je vous guide pas à pas.
Ne perdez pas de temps, apprenez le strict nécessaire et économisez 10% avec ce lien :
Télécharger maintenant

Autres ressources pour profiter de votre Raspberry Pi
J’ai regroupé toutes mes recommandations de logiciels, sites utiles et de matériel sur cette page de ressources. Je vous invite à la consulter régulièrement pour faire les bons choix et rester à jour.
Visiter les pages ressources


Ce tutoriel ne marche plus à 100%? Prévenez-moi pour que je le mette à jour!

Patrick Fromaget

Je suis l'auteur principal et le créateur de RaspberryTips. Mon but est de vous aider sur tous vos problèmes qui concernent Raspberry Pi en publiant des guides détaillés et des tutoriels rapides. Dans la vraie vie, je suis administrateur système (Linux principalement) avec une solide expérience dans le développement web.

Recent Posts

"Maitrisez Python sur Raspberry Pi" est enfin disponible en français (10% de réduction cette semaine)

X