0% ont trouvé ce document utile (0 vote)
149 vues13 pages

98 Python Et Raspberry PI

Electronique et Programmation

Transféré par

Traore Mohamed
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)
149 vues13 pages

98 Python Et Raspberry PI

Electronique et Programmation

Transféré par

Traore Mohamed
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
Vous êtes sur la page 1/ 13

Python et Raspberry Pi

Apprenez à développer sur votre nano-ordinateur


Ce livre est une introduction au langage Python en utilisant le nano- Patrice CLEMENT

Python
ordinateur Raspberry Pi. Il s’adresse à toute personne désireuse d’ap- Expert en systèmes d’information et
prendre ce langage de façon ludique et ne nécessite pas de connais-

Python et Raspberry Pi
passionné de logiciels libres, Patrice
sances particulières en développement ou en électronique. Toutefois,
CLEMENT est développeur et membre
des connaissances d’un environnement Linux/Unix sont souhaitables
actif de la communauté Gentoo depuis
pour tirer le meilleur profit du livre.
8 ans. Après plusieurs expériences
Le chapitre 1 explique les quelques bases à connaître afin de gérer cor- dans diverses entreprises à l’internatio-
rectement le Raspberry Pi et y installer des modules Python. Les cha- nal et en France, il décide de trans-
pitres 2 et 3 constituent une introduction à Python, des fonctions de

et Raspberry Pi
mettre son expertise du langage Python
base jusqu’à quelques subtilités du langage. Le chapitre 4 couvre l’écri- et sa curiosité pour la plateforme em-
ture de tests unitaires tandis que le chapitre 5 explique comment utiliser barquée Raspberry Pi à travers la ré-
le langage pour écrire des scripts d’administration système. daction de ce livre.
Les chapitres qui suivent sont beaucoup plus orientés « pratique ». Le
chapitre 6 constitue une introduction à la programmation console avec
la bibliothèque curses tandis que le chapitre 7 se concentre sur la pro-
grammation d’interfaces graphiques en se basant sur la bibliothèque Les chapitres du livre
tkinter. Le chapitre 8 présente les aspects multimédia et audio du
Raspberry Pi ; notamment comment dessiner avec Pillow ou comment
manipuler l’audio avec pyalsaaudio. Puis, le chapitre 9 détaille les mo-
dules nécessaires au développement web sur le Raspberry Pi tandis que
Avant-propos • L’environnement de
programmation • Introduction à Py-
thon • Concepts avancés du langage
Apprenez à développer
sur votre nano-ordinateur
le chapitre 10 explique au lecteur la persistance de données. Python • Documenter et tester ses
Enfin, le chapitre 11 guide le lecteur dans la découverte et le fonctionne- scripts en Python • Administration du
ment des broches GPIO du Raspberry Pi. À l’aide de schémas et de Raspberry Pi en Python • Le Raspberry
photos, l’auteur guide le lecteur dans le raccordement d’un écran LCD Pi en console avec curses • Program-
16x2 (non fourni avec le livre) avec le Raspberry Pi. mation d’interfaces graphiques avec
Pour la rédaction du livre, l’auteur a utilisé le Raspberry Pi 1 modèle B tkinter • Multimédia et audio sur le
révision 2. Toutefois, l’utilisation d’une autre version n’a aucune inci- Raspberry Pi • À l’assaut du Web avec
dence sur les informations et exemples fournis tout au long des cha- le Raspberry Pi • Persistance de don-
pitres à l’exception du chapitre 11, les broches du GPIO évoluant à nées sur le Raspberry Pi • Raspberry Pi
chaque nouvelle itération du Raspberry Pi. et GPIO
Téléchargement
www.editions-eni.fr
.fr
Des éléments complémentaires sont en téléchargement sur le site
www.editions-eni.fr.

Pour plus
ISBN : 978-2-409-00332-5

sur www.editions-eni.fr : d’informations :


bL  es exemples de code des chapitres du livre.
29,90 €

Patrice CLEMENT
Table des matières 1

Les exemples à télécharger sont disponibles à l'adresse suivante :


http://www.editions-eni.fr
Saisissez la référence ENI de l'ouvrage RIRASPYT dans la zone de recherche
et validez. Cliquez sur le titre du livre puis sur le bouton de téléchargement.

Avant-propos

Chapitre 1
Environnement de programmation
1. Caractéristiques du Raspberry Pi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2. Démarrage de Raspbian . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.1 Historique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.2 Premiers pas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3. Comprendre l’écosystème Python : quelle version utiliser ? . . . . . . . 16
4. Installer des bibliothèques Python . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
4.1 Avec aptitude . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
4.2 Avec pip. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
4.3 pip ou aptitude ?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
5. IDLE : l'éditeur de code en Python pour Python . . . . . . . . . . . . . . . . 23
6. Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

Chapitre 2
Introduction à Python
1. Hello World. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2. Les types de base : int, float, str et bool . . . . . . . . . . . . . . . . . . . . . . . 30
2.1 Les entiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.2 Les flottants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
2.3 Les chaînes de caractères . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
2.4 Les booléens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
2 Python et Raspberry Pi
Apprenez à développer sur votre nano-ordinateur

3. Les structures de données : list, dict, tuple . . . . . . . . . . . . . . . . . . . . . 37


3.1 Les listes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
3.2 Les tuples. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
3.3 Les dictionnaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
3.4 Les sets. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
4. Les instructions, les conditions et les boucles. . . . . . . . . . . . . . . . . . . 41
4.1 La condition if. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
4.2 La condition else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
4.3 La boucle for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
4.4 L'instruction break . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
4.5 L'instruction continue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
4.6 La boucle while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
5. Les opérateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
5.1 Opérateurs arithmétiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
5.2 Opérateurs logiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
5.3 Opérateur d'appartenance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
5.4 Opérateur d'affectation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
6. Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

Chapitre 3
Concepts avancés du langage Python
1. Les classes : définition avec le mot-clé class . . . . . . . . . . . . . . . . . . . . 53
1.1 Premiers pas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
1.2 Exposer les attributs d'une classe. . . . . . . . . . . . . . . . . . . . . . . . . 55
1.3 Découpler une classe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
1.4 Réutiliser du code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
2. Les fonctions : les mots-clés def et lambda . . . . . . . . . . . . . . . . . . . . . 60
2.1 Définir une fonction. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
2.2 La fonction anonyme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
3. La syntaxe en compréhension . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
4. Itérateur et générateur : les mots-clés iter et yield . . . . . . . . . . . . . . . 69
Table des matières 3

5. La gestion des exceptions avec les mots-clés try,


except, raise et finally. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
6. Découpage et manipulation d'une structure de données . . . . . . . . . . 79
7. L'import des modules avec le mot-clé import . . . . . . . . . . . . . . . . . . . 81
8. La gestion de contexte avec les mots-clés with et as . . . . . . . . . . . . . 84
9. Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87

Chapitre 4
Documenter et tester ses scripts en Python
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
2. Consulter de la documentation avec pydoc3 . . . . . . . . . . . . . . . . . . . 90
3. Documenter et tester son code en une seule fois
avec le module doctest . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
4. Écriture de tests unitaires avec le module unittest. . . . . . . . . . . . . . 104
5. Benchmarker son code avec le module timeit. . . . . . . . . . . . . . . . . . 109
6. Déboguer ses programmes avec le module pdb . . . . . . . . . . . . . . . . 114
6.1 Déboguer pas à pas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
6.2 Déboguer à un endroit précis du programme . . . . . . . . . . . . . . 119
6.3 Procéder à l'autopsie de son programme . . . . . . . . . . . . . . . . . . 120
7. Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121

Chapitre 5
Administration du Raspberry Pi en Python
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
2. Gérer le système avec les modules pwd et os . . . . . . . . . . . . . . . . . . 124
2.1 Manipuler et interroger le système de fichiers . . . . . . . . . . . . . 128
2.2 Explorer le système de fichiers du Raspberry Pi . . . . . . . . . . . . 129
3. Interagir avec l'interpréteur Python via le module sys . . . . . . . . . . . 134
4 Python et Raspberry Pi
Apprenez à développer sur votre nano-ordinateur

4. Lancer des commandes shell avec le module subprocess . . . . . . . . . 136


5. Filtrer une chaîne de caractères avec le module re . . . . . . . . . . . . . . 139
6. Écriture de scripts avec le module argparse. . . . . . . . . . . . . . . . . . . . 142
7. Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146

Chapitre 6
Le Raspberry Pi en console avec curses
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
2. Les fondamentaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
3. Projet #1 : un menu interactif. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
4. Projet #2 : une calculatrice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
5. Projet #3 : le jeu du serpent. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
6. Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179

Chapitre 7
Programmation d’interfaces graphiques avec tkinter
1. Les fondamentaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
2. Projet #1 : Hello world avec tkinter . . . . . . . . . . . . . . . . . . . . . . . . . 184
3. Projet #2 : une visionneuse d'images . . . . . . . . . . . . . . . . . . . . . . . . 192
4. Projet #3 : un éditeur de texte. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
5. Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
Table des matières 5

Chapitre 8
Multimédia et audio sur le Raspberry Pi
1. Dessiner avec Pillow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
1.1 Créer et manipuler des images. . . . . . . . . . . . . . . . . . . . . . . . . . 215
1.2 Dessiner des figures géométriques. . . . . . . . . . . . . . . . . . . . . . . 221
2. Contrôler les entrées et sorties audio avec pyalsaaudio . . . . . . . . . . 223
3. Projet #1 : un enregistreur/lecteur audio . . . . . . . . . . . . . . . . . . . . . 231
4. Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238

Chapitre 9
À l'assaut du Web avec le Raspberry Pi
1. Webscraping facile avec les modules urllib et HTMLParser . . . . . . 239
2. Développer un serveur HTTP avec le module http.server . . . . . . . . 246
3. Exécuter des scripts avec le module cgi . . . . . . . . . . . . . . . . . . . . . . . 253
4. Envoyer des e-mails avec le module smtplib. . . . . . . . . . . . . . . . . . . 263
5. Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266

Chapitre 10
Persistance de données sur le Raspberry Pi
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
2. Sérialisation et désérialisation avec les modules pickle et shelve . . 267
3. Traiter des fichiers CSV avec le module csv . . . . . . . . . . . . . . . . . . . 272
3.1 Création et lecture d’un fichier CSV . . . . . . . . . . . . . . . . . . . . . 272
3.2 Créer son propre dialecte CSV . . . . . . . . . . . . . . . . . . . . . . . . . . 274
4. Manipuler des données XML
avec le module xml.etree.ElementTree . . . . . . . . . . . . . . . . . . . . . . . 276
4.1 Créer et sérialiser un fichier XML . . . . . . . . . . . . . . . . . . . . . . . 276
4.2 Interroger un fichier XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
4.3 Ajouter et supprimer des nœuds . . . . . . . . . . . . . . . . . . . . . . . . 279
6 Python et Raspberry Pi
Apprenez à développer sur votre nano-ordinateur

5. Gestion d’une base de données SQL légère avec le module sqlite3 . 282
6. Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288

Chapitre 11
Raspberry Pi et GPIO
1. Les GPIO, comment ça marche ?. . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
2. Connecter un écran LCD 16x2 au Raspberry Pi . . . . . . . . . . . . . . . . 290
3. Projet #1 : communiquer avec l'écran LCD . . . . . . . . . . . . . . . . . . . 297
4. Projet #2 : créer un tube FIFO dédié à l'écran LCD . . . . . . . . . . . . . 301
5. Projet #3 : piloter l'écran LCD
depuis une interface graphique tkinter . . . . . . . . . . . . . . . . . . . . . . . 306
6. Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310

Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311
89

Chapitre 4
Documenter et tester
ses scripts en Python

1. Introduction
Documenter et tester ses scripts en Python

L’écriture de tests unitaires est désormais incontournable dans l’élaboration


d’un programme informatique. Dans ce domaine, Python est livré avec des
modules de choix qui répondent aux attentes des développeurs les plus ambi-
tieux. Python offre aussi la possibilité d'inspecter son code interactivement
avec le REPL, et de vérifier instantanément le contenu d'un objet, son type et
les méthodes qu'il offre. Pour assister le développeur dans les tâches liées à la
documentation, à l’analyse de performance et à la résolution de problèmes en
rapport avec le code, la gamme des modules proposés par le langage est assez
vaste. Par exemple, lorsque la taille d'un projet devient critique, l'usage de tests
unitaires permet d'implémenter plus rapidement de nouvelles fonctionnalités,
et de détecter les régressions de code dès le début de l'implémentation. Ce qui
fait ainsi gagner du temps et de la productivité. La recherche de performance
va aider le développeur à identifier les fonctions gourmandes en exécution de
celles qui le sont moins, afin de procéder à de la refactorisation et/ou de la
réécriture de code. Dans le cas de l'écriture de scripts destinés au Raspberry Pi
où les ressources sont restreintes, auditer et benchmarker son code peut amé-
liorer le temps d'exécution d'un programme. Encore une fois, même si ce livre
n'a pas pour but d'enseigner la conduite de projet, sachez qu'il est important
de connaître les outils que propose Python dans ce domaine afin de mieux
apprécier l'écosystème dans son ensemble.
90 Python et Raspberry Pi
Apprenez à développer sur votre nano-ordinateur

2. Consulter de la documentation avec pydoc3


Tout d'abord, l'outil le plus courant qui permet de chercher dans la documen-
tation des modules porte le nom de pydoc3. L'utilisation de pydoc3 inter-
vient lorsque l'on souhaite afficher la documentation d'un module, d'une
classe ou d'un mot-clé. Par exemple, la documentation de tous les mots-clés
passés en revue dans les chapitres précédents (with, def, lambda, etc.) peut
être consultée avec pydoc3. Point important à noter avant d'aller plus loin :
la majorité de la documentation installée avec le système par défaut de Python
est écrite dans la langue anglaise.
Cet outil s'utilise exclusivement en ligne de commande. Ouvrez une console
en cliquant sur Menu - Accessoires - LXTerminal, comme expliqué au cha-
pitre Environnement de programmation. Tapez ensuite la commande :
pi@raspberrypi:~ $ pydoc3

Ce qui devrait afficher le résultat suivant :

© Editions ENI - All rights reserved


Documenter et tester ses scripts en Python 91
Chapitre 4

Cela n'est rien d'autre que l'aide de pydoc3. Attention cependant car chaque
version de Python installée sur le système est livrée avec sa propre version de
pydoc. Comme expliqué au chapitre Environnement de programmation, dif-
férentes versions de l'interpréteur Python doivent cohabiter sur le Raspberry
Pi. Il en est de même pour pydoc qui est livré dans ses versions 2.7 et 3.4. Par
défaut, le binaire pydoc pointe vers /usr/bin/pydoc2.7. Pensez donc à
toujours utiliser pydoc3 pour lire la documentation en rapport avec la ver-
sion 3 de Python.
pydoc3 permet donc de chercher et d'afficher la documentation de nombreux
topics ou sujets. Le sujet recherché correspond au terme passé en paramètre de
la commande. Dans cet exemple, le terme with est recherché et affiche la do-
cumentation qui lui est associée :

Par défaut, la lecture de la documentation repose sur l'utilisation d'un


programme nommé less, qui est le pager par défaut de la plupart des distri-
butions Linux actuelles. La navigation dans less peut être difficile pour les
néophytes qui débutent avec la ligne de commande.
92 Python et Raspberry Pi
Apprenez à développer sur votre nano-ordinateur

Voici un tableau rassemblant les commandes de base :

Défiler vers le haut d'un caractère [Flèche en haut]


Défiler vers le bas d'un caractère [Flèche en bas]
Défiler vers le haut d'une page [Page Up]
Défiler vers le bas d'une page [Page Down]
Rechercher un terme Barre oblique (slash) / suivi du terme
Prochaine occurrence du terme Lettre en minuscule n
Précédente occurrence du terme Lettre en majuscule N
Ferme (quitter) la documentation Lettre en minuscule q ou en
majuscule Q

Naviguer dans less est relativement facile lorsque ces quelques raccourcis
sont assimilés. Une fois less fermé, pydoc3 suggère des sujets annexes qui
seraient susceptibles d'intéresser le développeur :

© Editions ENI - All rights reserved


Documenter et tester ses scripts en Python 93
Chapitre 4

En plus de chercher de la documentation pour pratiquement n'importe quel


sujet touchant au langage, pydoc3 recherche aussi la documentation associée
aux modules de la bibliothèque standard ainsi que les modules installés avec
pip3, si l'auteur du module en question a évidemment pris le soin de l'écrire.
Pour y parvenir, il suffit de passer en paramètre de pydoc3 le nom du module
dont vous souhaitez consulter la documentation :
pi@raspberrypi:~ $ pydoc3 re

Ce qui a pour effet d'afficher la documentation associée au module re :

pydoc3 est aussi disponible depuis le REPL d'IDLE grâce à la fonction


help(). En effet, cette fonction fait indirectement appel à pydoc3 pour la
recherche de documentation. help() s'utilise de deux manières : la première
consiste à appeler la fonction une fois dans le REPL en ne donnant aucun pa-
ramètre. L'utilisateur bascule alors dans une seconde console interactive spé-
cialisée dans la recherche de documentation.
94 Python et Raspberry Pi
Apprenez à développer sur votre nano-ordinateur

Tapez un terme et laissez la console effectuer la recherche afin de présenter


l'aide associée au terme :

La deuxième consiste à passer en paramètre un objet. help() va alors analy-


ser l'objet en question et afficher la documentation associée. Dans ce cas de
figure, vous ne pouvez pas passer autre chose que des objets déjà instanciés ou
importés dans le contexte courant. Vous pouvez aussi afficher la documenta-
tion d'une fonction en particulier provenant d'un module :

© Editions ENI - All rights reserved


>>> help(re)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 're' is not defined
>>> import re
>>> help(re)
(affiche la documentation du module re)
>>> s = str
>>> help(s)

Vous aimerez peut-être aussi