0% ont trouvé ce document utile (0 vote)
50 vues126 pages

Guide d'initiation à Python sur Raspberry Pi

Ce document est un guide d'apprentissage du langage de programmation Python, particulièrement adapté aux utilisateurs de Raspberry Pi. Il couvre les bases de Python, des projets pratiques et des conseils pour configurer l'environnement de développement. L'auteur insiste sur l'importance de maîtriser les concepts fondamentaux avant de passer à des projets plus complexes.

Transféré par

Léof94
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
50 vues126 pages

Guide d'initiation à Python sur Raspberry Pi

Ce document est un guide d'apprentissage du langage de programmation Python, particulièrement adapté aux utilisateurs de Raspberry Pi. Il couvre les bases de Python, des projets pratiques et des conseils pour configurer l'environnement de développement. L'auteur insiste sur l'importance de maîtriser les concepts fondamentaux avant de passer à des projets plus complexes.

Transféré par

Léof94
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Contenu

Préface 3

Configurer votre environnement 6

À propos du langage Python 14

Les bases de Python 18

Python avancé 32

Premier projet : Contrôlez votre caméra 51

Jouons : Interaction avec Minecraft 60

Contrôlez voslumières à la maison 72

Communiqueravec le monde 88

Un dernier projet : Le Sense HAT 98

Librairies Python 111

Conclusion 119

Solutions 120
Préface

PRÉFACE

Félicitations,
vous avez fait le bon choix
D’une manière générale, savoir coder est un atout. Dans une entreprise, ceux qui
savent programmer sont connus pour être des personnes logiques et créatives,
capables de résoudre des problèmes et de planifier des projets. Même si vous ne
travaillez pas dans l'informatique, cela peut vous aider dans votre travail et dans la vie
en général.

Python est parfait pour débuter en programmation, le langage n'est pas très compliqué
comparé aux autres. Il existe quelques règles de syntaxe, mais il est facile à lire.

Python est également une partie importante de l'univers Raspberry Pi, et je suis
heureux que vous choisissiez d'investir en vous, en apprenant davantage sur ce
langage de programmation.

En quoi ce livre va - t - il vous aider ?


Dans ce livre, je vous guiderai à travers toutes les étapes qui vous permettront de
passer du statut de débutant à celui de personne suffisamment expérimentée pour
réaliser tous les projets que vous souhaitez.

Si vous avez déjà un peu d'expérience en matière de programmation, vous pouvez sans
doute sauter quelques pages, mais nous arriverons rapidement au langage Python et
aux projets que nous pouvons réaliser sur Raspberry Pi avec des connaissances de
base.

Je veux m'assurer que vous comprenez bien l'objectif de ce livre. Vous ne deviendrez
pas le meilleur programmeur Python du monde du jour au lendemain, ni ne maîtriserez

3
Préface

les concepts les plus complexes de la programmation, ni même ne suivrez forcément


les "bonnes pratiques".

Le but de ce livre est de vous débloquer l’accès à de nouvelles utilisations de votre


Raspberry Pi. C’est la première étape, vous apprendrez les bases pour vous aider à
surmonter votre peur de la programmation, et à vous amuser avec n'importe quel
projet sur Raspberry Pi qui nécessite un peu de code Python.

Le piège habituel
J'espère que vous avez un objectif précis en tête et que vous passerez un peu de temps
à lire ce livre, à faire les exercices et à expérimenter sur votre Raspberry Pi.

Je dois par contre vous mettre en garde : ne sautez aucune étape et assurez-vous de
bien comprendre la théorie avant de passer à la pratique.

Je sais par expérience que la syntaxe et le langage dans son ensemble ne sont pas la
partie la plus compliquée dans l'apprentissage du code. Si c'est votre premier langage
de programmation, ne sautez rien.

Je travaillais en tant que développeur web et, de temps en temps, je devais former des
employés à la lecture et au débogage de code PHP. Ils venaient souvent de différents
services (conception web, marketing, support informatique, etc.), donc la plupart
étaient des débutants absolus ; c'était leur premier langage de programmation et leur
première leçon.

À chaque fois, ils rencontraient les mêmes problèmes et ce n'était pas ce à quoi je
m'attendais en préparant la formation.

Créer un code valide nécessite un peu de pratique pour vous permettre de retenir les
modèles et d'identifier les erreurs. En général, après quelques heures de pratique, on
s'améliore de plus en plus. Mais comprendre la logique de base du code est une chose
totalement différente. Il leur a fallu de nombreuses heures pour saisir le concept des
conditions, des tableaux et des boucles, par exemple. Ce sont les bases de tout script,
et tant que vous ne les aurez pas comprises, il sera très difficile de faire quoi que ce
soit.

4
Préface

C'est pourquoi je prendrai le temps d'expliquer clairement ces concepts, en utilisant


des exemples de la vie réelle que tout le monde peut comprendre. Mais s'il vous plaît,
ne survolez pas trop vite les premiers chapitres, car il s'agit d'une partie essentielle
de ce livre. J'ai essayé de n'inclure que les concepts importants que vous utiliserez
vraiment. Dans la deuxième partie, je vous présenterai des projets intéressants, mais
vous serez perdu si vous sautez la première partie.

Amusez-vous bien
Vous savez maintenant que la programmation est importante, quel que soit votre
emploi ou votre objectif. Je vous ai également dit que la première partie pourrait être
difficile, mais ne vous inquiétez pas, je vais essayer de la rendre intéressante, et nous
passerons rapidement à la pratique.

Malgré tout cela, amusez-vous en lisant ce livre. Si vous vous ennuyez ou si vous ne
comprenez pas quelque chose, faites une pause et revenez-y le lendemain.

Essayez également d'aller un peu plus loin dans chaque exercice. La magie de la
programmation se produit lorsque vous arrivez à créer le code que vous vouliez, sans
copier-coller la solution. Si je vous demande d'allumer une ampoule, par exemple,
faites-le et essayez ensuite de la faire clignoter ou autre. Vous apprendrez beaucoup
plus vite en codant vos propres idées.

J'espère que vous êtes motivé et prêt à aller de l'avant. Je suis certain que ce livre vous
aidera, alors lisez-le attentivement et amusez-vous !

5
Configurer votre environnement

CONFIGURER
VOTRE ENVIRONNEMENT

Introduction
Dans ce premier chapitre, je vais m'assurer que vous avez tout ce dont vous avez
besoin pour commencer. Cela peut être un jeu d'enfant pour certains d'entre vous, je
vous autorise donc à parcourir rapidement le chapitre si vous êtes déjà à l'aise avec
cela.

Je vais utiliser Raspberry Pi OS tout au long de ce livre ; je vous recommande donc de


l'utiliser également. Il s'agit d'une distribution stable avec tous les prérequis nécessaires
pour coder en Python, donc nous n'avons pas besoin de chercher à compliquer les
choses.

Ensuite, je présenterai quelques éditeurs de texte que vous pouvez utiliser pour
programmer en Python. Vous pouvez en changer à tout moment pendant que vous
lisez ce livre et que vous expérimentez vos projets, mais il vous faut au moins un
éditeur de texte correctement configuré pour commencer.

Installation du système d'exploitation


de bureau R aspberry P i
Je suppose que la plupart d'entre vous sont des utilisateurs expérimentés, je vais donc
vous donner la version courte ici, et vous pouvez toujours consulter le tutoriel complet
sur le site Web si nécessaire.

6
Configurer votre environnement

Recommandations
Raspberry Pi OS est le système d'exploitation officiel pour le Raspberry Pi (d'où son
nom).

Il existe 3 versions disponibles : Lite, Desktop et Desktop avec les logiciels


recommandés.

Vous pouvez utiliser n'importe laquelle de ces versions pour coder en Python, mais je
conseille de commencer par la version Desktop si vous avez un modèle de Raspberry Pi
correct (Pi 3 ou plus).

Raspberry Pi OS Desktop avec les logiciels recommandés comprendra tout ce dont


vous avez besoin pour coder, y compris certains éditeurs de texte. C’est la version que
j’utiliserai, il est donc préférable que vous ayez le même si possible.

Je recommande d'utiliser une carte SD dédiée à cet effet. De cette façon, vous n'aurez
pas besoin de réinstaller quoi que ce soit plus tard, et vous garderez vos anciens scripts
en sécurité pour une utilisation ultérieure. Une carte Micro SD de 16 Go devrait suffire,
vous pouvez trouver mes recommandations actuelles dans mes pages de ressources :
[Link]

Installation du système
Voici les étapes à suivre pour installer Raspberry Pi OS sur votre carte SD:

• Allez sur le site officiel et téléchargez Raspberry Pi Imager si vous ne l'avez pas
encore. L'URL est : [Link]

• Installez-le sur votre ordinateur comme n'importe quel autre logiciel et démarrez-le.

• Une fois cela fait, cliquez sur le bouton "Choose Device" (optionel) puis "Choose OS".

• Dans le menu, allez dans "Raspberry Pi OS (Other)" et cliquez sur "Raspberry Pi OS


Full".

• Insérez votre carte SD dans votre ordinateur.

• Si vous n'avez pas de lecteur de carte SD, vous pouvez utiliser un adaptateur USB
(voir mes pages de ressources si besoin).

7
Configurer votre environnement

• Cliquez sur "Choose Storage" et choisissez votre carte SD dans la liste.

• Cliquez ensuite sur "Write" pour lancer la copie du fichier.

Le logiciel effacera votre carte SD, téléchargera l'image système et copiera les fichiers
sur la carte SD.

Cela peut prendre un certain temps en fonction de votre matériel et de votre


connexion Internet.

Configuration
Une fois cela fait, insérez la carte SD dans votre Raspberry Pi et démarrez-le.

Une souris, un clavier et un écran sont fortement recommandés. Vous devez être à
l'aise pour coder en Python.

À la fin du premier démarrage, suivez l'assistant de bienvenue pour configurer votre


Raspberry Pi.

L'objectif est de :

• Régler la langue et la disposition du clavier.

• Je vous conseille de passer le système en français, vous pourrez ainsi suivre


facilement mes consignes.

• Changer le mot de passe par défaut.

• Ajuster vos paramètres d'affichage si nécessaire.

• Vous connecter à votre réseau si vous utilisez le Wi-Fi.

• Mettre votre système à jour.

Si vous avez besoin d'un guide étape par étape pour cela, vous pouvez consulter cet
article : [Link]

Tout est expliqué, y compris la configuration supplémentaire que vous pouvez effectuer
par la suite (si vous devez modifier le nom d'hôte ou définir une IP statique, par
exemple).

8
Configurer votre environnement

Accès à distance
Ce n'est pas obligatoire, mais pour certains d'entre vous, cela peut être une bonne
idée. Si vous avez un ordinateur confortable avec un écran, une souris et un clavier
dernier cri, vous préférerez peut-être l'utiliser plutôt que de travailler directement sur le
Raspberry Pi avec de vieux accessoires empilés dans un coin de votre bureau.

Si vous êtes dans ce cas, je vous recommande d'activer SSH et peut-être un accès
graphique avec un outil comme VNC ou XRDP. Vous pouvez trouver toutes les
informations ici : [Link]

Évidemment, si vous n'avez qu'un Raspberry Pi, ou s’il est mieux équipé que votre
ordinateur, vous pouvez sauter cette étape :).

Installation de l'éditeur de code


Une fois la partie système terminée, la seule chose dont vous avez besoin pour le
moment est de choisir l'éditeur de texte que vous utiliserez pour vos scripts Python. Si
vous choisissez la version complète de Raspberry Pi OS, certains éditeurs de texte sont
déjà installés.

Je vous présenterai les trois que je recommande aux débutants, et je vous renverrai
vers un article complémentaire pour ceux qui veulent des outils plus avancés.

IDE Thonny Python

9
Configurer votre environnement

Thonny est parfait pour les débutants, si vous avez quelques lignes à écrire et que vous
ne voulez pas vous perdre dans trop de menus et sous-menus, c'est l'outil parfait pour
vous.

Comme vous pouvez le voir sur l'image, il y a un panneau de raccourcis avec de gros
boutons pour effectuer les principales actions. Ensuite, le haut de l'écran est utilisé
pour taper votre code, et vous pourrez voir le résultat dans l'onglet console en dessous.

Si vous débutez avec Python ou la programmation, je vous recommande de travailler


avec cet outil. Il vous permettra de gagner du temps. Si vous avez besoin d'autre chose
plus tard, il n'est pas difficile de passer à un autre éditeur.

Note: Cela n'est pas indispensable, mais pour passer Thonny en français, il faut
d'abord passer en mode normal (lien en haut à droite), puis aller dans les options,
changer la langue et relancer l'application.

Geany

10
Configurer votre environnement

Geany est un éditeur de programmation que j'ai beaucoup utilisé dans le passé,
lorsque j'étais sous Linux pour le travail. J'avais un gros projet web avec des milliers de
fichiers, et cela fonctionnait très bien avec Geany, même mieux que de nombreuses
solutions payantes.

Geany est donc un excellent éditeur léger, qui est parfait pour Raspberry Pi.

Si Thonny est trop basique pour vous, Geany peut être une bonne alternative. Il est
assez facile à utiliser, car les principales fonctionnalités sont rapidement disponibles
dans la barre supérieure, mais si nécessaire, il peut faire beaucoup plus que Thonny :

• Personnalisation de l'apparence

• Mise en évidence de la syntaxe

• Autocomplétion

• Gestion de projet

• Navigation intelligente

• Etc.

Visual Studio Code

11
Configurer votre environnement

La troisième option est Visual Studio Code. Oui, c'est un outil de Microsoft, mais il est
puissant, et il est gratuit. Vous pouvez maintenant l'installer facilement sur le système
d'exploitation Raspberry Pi, car il est disponible dans la liste des logiciels recommandés.
Alors, pourquoi pas ?

Il est un peu plus avancé que les autres outils. C'est Microsoft, donc ce n'est pas le plus
intuitif, mais il offre des fonctionnalités intéressantes. Par exemple, vous avez accès à
une liste géante de plugins que vous pouvez installer en quelques clics pour ajouter
encore plus de fonctionnalités (Git, SVN, thèmes, autocomplétion, etc.).

Une autre fonctionnalité intéressante pour ceux qui veulent travailler à distance, depuis
leur ordinateur, est qu'il existe un plugin pour coder en Python à distance. Vous pouvez
créer votre code sur votre ordinateur, et l'exécuter sur le Raspberry Pi directement (pas
besoin de copier-coller ou de transférer les fichiers à chaque modification).

Pour l'installer, allez dans le menu principal > Préférences > Logiciels recommandés.

Dans la catégorie "Programmation", trouvez "Visual Studio Code" (le dernier) et cochez
la case.

Cliquez sur le bouton "Appliquer" pour l'installer.

Note: Pour passer Visual Studio Code en français, il faut installer l'extension
"French Language Pack for Visual Studio Code".

Autres solutions
Fondamentalement, n'importe quel éditeur de texte peut fonctionner pour coder en
Python, il y a donc de nombreuses autres solutions disponibles.

Si vous ne voulez rien d'autre que du texte, vous pouvez essayer avec Nano ou Vim, et
si vous préférez un IDE haut de gamme, vous pouvez aussi trouver quelques options.

Je pense que les trois que j'ai présentés précédemment devraient suffire à la plupart
des lecteurs, mais si vous voulez découvrir quelques autres options, vous pouvez
consulter cet article : [Link]

12
Configurer votre environnement

Mise en pratique
À la fin de chaque chapitre, je résumerai les étapes que vous devez effectuer sur votre
Raspberry Pi. Cela vous permettra de mémoriser ce qui a été vu dans le chapitre et
de faire quelques exercices pour vous permettre de mettre en pratique les nouveaux
concepts.

Pour considérer que ce chapitre est terminé, vous devez :

• Télécharger et installer Raspberry Pi OS sur une nouvelle carte SD.

• Configurer ensuite les paramètres de base pour une utilisation confortable (réseau,
affichage, clavier, etc.).

• Faire les mises à jour du système,

• Choisir un éditeur et l’installer si nécessaire, puis le lancer.

Si tout fonctionne comme prévu, vous pouvez passer au chapitre suivant où nous
commencerons à parler du langage Python.

13
À propos du langage Python

À PROPOS DU LANGAGE PYTHON

Introduction
Avant de passer directement au code, essayons d'en savoir un peu plus sur le langage
de programmation. Dans ce chapitre, j'expliquerai ce qu'est réellement Python,
pourquoi il a été créé et quand vous devez l'utiliser.

Je sais que ce n'est probablement pas ce que vous recherchiez, mais c'est une étape
importante dans la découverte de ce langage. Python est mis en avant sur Raspberry
Pi, mais ce n'est pas une raison pour l'utiliser tout le temps. Parfois, Python n'est pas
toujours la solution la plus intelligente. Ne vous inquiétez pas, je vais rapidement vous
montrer pourquoi.

Python est un langage de haut niveau permettant de programmer toutes sortes de


logiciels (comme les langages C, C++ ou autres). Il n'y a pas d'étape de compilation, et
comme un script bash, il peut être exécuté directement.

L'extension du nom de fichier des scripts Python est ".py", par exemple : [Link]

Origines
Python n'est pas un nouveau langage, il a été créé à la fin des années 80 par un
programmeur néerlandais, Guido van Rossum (eh non, pas Monsieur Python). Il a dirigé
seul le projet jusqu'en 2018, apportant de nombreuses nouveautés et deux nouvelles
versions principales (Python 2 et 3). Le projet est désormais dirigé par un conseil de
pilotage de cinq membres qui supervisent le développement du langage.

Sans entrer dans trop de détails, Python prend en charge de nombreux "styles" de
programmation, y compris la méthode de programmation orientée objet qui fait peur à
beaucoup de gens.

14
À propos du langage Python

J'ai choisi de sauter cette étape, et de me concentrer uniquement sur les concepts les
plus simples. Nous allons voir quelques structures de base et créer quelques fonctions,
mais nous n'avons pas besoin d'utiliser les méthodes les plus avancées sur Raspberry
Pi.

Si vous souhaitez faire carrière dans la programmation, vous devrez passer un peu
de temps à apprendre ces concepts. Cependant, si vous n'êtes qu'un développeur en
herbe faisant cela pour vos loisirs, ce n’est pas indispensable.

La philosophie principale de Python est de créer un code simple et facile à lire. Tim
Peters, l'un des principaux contributeurs, a même décrit cette philosophie en quelques
aphorismes, connus sous le nom de "The Zen of Python", dont voici une proposition de
traduction :

Préfère :

la beauté à la laideur,

l'explicite à l'implicite,

le simple au complexe

et le complexe au compliqué,

le déroulé à l'imbriqué,

l'aéré au compact.

Prends en compte la lisibilité.

Les cas particuliers ne le sont jamais assez pour violer les règles.

Mais, à la pureté, privilégie l'aspect pratique.

Ne passe pas les erreurs sous silence,

... ou bâillonne-les explicitement.

Face à l'ambiguïté, à deviner ne te laisse pas aller.

Sache qu'il ne devrait [y] avoir qu'une et une seule façon de procéder,

même si, de prime abord, elle n'est pas évidente, à moins d'être Néerlandais.

Mieux vaut maintenant que jamais.

15
À propos du langage Python

Cependant jamais est souvent mieux qu'immédiatement.

Si l'implémentation s'explique difficilement, c'est une mauvaise idée.

Si l'implémentation s'explique aisément, c'est peut-être une bonne idée.

Les espaces de nommage ! Sacrée bonne idée ! Faisons plus de trucs comme ça.

L'un des principaux objectifs est donc de garder votre code simple, beau et lisible.
Oui, si vous êtes le seul à le lire, personne ne s'en soucie vraiment, mais il est toujours
préférable d'avoir un peu de contexte quand on commence un nouveau langage de
programmation. Java et C++ n'ont pas du tout la même philosophie :).

Utilisation
Même si Python est un langage ancien, il est toujours largement utilisé par les
programmeurs du monde entier. Il existe une communauté géante et la plupart des
grandes entreprises utilisent Python dans leurs produits. Les vidéos sur YouTube et
Netflix sont lues avec Python, Facebook et Spotify l'utilisent également, donc Python ne
disparaîtra pas d’aussitôt.

En fait, c'est l'une des langues les plus utilisées au monde, selon une étude de Statista
en en 2020 :

16
À propos du langage Python

Python et Raspberry Pi
L'objectif de la Fondation Raspberry Pi est d'aider les jeunes étudiants à apprendre
à coder. La fondation Raspberry Pi envoie de nombreux appareils Raspberry Pi aux
écoles britanniques et crée des clubs pour apprendre aux enfants à coder.

Comme nous l'avons vu dans le chapitre précédent, le système d'exploitation Raspberry


Pi est livré avec Python par défaut et avec un IDE complet déjà installé (dans la version
Desktop). Avoir un Raspberry Pi et l'utiliser pour apprendre à programmer avec Python
est donc une excellente idée – c’est fait pour.

À propos, il n'est pas obligatoire d'avoir un Raspberry Pi pour apprendre Python. Ce


ne serait pas l'un des langages les plus populaires s'il était limité au Raspberry Pi. Vous
pouvez l'utiliser sur n'importe quel système d'exploitation, car Python est un langage
multiplateforme. Il vous suffit de l'installer et de trouver un éditeur adapté à vos
besoins sur votre système d'exploitation actuel.

Conclusion
Je vous avais prévenu qu'il serait court, mais je pense qu'il était important de fournir un
peu de contexte sur l'origine de ce langage, ses principaux objectifs et pourquoi il est
installé sur Raspberry Pi.

Si vous connaissez la réponse à ces questions, vous pouvez passer au chapitre suivant,
où nous nous concentrerons sur la logique du code et la syntaxe Python de base.

17
Les bases de Python

LES BASES DE PYTHON

introduction
Voici le chapitre que vous attendiez ! Celui où vous commencez à écrire des phrases
bizarres que votre ordinateur comprend (ou pas). Mais ne vous inquiétez pas, nous
allons ralentir un peu le rythme et n'aborder que l'essentiel dans ce chapitre, avant de
passer à des notions plus complexes dans le prochain.

Python utilise l'anglais de base pour les principaux mots-clés. Il y a quelques règles de
syntaxe à retenir, mais vous verrez rapidement que ce n'est pas très compliqué.

Hello world
Quel que soit le langage que vous apprenez, cela commence toujours par le fameux
"Hello World !". L'idée est d'apprendre d'abord à afficher quelque chose à l'écran, alors
faisons-le comme le veut la tradition.

Console Python
Nous ne l'utiliserons pas beaucoup dans ce livre (probablement plus jamais), et je ne
pense pas que vous l'utiliserez non plus dans vos projets, mais je ne peux pas écrire un
livre sur Python sans parler de la console Python. C'est un moyen d'exécuter du code
Python ligne par ligne et de voir le résultat directement.

18
Les bases de Python

Pour l'ouvrir, c'est très simple. Ouvrez un terminal et tapez

python

Vous obtiendrez quelque chose comme ça :

Vous pouvez alors taper n'importe quel code Python et obtenir le résultat
instantanément. Mais d'abord je dois vous dire ce qu'il faut écrire là :).

Pour chaque action que vous voulez que votre code fasse, il y aura un mot clé
spécifique, éventuellement avec une syntaxe à retenir.

Ainsi, notre premier objectif est d'afficher un message à l'écran, le mot clé sera "print",
et la syntaxe consiste à mettre entre parenthèses le texte que nous voulons afficher. Le
texte doit également être délimité par des guillemets doubles.

Exemple: print(″Hello world!″)

Tapez ceci dans la console Python pour voir le résultat :

Si vous rencontrez une erreur à cette étape, vérifiez que vous avez tapé exactement ce
qui est écrit ci-dessus. Comme la plupart des langages de programmation, Python est
assez strict quant à la syntaxe à utiliser. Il n'y a pas de place pour la créativité au niveau
de la syntaxe en programmation.

Utilisez CTRL+D pour quitter la console, car nous n'en avons plus besoin.

19
Les bases de Python

Créer un script
La plupart du temps, vous n'utiliserez pas la console Python. Au lieu de cela, vous
placerez toutes vos lignes dans un fichier et vous les exécuterez toutes en une seule
commande.

Pour l'instant, nous allons le faire avec Thonny, l'un des éditeurs Python par défaut du
système d'exploitation Raspberry Pi.

• Ouvrez le menu principal.

• Cliquez sur Programmation > Thonny Python IDE.

• Mettez la même ligne de code dans la partie code source de l'éditeur:


print("Bonjour Thonny")

• Cliquez sur "Enregistrer" dans la barre supérieure.

• Donnez un nom à votre fichier.


Rappelez-vous que les scripts Python ont une extension de fichier .py, par exemple :
[Link]

• Cliquez ensuite sur le bouton "Exécuter".

• Le résultat devrait apparaître dans la partie Shell de l'éditeur :

[Link]

20
Les bases de Python

Dans ce cas, nous n'avons qu'une seule ligne dans notre script, il n'y a donc pas de réel
avantage à créer un fichier au lieu de taper la commande dans la console. Cependant,
nous allons ajouter de nouvelles lignes dans les sections suivantes, donc créer un
fichier pour chaque objectif est une bonne pratique.

Remarque : au cas où, vous avez peut-être remarqué que la version de Python
que nous utilisons dans les deux cas n'est pas la même. Cela n'a pas d'importance
pour le moment, mais il y a deux versions de Python installées sur Raspberry Pi
(Python 2 et 3). Lorsque vous utilisez la commande "python", il s'agit de la version
2. Vous devez utiliser "python3" pour démarrer une console avec Python 3. Thonny
exécute la version 3 de Python par défaut. Nous y reviendrons plus tard.

Variables
Nous allons maintenant ajouter un nouveau concept : les variables. Une variable est
utilisée pour stocker des valeurs ou des données de toute sorte dans votre script. Ainsi,
si vous avez besoin de garder quelque chose en mémoire dans votre script, la création
de variables vous sera vraiment utile.

Créer une variable


Nous allons commencer par un exemple idiot, afin que vous puissiez comprendre ce
dont je parle :

• Créez un nouveau fichier dans Thonny.

• Copiez et collez ces lignes :

message="Bonjour !"
print(message)

• Sauvegardez le fichier et exécutez-le.

• Il devrait afficher la même chose que dans la dernière partie.

21
Les bases de Python

[Link]

Comme vous pouvez le voir, nous créons un nouvel élément nommé "message" dans le
script, et nous définissons sa valeur à "Bonjour !". Nous pouvons ensuite l'utiliser dans
la deuxième ligne. Python va remplacer le mot "message" par sa valeur.

Note : Les guillemets doubles ne sont utilisés que pour délimiter les valeurs de
texte. Nous ne les mettons pas dans la fonction print cette fois, sinon elle affichera
"message" en texte au lieu de la valeur de la variable.

22
Les bases de Python

Concaténation
Dans l'exemple précédent, il n'y a aucun intérêt à utiliser une variable. C'est juste un
moyen d'utiliser deux lignes alors que nous faisions la même chose avec une seule
ligne auparavant. Oui, vous avez raison !

Voici un exemple de la manière dont vous pouvez utiliser les variables de manière plus
judicieuse :

prenom="Patrick"
print("Bonjour "+prenom)

[Link]

Le symbole + est un moyen de coller deux chaînes de caractères ensemble. Il sera très
utile à l'avenir.

Évidemment, le nom d'utilisateur doit venir d'ailleurs, ou alors c'est, encore une fois,
une façon plus compliquée de faire la même chose que dans le premier script. Mais
vous comprenez l'idée, je veux juste aller étape par étape. Dans le prochain chapitre,
nous apprendrons comment faire cela de manière interactive.

23
Les bases de Python

Types de variables
Nous n'avons vu que des variables de type texte dans les exemples précédents, mais
il existe de nombreux autres types que nous pouvons utiliser, comme les nombres
(entiers ou réels) et les booléens (vrai ou faux). Nous découvrirons également des types
de variables plus complexes dans les chapitres suivants, mais pour l'instant, retenez
simplement ceux-ci.

variables_types.py

24
Les bases de Python

Conditions
Les conditions sont quelque chose que vous utiliserez dans la plupart des scripts.
C'est un outil que vous pouvez utiliser pour exécuter un morceau de code différent, en
fonction de la condition.

Théorie
Pour illustrer cela, disons que vous êtes au supermarché. Si vous avez une carte de
fidélité, vous pouvez passer à la caisse rapide. Sinon, vous devez faire la queue et
attendre un peu à la caisse suivante.

Dans ce cas, la condition est "Avez-vous une carte de fidélité ?". La réponse est "oui" ou
"non", et en fonction de cette condition, votre parcours sera différent.

En programmation, nous avons souvent besoin de faire la même chose. Vous pouvez
faire une action différente en fonction du résultat d'une expression.

Cela sera utile dans de nombreux cas, par exemple :

• Si la variable est vide, une erreur est affichée.

• Si le bouton est enfoncé, la LED s'allume.

• Si le mot de passe est correct : effectuer l'action, sinon : demander à nouveau.

25
Les bases de Python

En pratique
En Python, vous avez trois mots-clés à retenir :

• If: la première condition est vraie.

• Elif: la première condition est fausse, nous testons un autre scénario. Dans mon
exemple de supermarché, cela pourrait être quelque chose comme une caisse
accessible aux clients ayant moins de 10 articles.

• Else: cas par défaut si aucune des autres conditions n'est vraie.

Les instructions If et elif seront utilisées avec une condition et un morceau de code
à exécuter si la condition est vraie. Else n'a pas besoin de condition, c'est le cas par
défaut si tous les autres sont faux.

Remarque : une condition qui ne peut être que vraie ou fausse est appelée une
instruction booléenne.

Exemple 1

Cela devrait être plus clair avec un exemple. Quelque chose de basique peut
ressembler à ceci :

prenom="Patrick"
if prenom == "Patrick":
print("Salut Patrick")
else:
prenom("Bonjour")

[Link]

26
Les bases de Python

Ok, il faut que je vous explique quelques petits trucs ici :

• Pour chaque condition, la syntaxe consiste à utiliser le mot principal (if, elif ou else).

• Pour if et elif, vous trouverez l'instruction booléenne juste après (value == "Patrick").
C'est vrai si la variable contient "Patrick", faux sinon.

• Le else n'a pas de conditions, il exécutera le code en dessous si le nom d'utilisateur


n'est pas "Patrick".

• Le ":" à la fin de la ligne est là pour indiquer la fin de la condition et le début du code
associé.

• Les espaces en début de ligne sont essentiels. Après l'énoncé de la condition,


chaque ligne commençant par les espaces est liée à la condition ci-dessus. Si vous
ne mettez pas les espaces, Python considérera qu'il s'agit de la suite du script, qui
doit être faite dans tous les cas, que la condition soit vraie ou non.

Exemple 2

Prenons un autre exemple avec plus de cas :

[Link]

27
Les bases de Python

Ainsi, avec cet exemple au hasard, il y a quelques points à retenir pour vous :

• Vous pouvez avoir une ou plusieurs instructions elif

• Les conditions peuvent fonctionner avec tous les types de variables. Dans le
premier exemple, nous avons utilisé une chaîne de caractères, ici c'est un nombre,
mais tout peut fonctionner.

• Il existe plusieurs tests conditionnels que vous pouvez utiliser :

Égal == Non égal !=

Supérieur à > Supérieur ou égal à >=

Inférieur à < Inférieur ou égal à <=

Exemple 3

Le dernier exemple que je veux vous montrer se produit lorsque vous avez des tests
plus complexes à réaliser.

[Link]

28
Les bases de Python

Lorsque vous avez des conditions plus complexes et davantage de variables, vous
pouvez utiliser les mots-clés "and" et "or" pour les tester en une seule ligne.

Remarque : les plus malins d'entre vous auront remarqué que le script
"[Link]" ne fonctionne pas avec n’importe quelles valeurs. Ne vous inquiétez
pas, nous allons corriger cela dans l’exercice en fin de chapitre.

Vous pouvez également utiliser des conditions imbriquées et ajouter une autre
condition sous une première, par exemple :

condition3_bis.py

Vous pourriez avoir besoin de faire cela si vous voulez les trois dans le bon ordre. Mais
si vous ne voulez que le QI le plus élevé, l'exemple précédent est préférable.

29
Les bases de Python

Mise en pratique
Nous avons vu beaucoup de choses dans ce chapitre, et si vous êtes nouveau dans
tout cela, vous n'êtes peut-être pas sûr d'avoir tout compris. C'est exactement pour
cela qu’il a un exercice à la fin de chaque chapitre. Il est temps d'essayer tout cela par
vous-même, et de voir ce que vous avez retenu.

Dans ce chapitre, nous avons appris à créer notre premier script ("Hello world"), à
utiliser des variables et à les concaténer à une autre chaîne. Nous avons ensuite vu
comment utiliser les conditions pour exécuter un code différent en fonction des valeurs
de certaines variables.

Voici un exercice pour tester tout cela :

• Écrivez un code simple qui affiche "Bonjour Patrick" sur votre écran.

• Créez une variable avec le prénom et définissez-la pour utiliser votre nom au lieu
du mien.

• Créez une deuxième variable avec l'heure (et seulement l’heure), et changez le
message en fonction de l'heure de la journée :
• Bonjour avant midi.
• Bon après-midi entre 12 h et 18 h.
• Bonsoir après 18 heures.

30
Les bases de Python

Astuce : je vous conseille d'utiliser un format horaire de 24 h pour faciliter cette


opération.

Essayez de le faire seul si possible, relisez le chapitre si nécessaire. Mais dans tous les
cas, vous trouverez la solution à la fin du livre et dans les fichiers d'exemples de code.

Pour les plus avancés, essayez de corriger le problème que nous pouvons avoir avec
le script [Link]. En effet, si deux valeurs de QI sont identiques, le script ne
fonctionne pas. Si vous mettez le QI de JFK à 160, il dira quand même que Steve a le QI
le plus élevé. Comment pouvez-vous résoudre ce problème ?

Je ne donnerai pas la solution pour cette fois, vous pourrez y revenir plus tard si vous le
souhaitez.

Astuce : Ce que nous avons vu dans condition3_bis.py pourrait être utile pour cela.

31
Python avancé

PYTHON AVANCÉ

Introduction
Dans le chapitre précédent, nous avons abordé les bases de Python et de la plupart
des langages de programmation : variables, conditions et affichage du texte. D'une
certaine manière, ce chapitre sera similaire, car nous avons encore de nouvelles
briques à découvrir avant de commencer notre premier projet.

Ces deux chapitres ne sont probablement pas les plus amusants à lire, mais ils
fournissent les connaissances de base dont vous avez besoin pour aller plus loin et
prendre du plaisir avec vos projets à l'avenir.

J'ai volontairement supprimé les concepts que vous n'utiliserez pas, afin que vous
puissiez passer plus rapidement aux chapitres consacrés aux projets. Cependant, il y
a encore beaucoup à apprendre si vous êtes un débutant, alors, accrochez-vous, car
vous aurez besoin de ces notions dans n'importe quel langage à l'avenir.

Listes
Théorie
J'ai failli sauter cette section, car je ne suis pas sûr que vous l’utiliserez beaucoup. Mais
c'est quelque chose que vous rencontrerez peut-être dans certains tutoriels et cela
facilitera aussi l'explication de la notion suivante.

Les listes sont un type spécifique de variables. Dans le dernier chapitre, nous avons
abordé les nombres, les chaînes de caractères et les booléens. Les listes nous
permettent de stocker plusieurs valeurs dans une même variable.

La façon la plus simple d'illustrer cela est de penser à une liste de courses. Vous pouvez
créer une variable booléenne pour chaque article (acheter_pain = true, acheter_lait =
false, etc.), mais il est préférable de regrouper tous les articles dont vous avez besoin
sur une seule liste.

32
Python avancé

Une autre façon d'imaginer une liste est de penser à une colonne dans une feuille de
calcul. Chaque ligne a une valeur différente et la colonne est notre variable de liste.

En pratique
En pratique, la syntaxe commence comme n'importe quelle autre variable, et nous
avons un format spécifique pour définir les différentes valeurs.

Voici un exemple :

liste_course = ["pain", "framboise", "beurre"]

Une fois défini, nous pouvons accéder à chaque élément de la liste comme ceci :

print(liste_course[1])

[Link]

Remarque : Le premier élément d'une liste a l'indice 0, c'est pourquoi cet exemple
affiche "framboise" et non "pain".

Il existe d'autres types de listes en Python et plusieurs méthodes que vous pouvez
utiliser pour interagir avec elles. Nous en aborderons certaines plus tard dans le livre,
mais pour l'instant, la chose la plus importante à comprendre est que vous pouvez
créer ce type de variable et accéder à chaque élément individuellement en connaissant
sa position dans la liste.

33
Python avancé

Boucles
Théorie
Les boucles ne sont pas très compliquées, mais la plupart des gens ont du mal
lorsqu'on leur présente ce concept pour la première fois. Les boucles sont essentielles
dans tout langage de programmation, c'est pourquoi nous allons prendre le temps de
les présenter correctement.

Avez-vous déjà vu la scène de l'usine dans le film "Les Temps modernes" (Charlie
Chaplin) ?

Les boucles sont un peu comme ça : faites la même chose jusqu'à ce que je dise autre
chose. Dans le film, Charlie est un ouvrier d'usine, qui doit serrer les boulons de chaque
article passant sur le tapis roulant.

Dans votre code, vous pouvez avoir de nombreux cas où une boucle est nécessaire, par
exemple

• Tant que le mot de passe saisi est incorrect, demandez-le encore et encore.

• Pour chaque fichier dans un dossier, faites quelque chose.

• Boucle infinie : Faire la même chose en permanence ou toutes les X minutes.

Ce concept nous permet d'avoir un code dynamique qui dépend de quelque chose
d'autre.

Cela évite également d'avoir plusieurs morceaux de code identiques, ou de devoir


exécuter le script trop souvent. Voyons quelques exemples en pratique, j'espère que
cela rendra les choses encore plus claires.

En pratique
En Python, il existe deux types de boucles que vous pouvez utiliser :

• While: c'est un peu comme une instruction conditionnelle (If), mais le code qu'elle
contient est répété tant que l'instruction reste vraie.
Ex : tant qu'il y a des objets sur le tapis roulant, serrez les boulons.

34
Python avancé

• For: dans ce cas, c'est pour un ensemble prédéfini d'itérations, comme les
deuxièmes exemples ci-dessous (faire quelque chose pour chaque fichier dans un
dossier).
Ex : pour chaque article de la liste de courses, les trouver à l'épicerie.

While
Commençons par la boucle "while", car elle est similaire aux conditions dont nous
avons parlé dans le chapitre précédent.

Voici un exemple :

iterations=0
while iterations<10:
iterations=iterations+1
print(iterations)

[Link]

Comme vous pouvez le constater, la partie du code située sous l'instruction "while" a
été répétée 10 fois.

À chaque nouvelle itération, la condition est évaluée. Si elle est toujours vraie, le code
ci-dessous est exécuté.

À chaque fois, nous incrémentons la valeur "iterations". Lorsque la variable "iterations"


atteint 10, la condition devient fausse et la boucle n'est plus exécutée.

Nous sautons alors à la ligne 5 (après la boucle) et continuons l'exécution du script.

Dans ce cas, c'est la fin du script, mais vous pouvez avoir d'autres lignes après cela.

35
Python avancé

Remarque : au lieu de iterations=iterations+1, vous verrez également


iterations+=1 dans certains scripts. C'est la même chose.

For
"For" est le deuxième type de boucle que vous pouvez utiliser dans vos scripts Python.
Elle est différente d'une boucle "while" car le nombre d’exécutions est prédéfini.

Elle peut être dynamique (en fonction du nombre de fichiers dans un dossier), mais elle
ne dépend généralement pas du contenu de la boucle et aucune condition n'est testée
à chaque itération.

Reprenons l'exemple de la liste de courses pour illustrer ce point :

liste_course=["pain","framboise","lait"]
for produit in liste_course:
print("Acheter "+produit)

[Link]

36
Python avancé

Le script affiche chaque élément individuellement et s’arrête à la fin de la liste.

La syntaxe "for" utilise deux variables : for <valeur> in <liste>.

À chaque itération, la variable "produit" est remplacée par la valeur suivante de votre
liste de courses.

Cela nous permet d'effectuer une action spécifique pour chaque article (dans ce cas, il
suffit de l'afficher).

Note : Les boucles peuvent également être utilisées avec d'autres variables en
entrée, comme les chaînes de caractères ou les plages. Le concept est similaire,
vous n'en avez pas besoin pour le moment.

Fonctions
Théorie
Avec les fonctions, nous allons pousser un peu plus loin l'idée de la répétition d’un bout
de code.

Une fonction est un moyen de définir quelques lignes de code, afin de pouvoir les
exécuter en utilisant le nom de la fonction, n'importe où dans le script. Une fonction
peut avoir des paramètres (comme des valeurs de variables définies lorsque vous
l'appelez) et peut également retourner un résultat.

Jusqu'à présent, nous n'avons vu que des notions que vous devez absolument
connaître. Mais, les trois notions restantes sont plus avancées. Lisez-les, mais vous êtes
autorisé à y consacrer un peu moins d'efforts, et à y revenir plus tard, une fois que les
notions précédentes seront parfaitement comprises et mises en pratique.

Retour à notre théorie des fonctions. En fait, vous avez déjà utilisé une fonction, peut-
être sans savoir que c'en était une : la fonction print(). Dans presque chaque exemple,
nous l'avons utilisée pour afficher quelque chose à l'écran.

37
Python avancé

"Print" est une fonction qui prend une valeur en paramètre et l'affiche à l’écran.

Nous n'avons aucune idée de ce qu'elle fait exactement, et c'est le principal avantage
d'une fonction. Si vous savez de quels paramètres elles ont besoin, et ce qu'elles vont
en faire, vous n'avez pas besoin de connaître ou de comprendre le code exact utilisé à
l’intérieur.

Pour illustrer cela, prenons un autre exemple : dans votre voiture, vous avez des
pédales d'accélérateur et de frein. Vous pouvez les voir comme des fonctions. Vous
savez ce que cela fait à votre voiture si vous appuyez dessus, mais vous n'avez pas
besoin de savoir exactement comment cela fonctionne.

La fonction "accélérateur" prend la pression sur la pédale comme paramètre, et l'utilise


pour contrôler la vitesse de votre voiture. Les ingénieurs ont travaillé une fois sur la
quantité d'essence introduite dans le moteur en fonction de cette pression, nous leur
faisons confiance et utilisons simplement la fonction.

En pratique
En Python, vous pouvez définir une fonction une fois dans votre script, et l'appeler
aussi souvent que vous le souhaitez par la suite. Je vous ai dit que ce concept n'est pas
obligatoire, car il est surtout utile pour les gros projets, et pas vraiment dans les petits
scripts que vous allez créer la plupart du temps sur Raspberry Pi.

Mais, dans certains cas, vous en trouverez dans des exemples que vous récupérerez en
ligne ou dans une documentation, autant en parler un petit peu donc. Par exemple, les
fonctions sont souvent utilisées dans la robotique et les interactions avec GPIO.

Commençons par un exemple de base, comme d'habitude :

def dis_bonjour(prenom):
print("Bonjour "+prenom)

dis_bonjour("Patrick")

[Link]

38
Python avancé

J'ai plusieurs choses à expliquer ici :

• def : C'est le mot-clé que nous utilisons pour dire à Python que nous définissons
une nouvelle fonction.

• dis_bonjour : c'est le nom de la fonction que nous utiliserons pour l'appeler plus
tard.

• prenom: c'est un paramètre que nous enverrons à la fonction, pour afficher le nom
correspondant. Une fois défini sur la ligne def, nous pouvons l'utiliser à l'intérieur
de la fonction comme n'importe quelle variable.

• Et sur la dernière ligne, nous appelons cette fonction, avec une valeur spécifique, le
but étant d’afficher "Bonjour Patrick".

En gros, il s'agit d'une façon beaucoup plus compliquée de coder l'exemple "Hello
World" que nous avons appris dans le chapitre précédent, mais vous avez compris
l'idée. Nous verrons de meilleurs exemples dans les chapitres suivants.

C'est toujours utile si vous l'utilisez plusieurs fois dans votre script, et que vous voulez
changer les salutations un jour avec "Salut <prenom>" par exemple. Vous n'aurez
besoin de le changer qu'une seule fois au lieu de le changer partout.

Je vous ai dit que "print()" est une fonction que vous pouvez utiliser dans n'importe quel
script pour afficher quelque chose. Python fournit également d'autres fonctions utiles.
Par exemple, la fonction "input()" peut être utile pour avoir une façon dynamique de
dire bonjour :

def dis_bonjour(prenom):
print("Bonjour "+prenom)
nom=input("Quel est votre prénom ?")
dis_bonjour(nom)

[Link]

39
Python avancé

Dans cet exemple, nous demandons directement son nom à l'utilisateur avec la
fonction "input()" et affichons les salutations avec la fonction "dis_bonjour()", en utilisant
la réponse comme paramètre. Notre code ne contient plus le prénom, ce qui est
beaucoup mieux.

Note : Notez que je n'utilise maintenant deux variables dans cet exemple : "nom"
et "prenom", juste pour vous montrer que le paramètre n'a pas besoin d'être le
même dans la définition et lorsque vous appelez la fonction.

Si vous êtes intéressé par les fonctions intégrées de Python, vous pouvez en trouver la
liste complète dans la documentation officielle :
[Link]

Modules
Théorie
Les modules poussent encore plus loin ce principe de réutilisation du code dans vos
scripts :

• Avec les boucles, nous pouvons répéter le même code plusieurs fois.

• Avec les fonctions, nous pouvons réutiliser le même code à différents endroits de
notre script.

• Avec les modules, nous pouvons réutiliser le code d'autres projets (celui-ci ayant
souvent été créé par quelqu'un d'autre).

Disons que vous voulez faire une tarte aux framboises, vous pouvez soit essayer
différents ingrédients, quantités et temps de cuisson au hasard jusqu'à ce que vous
trouviez la recette parfaite. Ou vous pouvez simplement aller sur Google et prendre
celle qui a des milliers d'avis positifs.

40
Python avancé

L'utilisation de modules en Python correspond à la deuxième solution. Si quelqu'un a


passé des heures à créer un module qui fait parfaitement ce dont vous avez besoin et
l'a partagé en ligne, on le réutilisera simplement dans notre script au lieu de partir de
zéro.

En pratique
Utilisation

Python inclut certains modules que vous pouvez utiliser directement sur le
Raspberry Pi, par exemple

• Time : Fourni de nombreuses fonctions pour gérer la date et l'heure.


[Link]

• Math : Contient la plupart des fonctions mathématiques dont vous pourriez avoir
besoin (arrondi, exponentiel, racine carrée, etc.).
[Link]

• Tkinter : La plupart des fonctions de ce module peuvent être utilisées pour créer
une interface graphique de base dans votre programme (afficher un message,
boutons, etc.).
[Link]

Note : pour trouver la liste complète des modules disponibles sur votre système,
vous pouvez démarrer la console Python et taper : help('modules').

Pour utiliser un module dans un script Python, nous devons l'importer, généralement
au début de notre programme. Nous pouvons ensuite utiliser les fonctions répertoriées
dans la page d'aide.

41
Python avancé

Voici deux exemples qui font la même chose :

Exemple 1

import time
print("Patientez 10s")
[Link](10)
print("Voilà.")

[Link]

Deux nouvelles choses dans ce script :

• La ligne import, au début, indique à Python d'utiliser le module "time".


En faisant cela, toutes les fonctions incluses dans ce module sont maintenant
disponibles et peuvent être utilisées dans ce script.

• À la ligne 4, nous utilisons "[Link](10)". Nous appelons la fonction sleep() du


module "time".

42
Python avancé

Exemple 2 :

from time import sleep


print("Patientez 10s")
sleep(10)
print("Voilà.")

[Link]

Ce deuxième exemple fait la même chose, mais dans ce cas, nous n'importons que la
fonction sleep. Le module "time" comprend de nombreuses fonctions, et nous n'en
avons besoin que d'une seule.

Comme nous spécifions que nous importons la fonction sleep du module time à la
ligne 1, nous n'avons pas besoin d'utiliser "time." à la ligne 4.

43
Python avancé

Installation de nouveaux modules


Il est déjà possible de faire beaucoup de choses avec les modules inclus sur Raspberry
Pi, mais vous pouvez aussi en installer de nouveaux. Nous le ferons pour presque tous
nos projets dans les chapitres suivants, c'est pourquoi il est important de comprendre
ce processus.

Il existe deux façons d'installer de nouveaux modules pour Python : apt et pip

APT:

Vous connaissez probablement déjà la commande "apt", c'est celle que vous pouvez
utiliser pour installer de nouvelles applications sur le système d'exploitation Raspberry
Pi (et toute distribution basée sur Debian). Certains paquets Python peuvent être
installés avec apt pour ajouter de nouveaux modules disponibles pour vos scripts
Python.

Par exemple :

• python3-gpiozero est une API simple pour interagir avec les broches GPIO.

• python3-picamera fournit une interface pour contrôler le module caméra du


Raspberry Pi.

• python3-sense-hat pour importer toutes les fonctions liées au Sense HAT.

• Etc

Vous pouvez facilement installer n'importe lequel de ces modules avec apt,
comme ceci:

sudo apt update

sudo apt install python3-sense-hat

Remarque : veillez à installer le module correspondant à la version que vous


utilisez actuellement. Si vous programmez avec Thonny, il s'agit de Python version
3, vous avez donc besoin de python3-<module>, et non de python-<module>.

44
Python avancé

PIP:

APT fonctionnera parfaitement pour les modules liés à Raspberry Pi et d'autres


bibliothèques très populaires. Mais si vous avez besoin d'autres modules (ou de
versions plus récentes), vous pouvez également utiliser PIP pour en installer certains.

PIP est l'installateur de paquets pour Python. Vous pouvez visiter ce site web pour
trouver n'importe quel module que vous recherchez : [Link]

Par exemple, nous utiliserons le module "hue" dans le prochain chapitre. Une fois sur
la page du module, vous verrez la ligne de commande que vous pouvez utiliser pour
l'installer :

L'installation de ce module se fait donc avec la commande :


pip install hue

Vous pouvez ensuite utiliser ce module directement dans votre prochain script. Vous
trouverez généralement de la documentation ou au moins un exemple de code sur la
même page.

Nous installerons et utiliserons de nouveaux modules dans les prochains chapitres,


donc ne vous inquiétez pas trop à ce sujet pour le moment, je voulais juste vous les
présenter.

Note : L'utilisation d'un environnement virtuel est désormais presque indispensable


pour utiliser PIP. Nous y reviendrons dans un prochain chapitre.

45
Python avancé

Exceptions
Théorie
Oui, c'est le dernier concept théorique avant notre premier projet !

Ce n'est pas le plus important. En fait, j'ai hésité à l'inclure dans ce livre.

Je ne pense pas que vous l'utiliserez dans vos scripts, mais vous le trouverez
probablement utilisé dans des projets que vous copiez/collez en ligne, alors nous
pouvons prendre quelques minutes pour en parler rapidement.

Les exceptions sont une bonne pratique pour gérer les erreurs dans vos programmes.

Au péage, si quelqu'un ne peut pas payer, la caisse sera rapidement fermée. Cela
permet d'éviter les problèmes supplémentaires liés à cette file (comme les accidents de
voiture ou autres).

Les exceptions sont similaires, mais elles sont automatisées. Si quelque chose
d'inattendu se produit, votre script peut inclure un moyen de gérer le problème
automatiquement.

Voici quelques exemples :

• Vous demandez un code pin et l'utilisateur répond par un mot de passe. Cela peut
faire planter votre programme parce que ce n'est pas le bon type de valeur. Vous
pouvez créer une exception pour afficher une erreur expliquant pourquoi il s'est
trompé (ou demander à nouveau).

• Vous essayez de lire ou d'écrire un fichier, mais le fichier n'existe pas. Une
exception peut afficher une erreur compréhensible par l’utilisateur au lieu du code
d'erreur par défaut.

• Vous contrôlez les lumières avec votre script, mais vous arrêtez le script sur le
Raspberry Pi avec CTRL+C. Le script peut être programmé pour éteindre la lumière
lorsque cela se produit.

46
Python avancé

Les exceptions sont vraiment utiles pour les projets à grande échelle, car elles offrent
une meilleure expérience à l'utilisateur final. Mais, dans la plupart des cas, vous serez le
seul utilisateur sur Raspberry Pi, et si vous comprenez le code d'erreur, vous n'en avez
pas vraiment besoin.

Donc, je vais juste les présenter pour que vous puissiez comprendre le code s'ils sont
utilisés dans un projet que vous obtenez ailleurs, mais vous ne les utiliserez sans doute
pas vous-même pour l’instant.

En pratique
Une exception est définie en deux parties :

• Le code à exécuter, écrit sous l'instruction "try".

• Le code à exécuter en cas d'erreur, écrit sous l'instruction "except".

Voici un exemple de base :

try:
ma_fonction(10)
except:
print("Erreur : la fonction n'a pas été exécutée")

[Link]

47
Python avancé

Comme la fonction ma_fonction" n'existe pas, le script ne fonctionnera pas.

Mais avec le code try/except, je peux afficher un message d'erreur. Sur un script plus
important, cela peut être utile pour trouver d’où vient le problème, mais cela n'aide pas
beaucoup.

Dans certains cas, il serait préférable d'avoir plusieurs instructions "except" pour traiter
chaque scénario d'erreur :

try:
ma_fonction(10)
except NameError as erreur:
print(erreur)
except:
print("Une erreur inattendue s'est produite")

[Link]

Dans ce cas, j'ai un premier bloc except qui n'est exécuté que si l'exception
"NameError" est levée. Je peux récupérer le message d'erreur dans la variable "erreur"
et l'afficher à l'écran ou l'ajouter dans un fichier journal.

J'ai également ajouté un bloc except à la fin pour toute autre type d’erreur qui pourrait
se produire dans mon script.

C'est bien de savoir que cette syntaxe existe en Python, c'est une bonne pratique de
les utiliser pour les programmes publics, mais je ne suis pas sûr que vous les utiliserez
pour vos projets sur Raspberry Pi. Ne vous inquiétez pas trop à ce sujet pour le
moment, il est temps de mettre tout ça en pratique :-).

48
Python avancé

Mise en pratique
Il est temps de mettre en pratique tout ce que nous avons appris dans ce chapitre.
Pour rappel, nous avons vu plusieurs concepts avancés :

• Listes

• Boucles

• Fonctions

• Modules

• Exceptions

J'espère que vous vous souvenez de la nature de chacun de ces éléments et que
vous avez une idée générale de la manière de les utiliser. Si ce n'est pas le cas, il est
probablement préférable de commencer par relire ce chapitre et de prendre des notes
pour vous y référer plus tard.

Voici la recette de base d'une tarte aux framboises :

- 30 g de framboises

- 20 g de sucre

- 100 g de farine

- 1 œuf

49
Python avancé

Je ne vous demanderai pas de la préparer, mais de créer un script Python pour afficher
la recette :

1. Créez une variable pour stocker tous les ingrédients.

2. Affichez-les tous, un par un, chacun sur une nouvelle ligne.


Attendez une seconde après chaque ingrédient avant d'afficher le suivant.

3. Créez une fonction pour afficher chaque ingrédient individuellement, en


commençant la ligne par un "-".
L'objectif est d'obtenir un affichage similaire à celui de la liste ci-dessus.

Vous trouverez la solution à la fin du livre et dans les fichiers d'exemples de code, mais
essayez d'abord de le faire vous-même. Si vous le pouvez, essayez d'aller un peu plus
loin, peut-être pouvez-vous installer et utiliser d'autres modules ou ajouter la gestion
des exceptions dans votre script (par exemple, en prévoyant une fin de script propre si
vous faites CTRL+C pendant l’affichage de la liste).

50
Premier projet : Contrôlez votre caméra

PREMIER PROJET :
CONTRÔLEZ VOTRE CAMÉRA

Introduction
Nous avons consacré suffisamment de temps à la théorie pour l'instant, alors
commençons à mettre en pratique ce que nous avons appris. J'apprends toujours
beaucoup plus vite en pratiquant qu'en lisant des tutoriels théoriques. Commençons
donc par quelque chose de pas trop compliqué pour nous échauffer et utiliser les
premiers concepts dont nous avons parlé.

Dans ce premier projet, nous allons utiliser Python pour contrôler une caméra. Nous
nous concentrerons sur les fonctions qui nous permettent de prendre des photos et
des vidéos, mais vous pouvez également inclure ce projet dans un projet plus vaste, où
la caméra n'est qu'une action dans un programme complet.

Conditions préalables
Dès que nous commencerons à travailler sur des projets, vous aurez besoin de
quelques composants pour reproduire les projets de votre côté. Ne vous inquiétez pas,
ce sont des projets de base, donc nous n'avons pas besoin de beaucoup de choses.

Pour ce premier projet, assurez-vous que vous avez :

• Un Raspberry Pi : n'importe quel modèle fera l'affaire.

• Une carte SD avec Raspberry Pi OS installé. Une interface de bureau est idéale
pour vérifier directement les images, mais vous pouvez continuer avec une version
Lite si vous préférez.

• Une caméra : Je vais utiliser le module officiel, mais ça n'a pas d'importance.

51
Premier projet : Contrôlez votre caméra

C'est tout.

Vous pouvez consulter ma page de ressources si vous avez besoin de conseils avant
d'acheter votre matériel : [Link]

Vous pouvez également consulter mon tutoriel sur l'installation et la configuration du


système d'exploitation Raspberry Pi si nécessaire : [Link]
raspbian-raspberry-pi/.

Une fois cela fait, installez votre caméra sur le Raspberry Pi et activez-la dans raspi-
config. Vous pouvez trouver toutes les informations dont vous avez besoin dans cet
article : [Link]

Avant de faire quoi que ce soit en Python, commencez par tester la caméra avec cette
commande :
libcamera-jpeg -o [Link]

Ça devrait créer un fichier image dans le répertoire courant.

Si cela ne fonctionne pas, cela ne fonctionnera pas avec un script Python.

Une fois que la commande fonctionne sans erreur et que le fichier image est visible,
vous pouvez passer à la partie suivante.

52
Premier projet : Contrôlez votre caméra

Prenez une photo


Principes de base
Pour ce premier exercice, nous allons utiliser un module nommé picamera2 pour
contrôler votre caméra en Python. L'installation de quelques paquets est nécessaire
pour démarrer, voici les commandes à utiliser :
sudo apt install -y python3-libcamera python3-kms++ python3-pyqt5 python3-prctl
libatlas-base-dev ffmpeg python3-numpy python3-picamera2

Créez un nouveau script dans Thonny ou votre éditeur préféré et collez les lignes
suivantes :

from picamera2 import Picamera2, Preview


import time

picam2 = Picamera2()

config = picam2.create_preview_configuration()
[Link](config)

picam2.start_preview([Link])
[Link]()
[Link](2)
picam2.capture_file("[Link]")
[Link]()

[Link]

53
Premier projet : Contrôlez votre caméra

Ce script est un condensé de pas mal de choses que nous avons apprises dans les
chapitres précédents :

• Nous importons le module "picamera2" pour l'utiliser dans notre code sans tout
refaire pour gérer la caméra

• Nous créons une nouvelle variable "picam2", qui est le résultat de la fonction
PiCamera2().
Ne soyez pas dérangé par le préfixe "picam2.", il nous indique simplement d'utiliser
la fonction de ce module (au cas où d’autres modules aient la même fonction).

• Ensuite, sur les lignes 7 à 9, nous utilisons les trois fonctions qui sont nécessaires
pour prendre une photo

Remarque : vous pouvez trouver toute la documentation relative à la bibliothèque


PiCamera sur ce site web : [Link]

Je sais que ce script est vraiment basique : nous ne gérons pas les exceptions, nous ne
donnons pas le temps à l'utilisateur de sourire, etc. Mais, j'ai promis de ne vous donner
que les informations importantes, et je ne veux pas vous submerger avec le premier
vrai script :-).

Timelapse
Ok, donc en gros notre premier script est le même que la commande "raspistill", ce
n'est pas très malin de notre part de créer un script Python de 10 lignes pour faire la
même chose. Essayons de l'améliorer un peu, et de créer un timelapse.

Un timelapse est une vidéo créée à partir d'images prises à intervalles réguliers qui
donne l'impression de voir ce qui se passe de manière accélérée.

54
Premier projet : Contrôlez votre caméra

Donc, nous avons besoin :

• D’ajouter une boucle dans notre script afin de créer plusieurs images au lieu d'une
seule.

• D’utiliser une variable pour le nom du fichier, car nous voulons éviter d’écraser la
photo précédente à chaque fois.

• Et d'avoir un temps d'attente entre chaque photo.

Voici comment vous pouvez faire cela avec quelques lignes supplémentaires :

from picamera2 import Picamera2, Preview


import time

nb_images = 10
waiting_time = 10

picam2 = Picamera2()

config = picam2.create_preview_configuration()
[Link](config)

picam2.start_preview([Link])
[Link]()

for image in range(nb_images):


picam2.capture_file('timelapse'+str(image)+'.jpg')
[Link](waiting_time)

[Link]()

[Link]

55
Premier projet : Contrôlez votre caméra

• J'ajoute les variables au début, afin que nous puissions facilement changer les
valeurs plus tard.
Vous pouvez tout à fait faire sans, comme nous ne les utilisons qu'une fois dans le
script, il n'y a pas vraiment besoin de variable.

• Ensuite, nous pouvons utiliser le deuxième type de boucle du chapitre précédent :


"for".
J'utilise volontairement une plage dans cette boucle pour vous montrer comment
cela fonctionne.
"range(10)" va créer une séquence de nombre de 0 à 9, donc 10 itérations.

• Dans la boucle, nous pouvons utiliser la variable "image" créée dans l'instruction
"for" pour enregistrer l'image dans un fichier différent à chaque fois.
Nous avons vu comment concaténer des chaînes de caractères dans le troisième
chapitre de ce livre, et nous devons utiliser la fonction "str()" pour convertir le
nombre en chaîne de caractères. Nous ne pouvons pas concaténer directement
des chaînes de caractères et des nombres.

• Après cela, il suffit d'ajouter une ligne avec la fonction "sleep()" pour attendre
quelques secondes avant la prochaine image (itération suivante de la boucle).

Essayez de le faire sur votre Raspberry Pi devant une scène en mouvement, cela
devrait être amusant. Libre à vous de jouer avec la valeur des variables pour obtenir un
meilleur résultat.

Note : Une fois que toutes les images sont dans le même dossier, vous pouvez
utiliser un outil comme ffmpeg pour créer une vidéo avec elles. Cela devrait être
quelque chose comme :

sudo apt install ffmpeg

ffmpeg -r 24 -pattern_type glob -i '*.jpg' -s hd1080 -vcodec libx264 -crf 18


-preset slow timelapse.mp4

56
Premier projet : Contrôlez votre caméra

Options
Il existe de nombreuses options que vous pouvez ajouter dans votre script Python pour
améliorer les résultats obtenus avec votre caméra.

Je vous ai déjà donné le site web de la documentation, où vous pouvez trouver tous les
détails, mais voici quelques exemples qui pourraient être intéressants pour jouer avec :

• Résolution :
Par défaut, la résolution est de 640 × 480 (avec mon modèle du moins). Vous
pouvez la changer avec :
picam2.create_preview_configuration(main={"size": (320, 240)})

• Rotation
Je ne sais pas pour vous, mais ma caméra est toujours à l'envers. Si vous rencontrez
également ce problème, vous pouvez modifier le paramètre de rotation pour y
remédier :
picam2.create_preview_configuration(transform=[Link](vflip=1))
En ajoutant cette ligne, l'image sera dans le bon sens.
N'oubliez pas d'importer libcamera au début de votre script pour utiliser cette ligne:
import libcamera

Si vous cherchez autre chose, veuillez consulter les exemples à l'adresse


[Link]

57
Premier projet : Contrôlez votre caméra

Enregistrer une vidéo


Cet exemple sera court, car il est très similaire à la prise d'une photo, mais pour
information, vous pouvez également enregistrer une vidéo avec le module picamera.

Voici un exemple :

from [Link] import H264Encoder


from picamera2 import Picamera2
import time

picam2 = Picamera2()

config = picam2.create_video_configuration()
[Link](config)

picam2.start_preview()
encoder = H264Encoder(10000000)

picam2.start_recording(encoder, 'test.h264')
[Link](10)
picam2.stop_recording()
[Link]

Les fonctions start_recording() et stop_recording() remplacent les fonctions start_


preview() et stop_preview() que nous utilisons pour la capture d'images.

Vous pouvez lire le fichier video.h264 avec VLC (préinstallé sur Raspberry Pi OS).

58
Premier projet : Contrôlez votre caméra

Mise en pratique
Ce chapitre était une introduction à ce que vous pouvez faire en Python, il devait
être un moyen facile de mettre en pratique la théorie dont nous avons parlé dans les
premiers chapitres. J'espère que tout s'est bien passé pour vous, car il n'était pas censé
être trop compliqué.

Nous avons déjà beaucoup pratiqué dans ce chapitre, ce qui est l'objectif de la
deuxième partie de ce livre. J'espère que vous comprenez que vous n'apprendrez qu'en
le faisant vous-même sur votre propre Raspberry Pi. Votre script plantera ou ne fera
pas toujours ce que vous voulez, mais c'est une bonne chose !

Vous n'apprendrez rien si vous vous contentez de copier-coller un code fait par
quelqu’un d’autre qui fonctionne à chaque fois.

Quoi qu'il en soit, essayons un exercice plus difficile :

• Créez un script Python pour créer un timelapse : une prise de vue toutes les deux
secondes pendant 60 secondes.

• Créez une fonction pour prendre la photo. Vous appellerez cette fonction à chaque
prise de vue. La fonction a au moins le préfixe de l'image comme paramètre.

• Sachant que le module "time" possède une fonction nommée time() qui renvoie le
timestamp (= nombre de secondes écoulées depuis 1970).
Exemple 1622525260.3697095.
Et que Python possède une fonction intégrée nommée "round()" que vous pouvez
utiliser pour enlever la valeur décimale de l'horodatage (Exemple : 1622525260).
Modifiez la fonction pour utiliser la partie entière de l'horodatage après le préfixe
dans le nom du fichier image, par exemple : [Link].

Chaque point correspond à une étape, essayez de les faire dans l'ordre. Ce n'est pas
grave si la dernière étape est trop difficile pour vous, mais essayez au moins de faire les
deux premières.

Après cela, vous pouvez considérer que vous savez comment interagir avec une caméra
en Python, et comment utiliser efficacement les fonctions, les modules et les boucles.
Comme toujours, vous trouverez les solutions à la fin de ce livre si vous êtes bloqué par
une question.

59
Jouons : Interaction avec Minecraft

JOUONS :
INTERACTION AVEC MINECRAFT

Introduction
Dans ce chapitre, nous allons essayer d’utiliser nos nouvelles compétences avec Python
pour jouer à un jeu, d’une manière un peu différente de ce dont vous pouvez avoir
l’habitude.

Sur Raspberry Pi OS (version Desktop), il y avait une édition spéciale de Minecraft


installée. Il était possible de jouer avec, même si les fonctions était limitées, mais ce ne
sera pas le but aujourd’hui.

Si cette version de Minecraft était installée sur Raspberry Pi c’est parce qu’il était
possible d’interagir avec depuis un script Python. Minecraft Pi n'est plus supporté sur
les dernières versions, mais je vais vous montrer comment l'utiliser.

Rappelez-vous, le but de l’invention du Raspberry Pi était de promouvoir l’apprentissage


du code à l’école. Quel meilleur moyen de faire cela qu’en utilisant l’un de leurs jeux
préférés ?

Dans ce chapitre, vous allez pouvoir tester vous-même, cela devrait être amusant. Mais
je dois d’abord vous expliquer quelques notions de base à propos de Minecraft, pour
ceux qui (contrairement à moi ...) n’ont pas passé leur vie dessus.

60
Jouons : Interaction avec Minecraft

Introduction à Minecraft
Présentation
Si vous avez vécu dans une grotte ces dix dernières années, voici une brève
introduction à Minecraft

Minecraft est un jeu type « bac à sable » où le monde entier est construit avec des blocs
de la même taille.
Le joueur apparaît dans cet environnement et doit survivre en ayant la possibilité
de faire quasiment tout ce qu’il veut. Le jeu comprend un mélange d’exploration, de
construction, d’artisanat et de combat.
Oui, vous pouvez également vous battre avec des créatures passives ou hostiles
(comme des zombies ou des vaches).

Voici à quoi ressemble le jeu lorsque vous commencer une partie sur un Raspberry Pi :

61
Jouons : Interaction avec Minecraft

À propos du jeu
Minecraft existe dans plusieurs modes de jeu :

• Survie : vous devez rassembler des blocs et des ressources, fabriquer des objets et
survivre pendant la nuit

• Créatif : vous possédez tous les blocs existant que vous pouvez placer n’importe
où et ne pouvez pas mourir

• Aventure : pour les créateurs, vous ne pouvez pas casser des blocs, mais vous
pouvez utiliser des leviers et des boutons

• Spectateur : pas d’interaction, vous vous déplacez en mode « libre » et pouvez


traverser les blocs

Sur Minecraft Pi, comme il s’agit principalement d’un jeu éducatif, vous êtes en mode
créatif. Vous obtenez de base une épée et des blocs dans la barre de raccourcis en
bas de l’écran. Il est possible d’obtenir plus de blocs (voir le paragraphe suivant), il fait
toujours beau temps et vous ne pouvez pas mourir.

En mode créatif, il est possible de casser des blocs en un seul coup. En mode survie,
cela dépend des outils que vous utilisez (les outils en bois sont plus lents que les outils
en diamants par exemple).

Installer Minecraft Pi Reborn


Comme Minecraft Pi n'est plus supporté, vous devez installer Minecraft Pi Reborn à la
place :

• Téléchargez la dernière version à cette adresse.


Récupérez le paquet correspondant à votre système (arm64 ou armhf).

• Ajouter les droits d'exécution sur le fichier télécharger. Pour cela, faites un clic-droit,
puis Propriétés puis dans l'onglet permissions, choisir "Anyone" en face d'exécuter.

• Faites un double-clic sur le fichier pour lancer le jeu. Suivez les instructions pour la
configuration intiale.

62
Jouons : Interaction avec Minecraft

Créer une partie


La première chose à faire est de lancer le jeu et de créer un nouveau monde :

• Essayez de mettre le jeu d’un côté de votre écran, il vous faudra de la place pour
Thonny ensuite.

• Cliquez ensuite sur "Start Game"

• Vous êtes désormais dans le menu de sélection de la partie.


Cliquez sur "Create new" pour créer un nouveau monde.

• Patientez un instant que le monde se génère.

Vous pouvez maintenant utiliser la souris pour regarder le paysage autour du joueur. Je
vous donne les autres contrôles tout de suite.

Contrôles
• Vue de la caméra : déplacez la souris

• Casser un bloc : Bouton gauche de la souris

• Placer un bloc : Bouton droit de la souris

• Déplacement : Z, Q, S, D (W, S, A, D sur un clavier QWERTY)

• Sauter : Touche « Espace » du clavier


Le saut automatique est activé lorsque vous vous déplacez
Deux appuis brefs sur la touche espace active le mode de déplacement libre,
déplacez-vous pour gagner de l’altitude

• Accéder à l’inventaire : Touche « E » du clavier

• Menu Pause / Quitter : Touche « Echap » du clavier

Essayez de vous déplacer un peu dans votre monde pour être à l’aise avec les
mouvements.

63
Jouons : Interaction avec Minecraft

Les coordonnées dans Minecraft

Essayez à nouveau de déplacer votre joueur dans le jeu et observez comment la


position évolue.
À tout moment, nous connaissons la position du joueur et nous pouvons l’utiliser pour
faire des tas de choses.

ID des blocs Minecraft


Lorsque vous ouvrez l’inventaire (E), vous pouvez voir que Minecraft a beaucoup de
blocs différents :

64
Jouons : Interaction avec Minecraft

En gros, chaque bloc du jeu a un identifiant unique.


1 pour la pierre, 2 pour l’herbe, 3 pour la terre, etc.

Donc, si nous voulons définir un bloc spécifique, il nous suffit de connaître son
identifiant.
Voici un site Web que vous pouvez utiliser pour obtenir la liste complète des
identifiants des blocs de Minecraft : [Link]

Lier Minecraft et Python


Maintenant que je vous ai mis à jours sur le fonctionnement du jeu Minecraft, on va
pouvoir commencer à utiliser Python pour interagir avec.

Installation
La première étape sera d'installer la librairie Python correspondante :
sudo apt install python3-minecraftpi

Chat
De la même manière que le "Hello world" que nous avons fait pour commencer au
chapitre 3, nous allons maintenant faire la même chose dans Minecraft (les traditions…).

Laissez Minecraft ouvert d’un côté et ouvrez Thonny de l’autre côté pour créer votre
script.
Ensuite copiez et collez ces 3 lignes dans Thonny :

from [Link] import Minecraft


mc = [Link]()
[Link]("Bonjour")
[Link]
Sur la première ligne, on importe le module [Link] la seconde, on définit la va-
riable "mc" que l’on utilisera comme préfixe pour toute fonction Minecraft.
C’est vraiment très proche de ce que l’on a fait dans le dernier chapitre avec la caméra.

65
Jouons : Interaction avec Minecraft

Ensuite, on peut utiliser notre première fonction Minecraft.


"postToChat" est défini dans le module importé, et comme son nom l’indique elle sert à
écrire dans le chat du jeu.

Si vous lancez ce script, vous devriez vous le message "Bonjour" apparaître dans le jeu :

Blocs
On peut maintenant passer à quelque chose de plus intéressant. Il est possible de
remplacer les blocs de votre environnement en jeu.

Changer un bloc à un endroit précis


La première chose que l’on peut tester est d’utiliser la fonction "setBlock" pour créer un
nouveau bloc à un endroit précis. Cette fonction a 4 paramètres : les 3 coordonnées et
l’ID du bloc.

from [Link] import Minecraft


mc = [Link]()
[Link](0, 0, 0, 56)

[Link]
Essayez cela dans votre partie, en changeant les coordonnées pour que ce soit proche
de votre joueur. L’ordre des paramètres est x, y, z.
56 est l’identifiant du minerai de diamant, mais vous pouvez utiliser ce que vous voulez.

En lançant le script, un bloc de diamant devrait apparaitre aux coordonnées spécifiées.

66
Jouons : Interaction avec Minecraft

Récupérer la position du joueur


Plutôt que de changer les coordonnées dans setBlock pour que cela soit proche du
joueur, on peut utiliser une autre fonction pour récupérer la position actuelle du
joueur: "getPos()".

Voici le script correspondant :

from [Link] import Minecraft


mc = [Link]()
x, y, z = [Link]()
[Link](x, y-1, z, 56)

[Link]

J’utilise "y-1" pour changer le bloc situé juste sous les pieds du joueur.

Il faut qu’on parle


Il y a deux choses qu’il faut que je vous explique à ce stade, les deux concernent la ligne
4 de ce petit script.

La première chose (la plus simple), c’est que getPos() retourne trois valeurs (pour les
coordonnées) et qu’il est possible de les assigner à des variables spécifiques comme
fait dans le script.

Au lieu d’écrire :

x=2
y=7
On peut faire :
x, y = 2, 7

Je ne suis pas sûr que la deuxième option soit plus simple à lire, donc ça ne colle pas
vraiment à la philosophie Python, mais c’est possible. Et par contre pour une fonction
qui retourne plusieurs valeurs, c’est vraiment pratique.

67
Jouons : Interaction avec Minecraft

La deuxième chose (moins simple) c’est que je vous ai légèrement menti dans les
chapitres précédents concernant les différentes fonctions que l’on importe de modules
externes (c’était pour votre bien !). Ces fonctions sont un peu particulières, car elles
sont définies dans une classe, quelque chose qui est utilisé en programmation objet.

Jusqu’à présent, je n’ai parlé que de la programmation procédurale, qui est la manière
naturelle de coder pour des petits projets.

J’ai choisi de faire l’impasse sur cela dans les chapitres théoriques, car c’est souvent trop
tôt, et je ne voulais pas perdre tout le monde dès le début. C’est généralement utilise
dans des projets plus importants, pas pour des petits scripts sur Raspberry Pi.

L’idée est d’ajouter un niveau d’abstraction à vos programmes, en regroupant les


fonctions similaires dans des classes et des objets.

Imaginons que vous programmiez un logiciel complet qui va permettre de tout gérer
dans une banque.

Vous pourriez faire un script gigantesque avec des centaines de fonctions qui
permettent de gérer les employés, les clients, les comptes, les paiements, etc. Ou alors
vous pouvez utiliser la programmation orientée objet et séparer tout ça en morceaux
plus petits :

• La classe "client" inclura des variables (nom, adresse, etc.) et des fonctions (ajouter(),
supprimer(), mettreajour(), etc.)

• La classe "compte" peut inclure des variables (type, montant, date_ouverture, etc.)
et des fonctions (deposer(), retirer(), etc.)

• Etc.

En tout cas, imaginer qu’une classe est un module de votre programme. Elle inclut des
variables et des fonctions que vous pourrez utiliser en créant un objet. Un objet est
une super-variable, créée à partir d’une classe, qui dispose des fonctions héritées de la
classe, comme la plupart des fonctions que nous utilisons dans ce chapitre.

Relisez les scripts que vous avez testés. "Minecraft" est la classe principale et "player"
est une autre classe. C’est pour cela que la syntaxe lors de l’appel de la fonction
getPos() est un peu étrange.

68
Jouons : Interaction avec Minecraft

[Link](): "mc" est l’objet que l’on a créé à partir de la classe Minecraft sur
la ligne 3. "player" est un objectif défini automatiquement par la classe Minecraft et qui
dispose de la fonction getPos().

Le point permet d’appeler une variable ou une fonction définie dans une classe
spécifique.
Quand on utilise [Link](), on appelle la fonction create() définie dans la classe
Minecraft.
Et tant qu’on y est, une fonction définie dans une classe est appelée une méthode.

Ne vous inquiétez pas si tout cela vous semble très compliqué, ça ne l’est pas. C’est
juste une méthode différente pour organiser les choses que ce que nous avons vu
jusqu’a présent. Et si vous faites l’impasse complètement sur ces notions d’objets et de
classes, en vous souvenant simplement des variables et fonctions comme nous l’avons
fait lors de les premiers chapitres, vous vous en sortirez très bien.

Vous savez que la fonction getPos() retourne les informations qu’il vous faut, et qu’il y
a une syntaxe bizarre à utiliser pour appeler cette fonction (avec un exemple dans la
documentation). C’est tout ce qu’il y a à savoir pour aller au bout de ce projet, faites un
copier-coller et peu importe le bon vocabulaire à utiliser :-).

Je ne pense pas que vous créerez des classes et des objets vous-même quand vous
créer un script de zéro. C’est pour cela que j’ai choisi de passer sur ces notions. Mais
lorsque vous utilisez des modules externes, ceux-ci sont souvent créés en utilisant ces
concepts. Ironiquement, ils font ça pour que ce soit plus simple à utiliser :-).

Téléportation
Allez, revenons à la pratique.
Une autre expérience que je veux que vous essayiez est de téléporter le joueur à un
autre endroit.
Pour faire cela, vous pouvez utiliser la fonction "setPos()" qui marche presque comme
"setBlock()".
Elle a 3 paramètres également : x, y, z.

69
Jouons : Interaction avec Minecraft

Voici un script basique vous montrant comment ça marche :

from [Link] import Minecraft


mc = [Link]()
[Link](100,50,100)

[Link]

Il est possible que votre joueur se déplace à un mauvais emplacement, dans des blocs
ou autre. Si ça ne fonctionne pas au premier essai, essayez d’autres valeurs.

Note : mc est l’objet créé à partir de la classe Minecraft. Player est un objet créé à
partir de la classe player définie dans la classe Minecraft. On appelle la méthode
setPos de l’objet player.

Autres fonctions
De nombreuses autres fonctions sont disponibles, donc libre à vous de jouer un peu
avec celles-ci ou d’essayer d’autre chose.

Je n’ai pas trouvé de documentation officielle pour l’API. Je ne sais pas si Mojang cache
ça quelque part, mais c’est introuvable.
La seule page que j’ai trouvé est une ressource liée au livre "Adventures in Minecraft".
Ce site liste les fonctions, paramètres et explique ce que chaque fonction fait :
[Link]
En utilisant cette liste, vous devriez être capable d’utiliser n’importe quelle fonction
désormais. Et je vous ai préparé quelques exercices pour tester tout ça :-).

70
Jouons : Interaction avec Minecraft

Mise en pratique
Votre objectif est de maitriser Python, ou en tout cas d’être à l’aise lorsque vous devez
utiliser des librairies externes. L’API Minecraft est un bon exemple. Même si vous
comprenez tout ce qu’on a vu concernant Python, la syntaxe et les différents concepts,
vous serez vite limité si vous ne savez pas utiliser des modules externes dans vos
projets.

Pour cet exercice, c’est exactement ce que vous allez faire.


Vous avez le lien vers la documentation et on a vu comment utiliser certaines fonctions.
Maintenant je vais vous laisser travailler de votre côté, en utilisant les mêmes fonctions
et aussi de nouvelles :

• Créer un script qui récupère la position du joueur

• Construire une maison basique à proximité du joueur (moins de 10 blocs aux


alentours).

• Si vous êtes à l’aise, essayez d’améliorer votre maison en utilisant des blocs
différents, en ajoutant une porte, des fenêtres et un toit.
Si c’est encore un peu compliqué pour vous, pas de problème, un cube en bois de 4
x 4 x 4 fera l’affaire pour l’instant, c’est déjà super :)

Comme d’habitude, vous trouverez ma solution à la fin du livre, mais faites le maximum
seul avant d’aller regarder !

71
Contrôlez vos lumières à la maison

CONTRÔLEZ VOS
LUMIÈRES À LA MAISON

Introduction
Dans ce chapitre, vous allez utiliser les mêmes compétences que précédemment,
mais dans un environnement différent. Si vous avez compris les derniers chapitres,
cela devrait être facile. Sinon, c'est un excellent moyen de réessayer avec une autre
application.

De plus en plus de foyers sont équipés de lampes intelligentes. Selon la marque et les
modèles, vous pouvez au moins les allumer et les éteindre depuis votre smartphone, et
généralement modifier l'intensité lumineuse, voire la couleur.

La plupart de ces produits ont une API permettant de les contrôler en Python, ce
que nous allons apprendre dans ce chapitre. J'ai les ampoules Philips Hue et je vais
donc vous montrer comment faire avec elles, mais je sais que d'autres marques ont
également une API similaire (Xiaomi et Govee par exemple).

72
Contrôlez vos lumières à la maison

Présentation de Philips Hue


La collection Philips Hue comprend toutes les lumières intelligentes de Philips.
Il s'agit d'un concept comprenant des ampoules, un pont et une application pour gérer
les lumières.

• Le pont est le routeur entre les lumières et l'application de votre smartphone.


Il doit avoir accès à votre réseau (RJ45), et si possible à une connexion Internet.
La configuration est très simple si vous avez un serveur DHCP sur votre réseau.

• Les lumières se connectent automatiquement au pont, sans fil.


Dès que vous allumez les lumières, elles sont disponibles sur l'application. Aucune
configuration n'est nécessaire.

• Et l'application Hue est disponible sur votre smartphone pour gérer tout cela.
Vous pouvez allumer et éteindre les lumières, changer les couleurs et créer des
routines.

Si vous n'avez pas encore de pack Philips Hue ou de lumières colorées chez vous, vous
devez savoir qu'il existe plusieurs modèles et packs disponibles sur le marché.

Il y a les ampoules blanches de base (on/off uniquement), les ampoules dont vous
pouvez changer la couleur et une bande de LED qui est parfaite pour Noël ou pour
donner une ambiance spéciale à une pièce.

Pour expérimenter avec le code que je vous donne dans ce chapitre, il serait préférable
d'avoir au moins un kit de démarrage. Vous pouvez trouver ma recommandation du
moment dans ma page de ressources : [Link]

73
Contrôlez vos lumières à la maison

Si vous avez des lampes d'une autre marque, l'API sera différente, mais vous devriez
pouvoir adapter le code pour obtenir les mêmes résultats. La plupart de ces API
disposent de fonctions similaires.

Enfin, si vous ne pouvez pas vous permettre d'acheter des lumières intelligentes pour
le moment, ce chapitre sera moins amusant, mais vous pouvez probablement suivre
ce que j'explique et l'appliquer à autre chose. Ou peut-être utiliser le code et essayer
d'afficher quelque chose sur votre écran au lieu de changer l'état ou la couleur de la
lumière.

Prérequis
Avant toute chose, nous avons besoin de quelques éléments :

• Si vous avez acheté un nouveau kit pour ce chapitre, suivez les instructions pour
l'installer. Configurez toutes les lumières avec l'application sur votre téléphone
avant de faire quoi que ce soit d'autre.

• Trouvez l'adresse IP du pont Hue. Vous pouvez l'obtenir en utilisant cette


commande sur votre Raspberry Pi :
sudo apt install nmap
nmap -sP [Link]/24
Remplacez le réseau avec le vôtre si vous utilisez un sous-réseau différent.

• Créez un nouveau dossier pour ce projet ainsi qu'un environnement virtuel. Il s'agit
d'un emplacement isolé pour votre projet, avec la possibilité d'utiliser une version
de Python différente et des modules spécifiques (plus de détails sur le site) :
mkdir projet_hue
cd projet_hue;
python3 -m venv venv
source venv/bin/activate

• Installez la bibliothèque Python que nous utiliserons pour contrôler les lumières :
pip install phue

74
Contrôlez vos lumières à la maison

Découverte de l'API
Sur votre pont Hue, il y a donc une API disponible.
L'URL de base est [Link]

Je vais vous montrer les appels de base que vous pouvez faire, comment cela
fonctionne, et après cela, nous créerons les premiers scripts.
Dans ce projet, le Raspberry Pi communiquera avec le pont Hue, et Python fera des
requêtes HTTP pour obtenir ou modifier la configuration du système Hue.
En gros, l'API Hue nous donne des fonctions HTTP pour changer des choses pour les
lumières (comme éteindre une lumière par exemple).

Contrairement à celle que nous avons utilisée pour Minecraft dans le dernier chapitre,
cette API est protégée par un nom d'utilisateur que nous devons créer avant d'effectuer
tout appel (Vous avez peut-être vu l'erreur "utilisateur non autorisé" si vous avez essayé
l'URL de base de l'API).

Tester l'API
Pour tester l'API sans coder, Philips nous fournit un outil permettant de créer des
requêtes dans un formulaire.
Ce formulaire est disponible à l'adresse [Link]
Dans ce formulaire, vous trouverez trois parties :

• URL : L'URL que vous voulez appeler.


Vous verrez plus tard que chaque fonction a une URL différente.

• Méthode : GET, PUT, POST ou DELETE.


Il s'agit de différentes actions que vous pouvez effectuer avec votre requête.
Par exemple, GET permet de voir la configuration tandis que PUT permet de
modifier quelque chose.

• Corps du message : Pour certaines fonctions, vous devez ajouter plus de détails
pour expliquer ce que vous voulez changer dans la configuration.

• Réponse à la commande : Lorsque vous envoyez des requêtes, vous verrez la


réponse du pont dans ce champ. Cela vous aidera à déboguer vos requêtes.
Maintenant que vous avez compris de quoi il s'agit, commençons par créer votre nom
d'utilisateur.

75
Contrôlez vos lumières à la maison

Créer l'utilisateur
Dans la plupart des demandes, nous avons besoin d'une authentification pour
permettre l'accès à la configuration du pont Hue.

Pour créer votre jeton d'authentification, remplissez le formulaire comme ceci :

• URL : /api

• Corps du message :
{"devicetype":"TestApp#RaspberryPi"}
Mettez ce que vous voulez pour le "devicetype" (nom de l'application ou de
l’appareil, comme vous voulez).

• Ensuite, appuyez sur le bouton du pont.

• Dans les 30 secondes qui suivent, cliquez sur le bouton POST pour exécuter la
requête.

Cela devrait ressembler à ceci dans le formulaire :

Dans le champ réponse, vous pouvez voir le nom d'utilisateur généré par le pont Hue
Notez-le, nous l'utiliserons dans tous les prochains appels.

76
Contrôlez vos lumières à la maison

Obtenir la liste des lumières


Avant de modifier la configuration dans une pièce spécifique, nous devons obtenir
la liste de toutes les lumières installées. Chaque ampoule possède un ID dont nous
aurons besoin plus tard dans nos scripts.

Pour obtenir une liste avec toutes les lumières disponibles, remplissez le formulaire
avec ceci :

• URL : /api/<utilisateur>/lights.

• Remplacez <utilisateur> par celui que vous avez obtenu à l'étape précédente
(longue chaîne aléatoire).

• Appuyez ensuite sur "GET" pour obtenir la réponse.

La réponse est au format JSON, qui n'est pas forcément facile à lire.
Vous devriez voir un paragraphe par lumière.

Chaque paragraphe commence par un numéro (1, 2, 3, etc.) et contient des


informations sur la lumière correspondante.
Essayez de trouver quel numéro correspond à quelle lumière.
Par exemple : 1→ chambre à coucher, 2→ bande LED, etc.
Prenez note de ces identifiants, car nous en aurons besoin par la suite.

Premier test en Python : Allumer et éteindre la lumière

from phue import Bridge


b = Bridge('[Link]')
#Décommentez la ligne suivante si besoin d'enregistrer l'application
[Link]()
#Changement de l'état de l'ampoule
b.set_light(1, 'on', False)

[Link]

77
Contrôlez vos lumières à la maison

Essayez ce code dans votre éditeur préféré, mais n'oubliez pas de modifier d'abord
l'adresse IP du pont. Vous devrez peut-être modifier l'ID de la lumière sur la dernière
ligne, si "1" est déjà éteint ou si vous ne pouvez pas la voir depuis votre ordinateur.

Comme vous l'avez fait lors de l'utilisation du débogueur, vous devez également créer
un nom d'utilisateur pour utiliser l'API sur votre Raspberry Pi. Pour ce faire, vous devez
utiliser la fonction "connect()" une fois.

Donc :

• Appuyez sur le bouton sur le pont.

• Exécutez ce script.

• Si cela fonctionne, commentez la ligne "[Link]()".

Vous obtiendrez une erreur si votre Pi n'est pas autorisé ou si vous n'avez pas appuyé
sur le bouton :

Une fois que tout est correctement configuré, ce premier script devrait être facile à
comprendre pour vous :

• Sur la première ligne, nous importons la classe Bridge du module phue.

• Ensuite, nous créons un objet, "b", qui peut appeler toutes les méthodes de la
classe Bridge.

• Nous utilisons la méthode "connect()" la première fois, mais nous n'en avons plus
besoin par la suite.

• Une fois que votre Pi est reconnu, le pont autorise un accès direct à l'API.

• Enfin, nous utilisons la méthode "set_light()" pour modifier les propriétés d'une
ampoule. Dans ce cas, nous l'éteignons. Oui, "on=False" est la même chose que
"off=True".

Remplacez "False" par "True" sur la dernière ligne pour rallumer la lumière.

78
Contrôlez vos lumières à la maison

Créer un sapin de Noël


Maintenant que nous avons tout installé et que nous avons vu les bases de l'interaction
avec les lumières, nous pouvons passer à quelque chose de plus amusant. Si vous avez
la bande LED de Philips Hue, vous pouvez copier et coller mon code tel quel.
Si vous n'avez pas la bande LED de Philips Hue ou si vous utilisez une autre marque,
vous devrez adapter le code, mais ce n’est pas gênant. Vous avez maintenant
suffisamment de connaissances pour commencer à expérimenter par vous-même.

Ne vous inquiétez pas, je vais tout vous expliquer pour que vous puissiez le faire
facilement de votre côté. Le but ici est d'utiliser plusieurs concepts dont nous avons
parlé précédemment afin de coder un arbre de Noël.

Changez la couleur de la lumière


Avec les ampoules Philips, la valeur de la couleur est définie par deux nombres : x et y.
X et y sont des nombres compris entre 0 et 1, et la modification de leurs valeurs change
la couleur de la lumière. Il existe une formule compliquée pour convertir les couleurs
RVB en couleurs XY, mais nous n'en avons pas besoin dans ce projet. Nous allons
utiliser des couleurs aléatoires.

En fait, le moyen le plus simple que j'ai trouvé pour obtenir une couleur XY spécifique
est de la définir avec l'application sur votre smartphone, puis d'utiliser l'outil web de
l’API pour obtenir la valeur exacte.
Une autre façon est d'utiliser la bibliothèque "rgbxy", qui peut convertir les couleurs
RGB et HTML en équivalents XY directement en Python (plus de détails ici :
[Link]

Quoi qu'il en soit, pour changer la couleur, nous pouvons utiliser la même méthode
que précédemment :
b.set_light(1, 'xy', [0.2,0.7])
Vous pouvez essayer de modifier le script précédent et essayer différentes valeurs
(entre 0 et 1) pour voir comment cela fonctionne.

Remarque : lorsque nous avons obtenu la liste des lumières dans le débogueur
de l’API, vous avez peut-être vu d'autres variables comme la luminosité et la
saturation. Vous pouvez modifier leurs valeurs de la même manière.

79
Contrôlez vos lumières à la maison

Joyeux Noël
Nous allons maintenant mettre cela en pratique et changer progressivement la couleur
de votre bande LED pour qu'elle se comporte comme une guirlande de sapin de Noël.

• Pour faire simple, nous ne changerons pas la valeur de "y",


elle sera toujours égale à 0.

• Nous augmenterons la valeur de "x" par incréments de 0,03.

• Ex : 0, 0,03, 0,06, etc.

• Lorsque x atteint 1, sa valeur maximale, nous inversons la direction et diminuons la


valeur de "x". Puis nous répéterons l'opération lorsqu'il sera revenu à 0.

J'aimerais que vous essayiez de le faire par vous-même avant de lire mon script.
Je pense que c'est un excellent exercice pour pratiquer et expérimenter toute la théorie
dont nous avons parlé dans les premiers chapitres.
Conseil : vous aurez besoin de variables, de conditions, d'une boucle infinie et
évidemment de la bibliothèque phue.

80
Contrôlez vos lumières à la maison

Bref, voici mon script :

from phue import Bridge


from time import sleep

b = Bridge('[Link]')
bande_led = 3

b.set_light(led_strip, 'on', True)


x=0
y=0
direction=1

while True:
if x>1 or x<0:
direction=1-direction
if direction:
x=x+0.03
else:
x=x-0.03
print(str(x)+"/"+str(y))
b.set_light(bande_led, 'xy', [x,y])
sleep(0.5)

[Link]

81
Contrôlez vos lumières à la maison

• Nous commençons par définir un certain nombre de variables. Il est toujours


préférable de travailler avec des variables, avec des noms explicites de préférence.

• Ensuite, nous créons une boucle infinie "while True:" parce que nous voulons que la
lumière change de couleur tout le temps pendant l'exécution du script.

• Si la valeur x a atteint l'une de ses limites (0 ou 1), nous devons inverser le sens des
étapes incrémentales.

• Si le sens est positif, nous ajoutons 0,03 à la dernière valeur.


Si c’est négatif, nous enlevons 0,03 à la dernière valeur.

• Nous utilisons la méthode permettant de changer la couleur de la lumière et


attendons un peu avant de changer à nouveau la couleur.
Vous pouvez ajuster le temps d'attente pour que le changement soit plus rapide ou
plus lent, mais essayez de garder une valeur minimale ici.

• J'ai ajouté une ligne pour afficher la valeur pour ceux qui n'ont pas de lumières
intelligentes, mais aussi pour voir si la valeur x change bien comme prévu.

Et c'est tout ; un projet amusant avec moins de 20 lignes de code. Je pense que vous
devriez comprendre tout le code maintenant et commencer à voir la puissance de
Python dans un projet concret.

Je vous conseille de prendre le temps d'expérimenter à partir de là.


Pour ceux qui n’ont pas les ampoules Philips, vous avez peut-être déjà assez travaillé en
adaptant mon code.
Cependant, si vous avez simplement copié et collé mon script, essayez de faire quelque
chose de différent. Vous pouvez peut-être essayer de modifier la valeur de y par
exemple.

82
Contrôlez vos lumières à la maison

Mise en pratique
Cette mise en pratique est assez longue, mais il est temps que vous réfléchissiez
davantage par vous-même maintenant que vous avez compris la logique du code et la
syntaxe Python. Je pense que la moitié du travail de programmation consiste à trouver
un moyen de traduire notre raisonnement logique dans un script simple, quel que soit
le langage utilisé.

Objectif
Quoi qu'il en soit, le but de cet exercice est d'automatiser les lumières de la maison.
Nous allons définir une routine pour les allumer à une heure précise et les éteindre à
une autre heure.
Si vous n'avez pas de lumières intelligentes, cela ne vous empêche pas d’essayer.
Remplacez simplement la fonction set_lights() par une fonction print().

Voici ce que j'ai fait chez moi :

• Mes lumières s'allument à 4 h 30 du matin (oui, je me lève tôt).

• Elles s'éteignent automatiquement le soir à 20 heures.

• Est-ce qu'elles restent allumées toute la journée ?


Non, j'ai codé cela de façon à ajuster les heures d’arrêt et d’allumage en journée,
c’est justement le but de l’exercice…

• Je me connecte à une API pour obtenir les heures de lever et de coucher du soleil
de la journée en cours à mon emplacement. Le matin, les lumières s'éteignent 2
heures après le lever du soleil. Puis je les rallume 2 heures avant le coucher du
soleil.

Au moment où j'écris ces lignes (en été), le jour commence à se lever à 3 h 50 du matin
et mes lumières sont donc allumées de 4 h 30 à 5 h 50. Le coucher du soleil est à 22
heures, donc les lumières ne se rallument pas le soir, car je n'en ai pas besoin avant 20
heures. J'ai constaté qu'un décalage de 2 heures fonctionne bien pour être sûr d'avoir
assez de lumières quand il y a du mauvais temps.

Vous devrez ajuster cela en fonction de votre mode de vie et de votre exposition au
soleil, mais c'est en gros l'idée de cet exercice.

83
Contrôlez vos lumières à la maison

Automatiser les heures statiques


La première partie ne devrait pas être très compliquée.
Créez deux scripts : lights_on.py et lights_off.py.
Ces scripts correspondent aux deux premières étapes expliquées précédemment.

Par exemple, vous allez programmer lights_on.py pour qu'il s'exécute au moment
où vous vous réveillez et utiliser lights_off.py au moment où vous voulez éteindre la
lumière.

Nous en avons déjà parlé dans ce chapitre, mais vous aurez peut-être besoin d'aide
pour les planifier. La planification des tâches sous Linux est contrôlée par un service
nommé "cron".
Vous trouverez tout ce dont vous avez besoin dans cet article :
[Link]
Lisez cet article et programmez vos scripts.
Vos lumières devraient maintenant s'allumer et s'éteindre aux heures spécifiées, mais
elles resteront allumées toute la journée. Nous devons travailler sur le dernier point
pour les éteindre en fonction des heures de lever et de coucher du soleil.

Se connecter à l'API
Lorsque vous avez des projets complexes, c'est toujours une bonne idée de
les décomposer en petites parties. La première étape était facile et consistait à
programmer les deux premiers scripts à des heures précises.
Maintenant, nous allons voir comment nous connecter à une API pour obtenir les
heures de lever et de coucher du soleil. Nous ne les utiliserons pas directement pour
contrôler les lumières, on va d’abord tester le fonctionnement de l’API.

J'utilise l'API fournie gratuitement par ce site web : [Link]


Elle est simple à utiliser, car tous les paramètres vont directement dans l'URL, par
exemple :
[Link]

84
Contrôlez vos lumières à la maison

Le résultat est au format JSON et ressemble à ceci :

{
"results":
{
"sunrise":"7:27:02 AM",
"sunset":"5:05:55 PM",
"solar_noon":"12:16:28 PM",
"day_length":"9:38:53",
"civil_twilight_begin":"6:58:14 AM",
"civil_twilight_end":"5:34:43 PM",
"nautical_twilight_begin":"6:25:47 AM",
"nautical_twilight_end":"6:07:10 PM",
"astronomical_twilight_begin":"5:54:14 AM",
"astronomical_twilight_end":"6:38:43 PM"
},
"status":"OK"
}

Voici les étapes que vous devez suivre pour utiliser cette API avec Python :

• Créez un nouveau script, quelque chose comme lights_auto.py.

• Trouvez quelle bibliothèque Python vous pouvez utiliser pour accéder à une URL et
récupérer son contenu.

• Étant donné que la réponse sera en JSON, vous aurez également besoin d'une
bibliothèque pour lire le format JSON.

• Enfin, il faudra comparer les heures de lever et de coucher du soleil aux heures
actuelles.
Pour ce faire, vous pouvez utiliser la bibliothèque datetime que nous avons vue au
chapitre 5.

85
Contrôlez vos lumières à la maison

Dans la plupart des projets, Google sera votre meilleur ami pour trouver les
bibliothèques dont vous avez besoin et comment les utiliser. Si c'est votre premier
projet et que vous n'avez aucune idée d'où chercher, je vais vous aider un peu.

Voici les trois bibliothèques que nous allons utiliser dans cet exercice :

• URLlib : [Link]

• JSON : [Link]

• Date : [Link]

Commencez à créer votre script. N'oubliez pas de le faire étape par étape :

• Utilisez URLlib pour récupérer le résultat donné par l’API.


Vérifiez que cela fonctionne en l’affichant tel quel.

• Utilisez ensuite la bibliothèque JSON pour stocker le résultat dans des variables
simples.
Pour accéder à une valeur spécifique dans une réponse au format JSON, vous devez
utiliser la bibliothèque pour la convertir en une liste Python.
Vous utiliserez ensuite l'entrée correspondante entre crochets, comme les listes
que nous avons vues au chapitre 4, mais avec le nom de l'index au lieu d'un
nombre.
Par exemple : results['sunset']

• Une fois que vous avez les heures dans deux variables, vous pouvez utiliser la
bibliothèque datetime pour trouver la différence entre elles et l'heure actuelle.

• Le but ici est juste d'avoir deux variables : diff_coucher et diff_lever.


Par exemple, diff_lever peut être 2000 et diff_coucher 55000.

• Inutile de faire quoi que ce soit avec les lumières pour l’instant.

Ne vous laissez pas submerger par le nombre d'étapes que vous voyez, travaillez
simplement sur chacune d'elles une par une. Assurez-vous que chaque étape
fonctionne comme prévu, puis passez à la suivante lorsque vous êtes prêt.

Vous trouverez ma version de ce script à la fin du livre, mais je suis sûr qu'il existe
plusieurs façons de le faire, donc si votre script fonctionne, c'est parfait.

86
Contrôlez vos lumières à la maison

Ajustez le programme des lumières avec les résultats de l'API


Le plus dur est fait, il ne nous reste plus qu'à inclure la bibliothèque phue et à allumer
et éteindre la lumière en fonction de l'heure de la journée. Nous utiliserons les
mêmes fonctions que celles que nous avons vues précédemment, et nous ajouterons
simplement quelques conditions pour que cela fonctionne comme prévu.

Pour rappel, l'objectif est d'allumer les lumières 2 heures avant le coucher du soleil et
de les éteindre 2 heures après son lever.

Voici quelques conseils pour vous guider dans cette dernière étape :

• Si le coucher du soleil est dans moins de 2 heures, on allume les lumières.

• Si le lever du soleil est dans moins de 22 heures, on éteint les lumières.


Oui, c'est un raccourci, vous pouvez le faire différemment si vous trouvez un
meilleur moyen.

• N'oubliez pas que diff_lever et diff_coucher sont en secondes, et pour information il


y a 3 600 secondes dans une heure.

• Il n'y a rien à faire entre le coucher et le lever du soleil.


Nous avons les tâches programmées pour cela.

Si vous arrivez à faire fonctionner tout cela (seul ou grâce à la solution), n'hésitez pas à
l'adapter ensuite à votre emploi du temps.
Notez qu'il existe également un moyen de changer progressivement l'intensité
lumineuse. Cela pourrait être un excellent ajout, que ce soit pour un réveil en douceur
ou une extinction progressive le soir.

J'espère que vous n'avez pas eu trop de difficultés avec cet exercice. C’était voulu qu’il
soit un peu plus compliqué que les précédents, mais une fois décomposé en petites
étapes, vous devriez vous en sortir.

Si vous pensez avoir pris un peu de retard, ne vous inquiétez pas. Prenez simplement le
temps de vérifier à nouveau la solution, et peut-être de revoir rapidement les chapitres
3 et 4 pour voir ce que vous avez manqué.
La plupart du temps, la partie difficile est la logique, pas la syntaxe. Vous comprendrez
la solution, mais pas comment y parvenir seul. Ne vous inquiétez pas, cela viendra
naturellement quand vous aurez réalisé plus de projets.

87
Communiquer avec le monde

COMMUNIQUER
AVEC LE MONDE

Introduction
Ce chapitre est sans doute plus facile que le précédent, mais il est tout aussi important.
Parfois, vous créez des scripts Python qui s'exécutent selon une planification précise
(comme l'allumage et l'extinction des lumières dans le chapitre 7), et vous ne regardez
plus votre script après cela. Si vos lumières ne fonctionnent plus, vous le remarquerez
sûrement, mais pour les scripts plus discrets, ce n'est pas forcément le cas.

L'objectif de ce chapitre est d'utiliser des scripts Python pour envoyer des messages.
Je suppose qu'il s'agira surtout de notifications à vous-même, soit par email, soit avec
des notifications push sur votre smartphone, mais cela peut aussi être utile si vous avez
d'autres personnes à prévenir.

Par exemple, j'ai un script qui se connecte à mon NAS, où je stocke mes sauvegardes, et
qui m'envoie un e-mail s'il n'y a pas de fichiers récents. Cela pourrait être très utile pour
certains projets Python, c'est pourquoi je l'ai inclus dans ce livre. Et, avec tout ce que
l’on a déjà vu dans ce livre, cela ne devrait pas être trop compliqué pour vous.

88
Communiquer avec le monde

Emails
Lorsque vous configurez un client de messagerie sur votre ordinateur, il vous demande
un serveur SMTP auquel envoyer vos messages. Python fonctionne sur le même
principe. Nous allons ouvrir une connexion à votre serveur de messagerie et l’utiliser
pour envoyer un message.

Je vais vous montrer comment faire avec Gmail, car c'est le fournisseur de messagerie
le plus populaire, mais cela devrait fonctionner avec n'importe quel serveur de
messagerie prenant en charge SSL.

Avant toute chose, vous aurez besoin :

• De l’adresse du serveur de messagerie.


Ex : [Link]

• Du numéro de port SMTP.


Ex : 465

• De votre nom d'utilisateur et votre mot de passe.

Envoi d'un courriel avec Python


Comme d'habitude, il y a quelques bibliothèques que nous utiliserons pour faire cela :

• smtplib : [Link]

• ssl : [Link]

89
Communiquer avec le monde

Comme nous allons envoyer le courriel au serveur SMTP avec SSL, nous aurons besoin
des deux. Ne perdons pas de temps ici, voici le script que vous pouvez utiliser pour
envoyer un email en Python :

import smtplib, ssl

#Configuration des paramètres serveur


server = "[Link]"
port = 465
utilisateur = "vous@[Link]"
motdepasse = "votremotdepasse"

context = ssl.create_default_context()

#Création de l'email
destinataire = "contact@[Link]"
objet = "Ton script Python fonctionne"
texte = "Et ton livre est formidable au passage :)"

#Assemblage du message
message = f"""Subject: {objet}
To: {destinataire}
From: {utilisateur}
{texte}"""

with smtplib.SMTP_SSL(serveur, port, context=context) as server:


[Link](utilisateur, motdepasse)
[Link](utilisateur, destinataire, message)

[Link]

90
Communiquer avec le monde

Il faut que j’explique quelques petites choses :

• Le contexte SSL inclut tous les paramètres par défaut pour établir la connexion
SSL. Nous n'avons pas besoin d'entrer dans les détails techniques ici, c'est juste
nécessaire pour que cela fonctionne.

• La construction de la variable message doit vous sembler un peu étrange, en effet,


c’est une syntaxe que nous n’avons pas vu précédemment.
Lorsque vous avez des variables à concaténer sur plusieurs lignes, vous pouvez
utiliser les triples guillemets pour définir la valeur directement.
En utilisant le "f" avant les triples guillemets, puis en mettant les variables entre
accolades, elles seront remplacées par leur valeur. C'est une syntaxe étrange, mais
très pratique dans ce cas.
N'hésitez pas à afficher la valeur du message pour voir comment cela fonctionne.

• L'instruction "with" est aussi une manière différente de définir une variable.
En gros, c'est la même chose que ceci :
server = smtplib.SMTP_SSL(server, port, context=context)
Mais cette syntaxe fermera la connexion une fois que le paragraphe suivant aura
été exécuté. C'est souvent une bonne pratique d'utiliser ceci quand on travaille avec
des ressources non gérées (comme les fichiers et les connexions). Le fichier ou la
connexion sera fermé même s'il y a une exception. Notamment si la connexion ne
fonctionne pas ou si votre mot de passe est rejeté.

Note : Votre mot de passe habituel peut ne pas fonctionner dans ce script. Par
exemple, avec Gmail, vous devez d'abord générer un mot de passe d'application,
qui fonctionnera sans le processus d'authentification en 2 étapes. Vous pouvez le
faire ici : [Link]

91
Communiquer avec le monde

Pièces jointes
L'envoi de pièces jointes peut également être intéressant pour vos scripts.
Par exemple, si vous contrôlez une caméra avec Python, vous pouvez envoyer l'image
dans une pièce jointe lorsqu'un mouvement est détecté.

C'est la même base, mais il y a un nouvel objet à introduire : la partie MIME.


MIME est l'acronyme de "Multipurpose Internet Mail Extensions" et, comme son nom
l'indique, il est utilisé pour compléter un message électronique et ajouter une pièce
jointe.

Pour définir une pièce jointe MIME, nous aurons besoin de quelques méthodes, mais
toutes proviennent de la bibliothèque de messagerie :
[Link]

92
Communiquer avec le monde

Comme toujours, je vous donne le code et je vous expliquerai après :

import smtplib, ssl

from email import encoders


from [Link] import MIMEBase
from [Link] import MIMEMultipart
from [Link] import MIMEText

#Configuration des paramètres serveur


server = "[Link]"
port = 465
utilisateur = "vous@[Link]"
motdepasse = "votremotdepasse

context = ssl.create_default_context()

#Création de l'email
destinataire = "contact@[Link]"
objet = "Ca semble fonctionner aussi"

#Assemblage du message texte


message = MIMEMultipart()
message["From"] = utilisateur
message["To"] = dest
message["Subject"] = objet

#Ajout d'une pièce jointe


fichier ="[Link]"
with open(filename, "r") as piecejointe:
part=MIMEBase("application", "text")
part.set_payload([Link]())
encoders.encode_base64(part)
part.add_header("Content-Disposition", f"attachment; filename= {fichier}")
[Link](part)

texte = message.as_string()
with smtplib.SMTP_SSL(server, port, context=context) as server:
[Link](utilisateur, motdepasse)
[Link](utilisateur, destinataire, texte)

[Link]

93
Communiquer avec le monde

• Nous avons à nouveau besoin de smtplib et ssl, mais nous importons également les
fonctions dont nous avons besoin de la bibliothèque email. Comme il s'agit d'une
bibliothèque assez lourde, nous n'incluons que les modules que nous utiliserons.

• Je définis le message différemment cette fois (sur plusieurs lignes). Libre à vous
d’utiliser cette syntaxe si vous la trouvez plus facile à lire que celle que nous avons
utilisée dans le script précédent.

• Ensuite, nous avons besoin d'un fichier que nous allons ajouter à la pièce
jointe. Dans ce cas, il s'agit d'un fichier texte, nommé de manière très originale :
"[Link]".
Comme vous pouvez le voir, nous utilisons l'instruction "with" pour ouvrir un fichier,
comme pour la connexion SMTP.

• La fonction d'ouverture prend deux paramètres, le nom du fichier et le mode


d'ouverture.

r Lire x Créer

a Ajouter t Texte (par défaut)

w Écrire b Binaire

• Ensuite, nous utilisons la bibliothèque MIME pour joindre ce fichier au message.

• Une fois cela fait, nous pouvons utiliser les fonctions de smtplib pour envoyer le
courriel, comme dans le premier exemple.

Remarque : si vous souhaitez joindre une image au lieu d'un fichier texte,
vous devez apporter quelques modifications au paragraphe qui crée l’objet
MIME. Utilisez "rb" et "image" au lieu de "r" et "text" par exemple. Consultez la
documentation pour plus de détails.

Vous pouvez utiliser ces deux scripts comme base dans vos projets. Une fois que vous
aurez compris la logique, vous devriez facilement pouvoir les adapter à vos besoins.

94
Communiquer avec le monde

Notifications
Les courriels sont très bien, mais pour les informations les plus critiques, j'ai tendance
à utiliser les notifications push. Ainsi, il n'y a pas de spam, pas de filtre et pas besoin
d'attendre que je vérifie mes e-mails. Je suis certain d'obtenir l'information rapidement.

Envoyer des notifications push aux téléphones Android et iOS n'est pas une tâche
facile, vous devrez d'abord créer une application. Et, ce n'est pas du tout le but de ce
livre. Nous voulons faire quelque chose de simple.

Le moyen le plus simple que j'ai trouvé pour cela est d'utiliser une application
appelée "Pushbullet". Une API et une bibliothèque Python sont disponibles pour cette
application.

Installer Pushbullet
Pushbullet est un service gratuit. Il existe un plan Pro, mais je ne pense pas que vous en
ayez besoin de sitôt. J'utilise leur service gratuit depuis des années et il est parfait.
Commencez par créer votre compte sur [Link]
Vous pouvez faire cela en quelques clics en utilisant votre compte Google ou Facebook
pour vous identifier.

Une fois cela fait, installez les applications Pushbullet :

• Sur Android, vous pouvez la trouver dans le Play Store.

• Il existe une extension pour Chrome et Firefox.

• Et il y a également une application pour Windows.

Vous trouverez tout ici : [Link]

Malheureusement, si vous êtes un utilisateur d'iPhone/Mac, vous devrez utiliser


l'extension du navigateur, car il ne semble pas y avoir d'autre solution disponible pour
vous.

Une fois votre compte créé et l'application installée sur au moins une plateforme, nous
pouvons commencer à l'utiliser avec Python.

95
Communiquer avec le monde

Utilisation de l'API Pushbullet


De retour sur votre Raspberry Pi, la première chose à faire est d'installer les
bibliothèques avec PIP (pensez bien à créer un environnement et à l'activer) :
pip3 install [Link]

Vous aurez besoin de votre token de Pushbullet pour ce premier test.


Vous pouvez le trouver dans les paramètres de votre compte : Settings > Access
Tokens > Create Token.
Gardez-le précieusement, vous en aurez besoin chaque fois que vous voudrez envoyer
une notification via un script Python.

Créons tout de suite un premier script pour essayer cela :

from pushbullet import PushBullet

token = ″VOTRE_TOKEN″

pb = PushBullet(token)
pb.push_note(″Test″,″Hello you!″)

[Link]

C'est tout, vous devriez recevoir une notification push :

Il s'agit du code de base dont vous aurez besoin dans un script pour envoyer une
notification à votre téléphone ou à votre ordinateur.

Il y a d’autres fonctions disponibles pour aller un peu plus loin, comme ajouter des liens
ou des images dans vos notifications, supprimer d’anciennes notifications ou notifier
uniquement un appareil en particulier.

96
Communiquer avec le monde

Vous pouvez trouver plus de détails à ce sujet dans la documentation officielle et la


bibliothèque GitHub (en anglais) :

• Documentation officielle : [Link]

• Documentation de la bibliothèque : [Link]

Remarque : ne nommez jamais votre script de la même façon que le nom de


la bibliothèque. Par exemple: "[Link]" ne fonctionnera pas. Vous devez
toujours utiliser un nom différent pour éviter les conflits.

Mise en pratique
Dans ce chapitre, nous avons appris que même si les scripts s'exécutent seuls sur un
Raspberry Pi, nous avons souvent besoin de notifications au cas où quelque chose ne
se passe pas comme prévu (ou qu'une action de l'utilisateur est requise). Vous savez
maintenant comment envoyer des notifications par email et par push si cela vous
arrive.

Dans l'ensemble, ce chapitre n'était pas aussi compliqué que le précédent. La syntaxe
pour envoyer un e-mail est peut-être un peu étrange, mais plus rien de nous arrête
désormais !
Dans cet exercice, nous allons à nouveau utiliser l'API du chapitre précédent et
appliquer ce que nous avons vu dans celui-ci.

L'objectif sera d'envoyer une notification push, chaque jour à minuit, indiquant les
heures de lever et de coucher du soleil pour la journée :

• Créez un nouveau script sans oublier d’inclure toutes les bibliothèques nécessaires.

• Créez des variables définissant les coordonnées de l'emplacement actuel et le


token pour Pushbullet.

• Envoyez un push bien formaté avec les heures de lever et de coucher du soleil.

Une fois que c'est fait, vous pouvez considérer que vous maitrisez les API et l’utilisation
du format JSON, ce qui est essentiel dans de nombreux scripts que vous écrirez à
l'avenir.

97
Un dernier projet: Le Sense HAT

UN DERNIER PROJET :
LE SENSE HAT

Introduction
Je pense vous avoir déjà enseigné tout ce dont vous avez besoin pour réaliser n'importe
quel projet où des scripts Python sont nécessaires. Ce chapitre est juste le projet ultime
pour mettre tout en pratique ensemble : variables, fonctions, boucles et même un peu
de matériel.

Le Sense Hat est le "HAT" le plus populaire sur Raspberry Pi. Il s'agit d'une carte
d'extension, créée par la Fondation Raspberry Pi, qui fournit de nombreux capteurs,
une matrice de LED et un joystick. Et bien sûr, on peut utiliser Python pour contrôler
tout cela.

Dans ce chapitre, nous allons l'utiliser pour faire quelque chose d'amusant, mais cela
ne devrait pas nécessiter de nouvelles compétences en Python. Vous devriez déjà tout
savoir, il s'agit juste d'un chapitre d'entraînement grandeur nature.

98
Un dernier projet: Le Sense HAT

À propos du Sense HAT


Présentation
À l'origine, le Sense HAT a été créé par la Fondation Raspberry Pi sous le nom de "Astro
Pi" (vous avez peut-être déjà entendu ce nom). L'objectif était d'envoyer quelques
Raspberry Pi avec de nombreux capteurs à bord de la Station spatiale internationale
(ISS). Après ce vol réussi, le Sense HAT a été commercialisé et rendu disponible pour
tout le monde sur Terre :).

Le Sense HAT fournit de nombreux nouveaux capteurs au Raspberry Pi :

• Accéléromètre (pour obtenir la vitesse de déplacement du PI)

• Gyroscope (mesure les mouvements de rotation du Raspberry Pi)

• Magnétomètre (mesure du champ magnétique)

• Capteur de pression d'air

• Capteurs de température et d'humidité

Et il y a aussi une matrice d'affichage LED et un joystick sur le dessus.


Tout est contrôlable par des scripts Python, que nous aborderons dans la prochaine
partie de ce tutoriel.

Devez-vous en acheter un ?
Comme vous êtes intéressé par Raspberry Pi et Python, je vous recommande vivement
de vous procurer un Sense HAT avant de lire ce chapitre. Il possède tellement de
capteurs et de fonctionnalités que vous pouvez l’utiliser dans différents projets, il n'est
pas cher et c’est l'une des extensions les plus populaires (il est donc facile de trouver
de l'aide à son sujet). De plus, il est fabriqué par la Fondation Raspberry Pi et fonctionne
donc sur tous les modèles de Raspberry Pi.

Pour plus de détails et pour vérifier le prix actuel, visitez ma page de ressources ici :
[Link]

99
Un dernier projet: Le Sense HAT

Quel que soit votre choix, sachez qu'il est possible de suivre ce chapitre sans, car il
existe un émulateur disponible sur Raspberry Pi OS. Ce n’est pas aussi amusant, mais
vous pouvez lancer l'application et interagir avec elle au lieu de la HAT physique.

Si pour une raison ou un autre vous ne pouvez pas vous procurer le Sense HAT,
remplacez simplement cette ligne dans tous les scripts que je donne dans ce chapitre :

from sense_hat import SenseHat

par:

from sense_emu import SenseHat

En faisant cela (et en exécutant l'émulateur), vous devriez pouvoir obtenir les mêmes
résultats.

L'API Sense HAT


Le Sense HAT dispose d'une API Python avec toutes les fonctions nécessaires pour
interagir avec les capteurs et la matrice de LED. Je vais maintenant expliquer les
principales fonctions que vous pouvez utiliser, mais si vous avez besoin d'informations
supplémentaires, vous pouvez consulter la documentation ici :
[Link]

Comme il s'agit d'un produit de la Fondation Raspberry Pi, destiné à apprendre à coder,
il n'y a rien de trop compliqué. Avec vos compétences actuelles en Python, cela devrait
être assez simple.

Note : Le paquet sense-hat est nécessaire. Il devrait être installé par défaut
sur Raspberry Pi OS, mais il est disponible dans le gestionnaire de paquets si
nécessaire.

100
Un dernier projet: Le Sense HAT

Afficher du texte
Commençons par quelque chose d'intéressant, il est possible d'utiliser la matrice de
LED pour afficher du texte.

Hello world

Créez un premier script pour tester ceci, et tapez le code suivant :

from sense_hat import SenseHat

sense = SenseHat()
sense.show_message("Bonjour")

[Link]

Comme nous l'avons vu dans le chapitre précédent :

• Nous devons importer la classe SenseHat de la bibliothèque sense_hat.

• Puis nous créons un objet nommé "sense" qui sera utilisé pour appeler n'importe
quelle méthode de cette classe.

• Et enfin la fonction show_message affichera le texte indiqué sur l'écran LED.

101
Un dernier projet: Le Sense HAT

Fonctions avancées

La fonction show_message possède d'autres paramètres optionnels, la syntaxe


complète est :
show_message(<texte>,<vitesse>,<couleur>,<fond>)

• Vitesse : la valeur par défaut est "0.1", augmentez ou diminuez cette valeur pour
modifier la vitesse de défilement.

• Couleur : représentée par une liste contenant la couleur RGB de votre texte. Ex :
(255,0,0) est rouge.

• Fond : même format pour la couleur d'arrière-plan.

Exemple :

sense.show_message("Bonjour", 0.2, (0,0,255), (255,255,255))

Cela affichera "Hello world" en bleu sur un fond blanc, deux fois plus lentement que le
premier exemple.

Note : le fond reste éclaire à la fin du script, vous pouvez utiliser cette fonction
pour réinitialiser l'affichage LED :
[Link]().

102
Un dernier projet: Le Sense HAT

Allumer certains pixels


Il est également possible d'éclairer des pixels spécifiques à la couleur souhaitée.

Modifier un pixel
La première fonction que vous pouvez utiliser est

set_pixel(x, y, couleur)
set_pixel(x, y, r, r, g, b)

Oui, il y a deux façons de l'utiliser. Vous pouvez soit passer la couleur en un seul
paramètre, sous forme de liste, soit chaque valeur RVB séparément.

Voici un exemple complet :

from sense_hat import SenseHat

sense = SenseHat()

rouge = (255,0,0)
sense.set_pixel(2,6,rouge)

[Link]

103
Un dernier projet: Le Sense HAT

Modifier tous les pixels en même temps


Une autre méthode consiste à définir la valeur de chaque pixel dans une liste géante de
valeurs. Cela peut sembler plus compliqué, mais cela peut être très utile dans certains
cas. La fonction est set_pixels, avec un "s" et ne prend qu'un seul paramètre : une liste
contenant 64 listes de valeurs RVB.

Voici un exemple pour que cela soit plus clair :

from sense_hat import SenseHat

sense = SenseHat()

X = [255, 0, 0] # Rouge
O = [255, 255, 255] # Blanc

point_interrogation = [
O, O, O, X, X, O, O, O,
O, O, X, O, O, X, O, O,
O, O, O, O, O, X, O, O,
O, O, O, O, X, O, O, O,
O, O, O, X, O, O, O, O,
O, O, O, X, O, O, O, O,
O, O, O, O, O, O, O, O,
O, O, O, X, O, O, O, O
]

sense.set_pixels(point_interrogation)

[Link]

Pour information, il s'agit d'un exemple tiré de la documentation officielle.


Donc, nous définissons les deux listes pour les couleurs principales (rouge et blanc
dans ce cas).
Ensuite on crée une liste avec 64 éléments (8 lignes de 8 pixels), définissant quelle
couleur utiliser pour chaque pixel.

Vous pouvez jouer avec ce script pour test vos talents en matière de pixel art, mais
aussi pour interagir avec l'utilisateur. Dans certains cas, il sera beaucoup plus rapide de
faire cela plutôt que de faire de nombreuses lignes set_pixel().

104
Un dernier projet: Le Sense HAT

Accéder aux données des capteurs


La récupération des données à partir des capteurs du Sense HAT est simple, mais je
dois vous donner les fonctions que vous pouvez utiliser pour le faire :

from sense_hat import SenseHat

sense = SenseHat()

#température
temp = sense.get_temperature()
print("Température: "+ str(temp) +" °C")

#humidité
humidite = sense.get_humidity()
print("Humidité: "+ str(humidite) +" %")

#pression
pression = sense.get_pressure()
print("Pression: "+ str(pression) +" Millibars")

[Link]

Les noms sont explicites et il n'y a pas de paramètres, donc ça ne devrait pas poser de
problème.
Ces fonctions renvoient une valeur flottante (avec beaucoup trop de décimales !), vous
devez donc utiliser la fonction str() pour les concaténer dans une fonction print(). Vous
pouvez également utiliser la fonction round() pour limiter le nombre de décimales.

D'autres fonctions sont disponibles, je vous laisse consulter la documentation pour les
découvrir. De plus, le magnétomètre doit être calibré avant d'être utilisé, vous pouvez
trouver des conseils sur le site officiel :
[Link]

105
Un dernier projet: Le Sense HAT

Utilisation du joystick
La dernière chose que je veux vous montrer avant de passer à l'exercice est le joystick.
Nous pouvons détecter son utilisation et faire quelque chose en fonction de l'action de
l'utilisateur (et ce sera le but de la mise en pratique !).

Le joystick déclenche un événement lorsque l'utilisateur interagit avec. Un événement


a plusieurs paramètres : un horodatage, une action (appuyé, relâché, maintenu) et une
direction (haut, bas, gauche, droite, milieu).

Il existe deux fonctions que vous pouvez utiliser pour obtenir cet événement en Python:

• wait_for_event()
Comme son nom l'indique, le script est mis en pause jusqu'à ce que quelque chose
se produise.
La fonction renvoie trois valeurs : un timestamp, l’action effectuée et la direction.

• get_events()
Plutôt que d'attendre de nouveaux événements, vous pouvez vérifier si quelque
chose s'est produit récemment. Cette fonction vous donne l'historique de tous les
événements qui se sont produits depuis l'appel précédent.

106
Un dernier projet: Le Sense HAT

Voici un script de base pour vous montrer comment cela fonctionne :

from sense_hat import SenseHat


from time import sleep

sense = SenseHat()

event = [Link].wait_for_event()
print("Mouvement détecté {} {}".format([Link], [Link]))

sleep(0.1)
event = [Link].wait_for_event()
print("Mouvement détecté {} {}".format([Link], [Link]))

[Link]

Lorsque vous exécutez le script, il ne fera rien tant que vous n'utiliserez pas le joystick.

Le premier message montrera une action "pressed" (appuyé) avec la direction et le


second correspondra à l'événement "released" (relâché).
Évidemment, l'idée ici est de faire quelque chose en fonction de ces événements, c'est
ce que nous allons essayer de faire dans l'exercice ci-dessous.

107
Un dernier projet: Le Sense HAT

Mise en pratique
Vous avez maintenant une meilleure idée des fonctionnalités de Sense HAT, et de la
façon dont vous pouvez les utiliser pour des projets intéressants. Vous pouvez trouver
de nombreux exemples en ligne (vous pouvez même créer des jeux avec !), mais nous
allons d’abord faire un exercice ici pour mettre cela en pratique.

Le but de cet exercice est d'interagir avec un pixel LED en utilisant le joystick. Effacer la
matrice LED et placer un pixel au milieu de celle-ci. Ensuite, nous déplacerons le pixel
en fonction des événements du joystick. Si vous appuyez sur le joystick vers la gauche,
le pixel doit également se déplacer vers la gauche. Intéressant n’est-ce pas ?

Si vous avez une idée sur la manière de procéder, lancez-vous !


C'est super si vous arrivez à décomposer vous-même ce projet en petites parties. Il
existe plusieurs manières de réaliser cela, et je préfère que vous le fassiez à votre
façon.

Précision : lorsque vous définissez des variables en dehors d'une fonction et que vous
voulez mettre à jour leurs valeurs dans une fonction, vous devez utiliser le mot-clé
"global" pour indiquer à Python que vous voulez cela.

Exemple :

def changer_nom():
global prenom
prenom = ″Robert″

prenom = ″Patrick″
print(prenom)
change_nom()
print(prenom)

108
Un dernier projet: Le Sense HAT

La première variable affichée sera "Patrick" et la seconde "Robert". Si vous supprimez la


ligne qui commence par "global" dans la fonction, les deux fonctions print() afficheront
la même chose ("Patrick").

Vous êtes un peu perdu avec cet exercice ?


Ne vous inquiétez pas, voici les étapes que je vous conseille de suivre :

• Importez les bibliothèques et créez l'objet sense comme dans les exemples
précédents.

• Définissez deux variables représentant la position de votre pixel (x et y par


exemple).

• Créez une boucle infinie qui attend de nouveaux événements de joystick et affichez
les paramètres de l'événement (pour faciliter le débogage).

• Créez maintenant une fonction que vous appellerez à la place de l'affichage des
évènements.
Le but de cette fonction sera de déplacer le pixel en fonction de l'action et de la
direction.

• Dans cette fonction, créez des conditions pour modifier les valeurs x et y en
fonction de l'action et de la direction.
Ex : si le joystick est pressé vers la gauche, alors on diminue la valeur x.
Affichez x et y dans la fonction pour vérifier que tout se passe comme prévu.

• Une fois que x et y sont correctement mis à jour, vous pouvez mettre à jour le pixel
allumé sur la matrice LED avec les nouvelles valeurs. N'oubliez pas d'éteindre le
pixel précédent avant d'allumer le nouveau, le but n’est pas de jouer à Snake pour
l’instant :-).

109
Un dernier projet: Le Sense HAT

Comme toujours, vous pouvez trouver ma solution dans le dossier des scripts et à
la fin de ce livre. Mais, si votre méthode fonctionne, c'est génial, la mienne n'est pas
forcément meilleure, prenez juste quelques minutes pour les comparer. Si la vôtre n'a
pas fonctionné, essayez de comprendre pourquoi en lisant ma solution.

Si c'était facile pour vous, vous pouvez aller plus loin et créer des jeux avec.
Vous vous souvenez de Pacman ? Pourquoi ne pas mettre des pixels aléatoires d'une
autre couleur qui ajoutent des points au joueur lorsqu'il les ramasse ? Ou des pixels
mauvais qui mettent fin au scénario s'ils sont touchés ?
Vous pouvez également trouver d'autres exemples amusants sur [Link] :
[Link]

110
Librairies Python

LIBRAIRIES PYTHON

Introduction
Après avoir lu ce livre, vous devriez avoir une bonne compréhension des principes de
base qui sont mis en œuvre pour chaque projet utilisant Python. Lorsque vous avez
une idée de projet, vous savez comment importer les différents modules nécessaires et
utiliser vos compétences pour atteindre vos objectifs. C’est souvent moins compliqué
que ce que l’on pense au début.

Maintenant que vous avez appris les concepts fondamentaux de Python et


expérimenté avec les quelques projets présentés dans ce livre, il est temps de passer à
l’étape suivante : écrire votre propre code.

• Étape 1 : Comprendre la logique de n’importe quel langage de programmation.

• Étape 2 : Apprendre à appliquer cette logique à un langage spécifique (ex : Python).

• Étape 3 : Être capable de lire et comprendre n’importe quel code source écrit par
quelqu’un d’autre.

• Étape 4 : Coder votre propre solution pour atteindre un objectif précis.

Cette annexe va vous aider avec l’étape 4. Créer ses scripts ne veut pas dire qu’il ne faut
plus chercher d’exemples en ligne, mais c’est vous qui choisirez la meilleure méthode
et coderez suivant votre style. Je vous donne ici 10 librairies intéressantes que vous
pourrez utiliser dans de nombreux projets. Elles sont parfaites pour le Raspberry Pi et
faciles à utiliser (car bien documentées).

111
Librairies Python

1 - GPIO
Nom GPIO

Objectif Interagir avec les broches GPIO

Paquet sudo apt install [Link]

Documentation [Link]

import [Link] as GPIO


[Link]([Link])
[Link](False)
led = 4
#Allumer la LED
print "LED allumée"
Exemple basique
[Link](led,1)
#Attendre 5s
[Link](5)
#Eteindre la LED
print "LED éteinte"
[Link](led,0)

Lien [Link]

gpiozero
Alternative [Link]
computing

112
Librairies Python

2 - Guizero
Nom Guizero

Objectif Créer des interfaces graphiques simples avec Python

Paquet sudo apt install python3-guizero

Documentation [Link]

from guizero import App


Exemple basique app = App(title="Bonjour")
[Link]()

[Link]
Lien
with-guis

113
Librairies Python

3 - Twitter
Nom Twython

Objectif Utiliser l’API Twitter avec Python

Paquet pip3 install twython

Documentation [Link]

from twython import Twython


from auth import (
consumer_key,
consumer_secret,
access_token,
access_token_secret
)

twitter = Twython(
Exemple basique
consumer_key,
consumer_secret,
access_token,
access_token_secret
)

message = "Bonjour Twitter !"


twitter.update_status(status=message)
print("Tweet envoyé : " + message)

[Link]
Lien
with-the-twitter-api

Alternative python-twitter, tweepy

114
Librairies Python

4 - Pygame
Nom Pygame

Objectif Développement de jeux

Paquet sudo apt install python3-pygame

Documentation [Link]

5 - Flask
Nom Flash

Objectif Création d’un site web avec Python

Paquet sudo apt install python3-flask

Documentation [Link]

from flask import Flask

app = Flask(__name__)
Exemple basique
@[Link]('/')
def index():
return 'Bonjour'

[Link]
Lien
server-with-flask

115
Librairies Python

6 - MySQL
Nom MySQL Connector

Objectif Interactions avec une base de donnée MySQL

Paquet pip3 install mysql-connector-python

Documentation [Link]

import [Link]

cnx = [Link](user='patrick', password='mdp',


Exemple basique
host='[Link]',
database='utilisateurs')
[Link]()

Alternatives MiniDB, SQLite3, etc.

7 - OpenCV
Nom OpenCV

Objectif Analyse d’images et machine learning (intelligence artificielle)

Paquet sudo apt install python3-opencv

Documentation [Link]

116
Librairies Python

8 - Requests
Nom Requests

Objectif Faire des requêtes HTTP avec Python

Paquet sudo apt install python3-requests

Documentation [Link]

import requests
Exemple basique
response = [Link](''[Link]

9 - Matplotlib
Nom Matplotlib

Objectif Créer des graphiques de visualisation des données

Paquet sudo apt install python3-matplotlib

Documentation [Link]

import [Link] as plt

[Link]([57,42,24,6])
Exemple basique
[Link](‘nombres aléatoires')

[Link]()

117
Librairies Python

10 - Pillow
Nom Pillow

Objectif Manipulation d’images

Paquet pip3 install pillow

Documentation [Link]

from PIL import Image

Exemple basique
img = [Link]('RGB', (100, 50), color = 'rouge')
[Link]('carre_rouge.png')

Conclusion
Ces modules vous donnent une petite idée de tout ce que vous pouvez faire avec
Python. Il existe des librairies pour tout, donc n’hésitez pas à jeter un œil sur Google
pour trouver les meilleures solutions dans chaque cas.

Une fois que vous avez trouvé la bonne librairie et sa page de documentation, vous
devriez être capable de réaliser n’importe quel projet en utilisant vos nouvelles
compétences avec Python !

118
Conclusion

CONCLUSION
Alors, comment vous sentez-vous ? Pensez-vous avoir amélioré votre connaissance
de Python ? J'ai promis de vous expliquer seulement l'essentiel, dans un processus
étape par étape pour créer, comprendre et améliorer n'importe quel script Python sur
Raspberry Pi.

Vous aurez peut-être encore besoin d'un peu de pratique pour vous sentir plus à l'aise
avec vos nouvelles compétences en programmation, mais je suis sûr que vous avez
beaucoup appris en lisant et en travaillant sur ce livre.

J'aimerais aussi avoir votre avis sur ce livre. J'aimerais savoir à quoi vous vous attendiez
au début, comment s'est déroulé votre apprentissage et comment vous vous sentez
après avoir tout terminé. Si vous avez quelques secondes à m'accorder, vous pouvez
suivre ce lien pour partager votre avis : [Link]

J'ai également de nombreux tutoriels sur Python sur [Link] que vous pouvez
consulter pour obtenir des détails ou des idées de projets.

Je vous invite à me contacter pour me faire part de vos suggestions ou des erreurs
que vous avez trouvées dans ce livre. Mon rôle est de vous aider en vous donnant
la réponse si je le peux, ou en vous indiquant des personnes qui peuvent vous aider
mieux que moi.

À bientôt sur RaspberryTips,

Patrick

119
Solutions

SOLUTIONS
Note : Vous trouverez les codes sources correspondants dans le dossier "solutions".

Chapitre 3
Question 1
print("Bonjour Patrick")

Question 2
prenom="Paul"
print("Bonjour "+prenom)

Question 3
prenom="Paul"
heure=14
if heure<12:
print("Bonjour "+prenom)
elif heure<18:
print("Bonne après-midi "+prenom)
else:
print("Bonne soirée "+prenom)

120
Solutions

Chapitre 4
from time import sleep

def affiche_ingredient(ingredient):
print("- "+ingredient)

recette=['30g de framboises','20g de sucre','100g de farine','1 oeuf']


for element in recette:
affiche_ingredient(element)
sleep(1)

Chapitre 5
import time
import picamera

def take_picture(camera, prefix):


ts=str(round([Link]())) #il est possible d'imbriquer les appels aux fonctions
camera.start_preview()
[Link]('/home/pi/'+prefix+'-'+ts+'.jpg')
camera.stop_preview()

camera = [Link]()
for image in range(30):
take_picture(camera, "timestamp")
[Link](2)

121
Solutions

Chapitre 6

from [Link] import Minecraft

mc = [Link]()
x,y,z = [Link]()

[Link](x-2,y-1,z-2,x+2,y-1,z+2,5) #sol
[Link](x-2,y,z-2,x-2,y+2,z+2,5) #mur1
[Link](x-2,y,z-2,x+2,y+2,z-2,5) #mur2
[Link](x+2,y,z-2,x+2,y+2,z+2,5) #mur3
[Link](x-2,y,z+2,x+2,y+2,z+2,5) #mur4

[Link](x-2,y+3,z-2,x+2,y+3,z+2,17) #toit

[Link](x-2,y+1,z,20) #fenetre 1
[Link](x,y+1,z-2,20) #fenetre 2
[Link](x+2,y+1,z,20) #fenetre 3

[Link](x,y+1,z+2,0) #porte 1
[Link](x,y,z+2,0) #porte 2

122
Solutions

Chapitre 7
Étape 1 - API, lever et coucher de soleil
import [Link], json, time
from datetime import datetime

#Coordonnees GPS
lat=36.7201600
lon=-4.4203400

#Adresse de l'API
url="[Link]
response = [Link](url)
data = [Link]([Link]())
coucher_soleil =data['results']['sunset']
lever_soleil =data['results']['sunrise']

#Debug
print("Lever du soleil "+lever_soleil)
print("Coucher du soleil : "+coucher_soleil)

#Heure actuelle au meme format


FMT = '%I:%M:%S %p'
heure_actuelle = [Link](FMT)
print("Heure actuelle : "+heure_actuelle)

#Differences avec lever et coucher du soleil


diff_coucher = [Link](coucher_soleil, FMT)-[Link](heure_actuelle,
FMT)
diff_coucher = diff_coucher.seconds

diff_lever = [Link](lever_soleil, FMT)-[Link](heure_actuelle, FMT)


diff_lever = diff_lever.seconds

#Debug
print(diff_coucher)
print(diff_lever)

123
Solutions

Étape 2 - On ajoute la gestion des lumières


import [Link], json, time
from datetime import datetime
from phue import Bridge

#Connexion au pont
b = Bridge('[Link]')

#Quelle ampoule gérer?


living_room = 1

#Coordonnees GPS
lat=36.7201600
lon=-4.4203400

#Adresse de l'API
url="[Link]
response = [Link](url)
data = [Link]([Link]())
coucher_soleil =data['results']['sunset']
lever_soleil =data['results']['sunrise']

#Heure actuelle au meme format


FMT = '%I:%M:%S %p'
heure_actuelle = [Link](FMT)
print("Heure actuelle : "+heure_actuelle)

#Differences avec lever et coucher du soleil


diff_coucher = [Link](coucher_soleil, FMT)-[Link](heure_actuelle, FMT)
diff_coucher = diff_coucher.seconds

diff_lever = [Link](lever_soleil, FMT)-[Link](heure_actuelle, FMT)


diff_lever = diff_lever.seconds

#La lumière est allumée automatiquement le matin (4h30)


#Rien à faire si le lever du soleil est plus proche que le coucher
if diff_coucher < diff_lever:
#On allume 2h avant le coucher du soleil
if diff_coucher < 3600*2:
print("Bientot le coucher du soleil, on allume")
b.set_light(salon, 'on', True)
#On éteint 2h après le lever du soleil
elif diff_lever < 3600*22:
print("Le soleil est levé, on peut éteindre")
b.set_light(salon, 'on', False)
else:
print("Rien à faire")

124
Solutions

Chapitre 8
from pushbullet import PushBullet
import [Link], json, time
from datetime import datetime

lat=36.7201600
lon=-4.4203400
token="VOTRE CLE"

#On récupère les infos


url="[Link]
response = [Link](url)
data = [Link]([Link]())
coucher_soleil =data['results']['sunset']
lever_soleil =data['results']['sunrise']

message=f"""Bonjour,
Le soleil se lèvera à {lever_soleil}
et se couchera à {coucher_soleil}.
Bonne journée !"""

#On envoie la notification push


pb = PushBullet(cle_api)
pb.push_note("Le soleil arrive bientot",message)

To send the message each day, add a new line in your crontab. For example:

0 0 * * * /usr/bin/python3 /home/pi/[Link]

125
Solutions

Chapitre 9
from sense_hat import SenseHat
from time import sleep

def bouge_pixel(action, direction):


global x, y
if action=="pressed":
print("Direction: "+direction)
print("X: "+str(x))
print("Y: "+str(y))

if direction=="up" and y>0:


y=y-1
elif direction=="down" and y<8:
y=y+1
elif direction=="left" and x>0:
x=x-1
elif direction=="right" and x<8:
x=x+1
else:
print("Erreur : déplacement impossible dans cette direction")

[Link]()
sense.set_pixel(x, y, 255, 0, 0)

sense = SenseHat()
x=4
y=4

[Link]()
sense.set_pixel(x, y, 255, 0, 0)

while True:
event = [Link].wait_for_event()
bouge_pixel([Link], [Link])
sleep(0.5)

126

Vous aimerez peut-être aussi