TP_Python_raspberry_Pi

publicité
ISN. TP : Perfectionnement Python - Langages de programmation
LANGAGES
Objectifs
Programmer avec le Raspberry Pi ;
Configuration réseau.
Organisation
3 En binôme : un « élève ressource » sur un ordinateur de la salle, associé à un « élève utilisateur » du Raspberry Pi ;
À tour de rôle.(En attendant la « mise à jour » de la salle ISN).
Conclusion du TP Découverte du RPi : La distribution Raspbian 1 est sympathique et bien construite. Le Raspberry Pi
est plutôt un système embarqué (assurant discrètement une tâche programmée sans pilotage direct par l’utilisateur) que celle d’un
poste de travail avec environnement graphique complet (réactivité un peu faible, lenteur de certaines applications 2 , etc. La quantité
de mémoire Ram disponible est limitée et faible : 512 Mo à répartir entre le processeur et le contrôleur graphique).
L’interface console directe via le réseau (SSH) est plus adaptée pour ce type de matériel. Dans cette optique, l’intérêt de Raspbian
est de mettre directement à disposition de l’utilisateur de nombreux outils en ligne de commande précompilés, pour tous les projets
susceptibles d’embarquer un Raspberry Pi (serveurs réseau, players multimédia, interfaçage et robotique, hacks avec les GPIO, etc.)
1
L’accès à distance par SSH (Secure SHell)
SSH est un protocole qui permet de faire des connexions sécurisées (i.e. chiffrées) entre un serveur et un client SSH.
Voici quelques-uns des aspects sensibles et fragiles des connexions interactives que l’on souhaiterait voir résolus :
– en premier lieu, éviter la compromission des mots de passe, qui circulent « en clair » sur le réseau ;
– disposer d’une authentification renforcée des machines, pas seulement basée sur le nom ou l’adresse IP (sensibles à la mascarade) ;
– pouvoir exécuter en toute sécurité des commandes à distance ;
– pouvoir transférer des fichiers en toute sécurité et sécuriser les sessions X11, très vulnérables ;
Si vous utilisez le système d’exploitation Raspbian, le protocole d’accès SSH sera activé par défaut 3 .
a. Une fois que le RPi est relié au réseau local, il faut récupérer son adresse IP afin de pouvoir communiquer avec ce dernier.
Depuis le RPi, ouvrez un terminal et saisissez la commande ifconfig.
(Relevez bien l’adresse située en face de inet addr, l’adresse IP est par exemple 192.168.0.13).
b. Télécharger un client SSH pour se connecter au RPi : sous Windows, on utilise généralement Putty.
(Cet utilitaire n’a pas besoin d’installation et vous avez juste à cliquer sur Putty.exe pour le démarrer.)
c. Pour se connecter grâce au client SSH au RPi, il suffit de saisir l’adresse IP du RPi dans la zone « Host name » (avec Port 22),
puis de cliquer sur « Open » dans le logiciel Putty.
(Si tout se passe bien, il va être nécessaire de saisir un login et un mot de passe afin de s’authentifier auprès du Raspberry Pi 4 .
Par défaut, le login est « pi » et le mot de passe est « raspberry »).
1.
2.
3.
4.
Voir le TP Découverte du Raspberry Pi
On peut utiliser réellement LibreOffice sur Raspberry Pi : ça reste tout à fait réactif et fonctionnel pour un usage réel.
Il est possible d’activer ou de désactiver le protocole d’accès SSH, à l’aide de l’outil de configuration de Raspbian (raspi-config).
Il est alors possible de communiquer avec le RPi en mode console ! Consulter les principales commandes pour utiliser un shell sous unix.
http://lycee.lagrave.free.fr/isn
1
n
ISN. TP : Perfectionnement Python - Langages de programmation
2
Programmation : le contrôle du flux d’instructions.
L’ensemble des variables définies à un instant donné de l’exécution d’un programme est appelé un état de l’exécution du programme.
On appelle instruction un ordre de modification de l’état courant de l’exécution d’un programme, avec :
– d’une part les instructions simples qui manipulent directement l’état courant (la DÉCLARATION et l’AFFECTATION) ;
– d’autre part les instructions composées qui permettent d’assembler d’autres instructions et de modifier le flot d’exécution en
fonction de l’état courant (la SÉQUENCE qui permet d’exécuter deux instructions l’une à la suite de l’autre ; le TEST ou instruction conditionnelle qui
permet de n’exécuter une instruction que dans certains états ; la BOUCLE qui permet d’exécuter plusieurs fois la même instruction dans un programme.)
Il est remarquable que ces cinq instructions, à elles seules, suffisent à exprimer tous les algorithmes que l’on peut imaginer 5 .
Bien sûr, une telle affirmation demande à être précisée, c’est là, l’objet de la thèse de Church-Turing, qui affirme que tout procédé
de calcul pouvant être décrit de façon systématique peut l’être avec ces cinq instructions.
a. Pour créer un dossier dénommé Python, utilisez la commande mkdir Python.
Entrez ensuite dans ce dossier avec la commande cd Python.
b. Créer un fichier vide à l’aide de la commande « touch 6 » suivie du nom de fichier, par exemple : touch hello_world.py.
c. Pour pouvoir exécuter du code dans hello_world.py il faut rendre ce fichier exécutable avec la commande :
chmod +x hello_world.py 7 .
d. Pour écrire un programme (Listing 1) directement en console, on utilise par exemple 8 : grep ’.*’ >>hello_world.py
La sortie standard est connectée au fichier,s’il n’existe pas il est créé, s’il existe tous ce qu’on écrit sera ajouter à la fin du fichier 9 .
Lancer la commande, puis saisir les deux lignes de code et terminer par la combinaison de touches Ctrl+D.
Dès que l’on tape sur la touche Entrée on ne peut pas modifier les lignes précédentes comme dans un éditeur de texte.
(On peut aussi utiliser la commande echo "#!/usr/bin/env python3">>hello_world.py puisque la commande echo permet un affichage à l’écran.)
Listing 1: hello_world.py
# !/ usr / bin / env python3
print ( " Bonjour tout le monde " )
La première ligne commence par un « shebang » le symbole # ! également connu sous le terme anglais hashbang, suivi du chemin de l’interpréteur Python.
Le chargeur de programme utilise cette ligne pour déterminer l’outil avec lequel il doit interpréter les lignes suivantes. Le code lu par l’interpréteur Python
tient en fait en une seule ligne. Nous passons la valeur Bonjour tout le monde à la fonction d’affichage en la plaçant entre parenthèses, immédiatement
après l’appel à la fonction. La fonction print en Python imprime sur la console (fenêtre du terminal) la valeur qui lui est transmise.
e. Pour exécuter le programme hello_world, faites précéder son nom de fichier par ./ c’est-à-dire ./hello_world.py
Par la suite vous travaillerez sur l’ordinateur de la salle avant de transférer vos scripts Pythons sur Rpi
3
Transférer facilement des fichiers sur son Raspberry Pi
Il est nécessaire d’utiliser un logiciel supportant le protocole SFTP : le plus connu étant Filezilla 10 .
a. Sur l’ordinateur désirant copier des fichiers vers le Raspberry Pi :
– Lancer le logiciel Filezilla et faites « Fichier » puis « Gestionnaire de sites ».
– Cliquer sur « Nouveau site » et saisir pour l’hôte l’IP du Raspberry Pi, utiliser une authentification normale avec un login/mot de passe identique à celui de votre accès SSH
– Cliquer sur « Connexion » et faites « Ok » si un message vous avertit que l’hôte est inconnu.
(Vous voilà connecté directement à l’arborescence de fichiers du Raspberry Pi.)
– Pour transférer un fichier, sélectionnez le dans la zone de gauche (qui représente les fichiers présents sur votre ordinateur)
et glissez le dans la zone de droite, représentant votre RPi.
b. Par la suite vous travaillerez sur l’ordinateur de la salle avant de transférer vos scripts Pythons sur Rpi,
mais dans quel répertoire ? Et suivant quelle arborescence ?
c. Transférer les fichiers variables.py et construct.py et n’oubliez pas de rendre ces fichiers exécutables.
Bien sûr il n’est pas inutile de consulter ses scripts avec votre éditeur préféré.
5.
6.
7.
8.
9.
10.
m
Un langage de programmation est un langage informatique complet au sens de Turing.
La commande touch est à la base faite pour modifier la date de dernière modification d’un fichier.
Voir les droits Linux sur ISN_TP_raspberry_Pi
La commande grep : son rôle est de rechercher un mot dans un fichier et d’afficher les lignes dans lesquelles ce mot a été trouvé.
Si on remplace >> par > à chaque fois qu’on lance la commande tous le contenu du fichier hello_world.py sera effacer.
Fillezilla : gratuit et téléchargeable ici : https://filezilla-project.org/
2
ISN. TP : Perfectionnement Python - Langages de programmation
4
Fonctions et portée des variables
Chapitre 5 page 33 du document courspython3.pdf
Les fonctions sont utilisées en programmation pour scinder les processus en petits morceaux. Les fonctions peuvent recevoir des
arguments (variables) qui en Python sont toujours passés par valeur 11 , ce qui signifie qu’une copie de la variable est passée à la
fonction, qui n’existe que dans le cadre de celle-ci.
Toute modification apportée à la variable d’origine à l’intérieur de la fonction est perdue à la sortie de la fonction.
Les fonctions sont définies avec le mot-clé 12 def suivi du nom de la fonction, les variables
transmises en arguments se placent
entre parenthèses, après le nom de la fonction - les variables multiples sont séparées par des virgules Les noms donnés aux variables dans ces parenthèses sont ceux qu’elles auront dans le contexte de la fonction, indépendamment
des noms des variables passées réellement à la fonction :
a. Consulter le fichier fonctions_et_portee.py avec votre éditeur préféré, puis transférer ce script sur votre RPi.
Bien sûr, on modifiera (si nécessaire ?) ses droits, pour le rendre exécutable. Comment vérifier les droits d’un fichier sous Linux ?
b. Soit f (x) = 2x 2 − x + 1. Écrire un programme qui affiche le résultat de f (1), f (2) et f (3).
Vous mettrez ce programme dans le fichier calcul_polynome.py.
c. Écrire une fonction moyenne qui prends en paramètres deux entiers et qui calcule la moyenne de ces deux entiers. Écrire un
programme qui affiche la moyenne de 11 et 14, de 18 et 15, de 20 et 15 en utilisant la fonction moyenne.
Vous mettrez ce programme dans le fichier calcul_moyenne.py.
d. Écrire une fonction est_divisible_par qui prends en paramètres deux entier n et k et qui renvoie vrai si n est divisible par
k, faux sinon. Écrire un programme qui affiche la divisibilité de 5 par 3, de 6 par 2 et de 9 par 3.
Vous mettrez ce programme dans le fichier calcul_arithmetique.py.
e. Écrire une fonction est_pair qui prends en paramètre un entier et qui renvoie vrai si l’entier est pair, faux sinon. Vous
utiliserez la question précédente pour réaliser cette fonction. Écrire un programme qui affiche la parité des entiers 2, 4, 3, et 7.
Vous ajouterez ce programme au fichier calcul_arithmetique.py.
f. Écrire une fonction est_compris_dans qui prends en paramètres trois entiers, a, b et c et qui renvoie vraie si a est compris
entre b et c.
g. (Optionnel, difficile : il faut être inventif !)
Écrire une fonction maxi qui prends en paramètres deux entiers et qui renvoie l’entier le plus grand. Vous devez écrire cette
fonction SANS utiliser les sauts conditionnels (if then else), NI les boucles (while, for).
h. Faire le TP : binaire.pdf pour « en rajouter une couche » sur la représentation des nombres.
i. Faire le TP : python_cours_TP2 sur la programmation fonctionnelle.
5
Style de codage
Il est simple d’écrire du code propre, la clé en est la cohérence. Par exemple, nommé toujours vos variables de la même manière.
Peu importe que vous utilisiez la casse « ChatMot » ou le caractère underscore mais on ne devrait pas être obliger de deviner ce
qu’une variable fait (identificateurs autodocumentés pour les variables).
L’autre bonne pratique consiste à toujours commenté votre code, cela vous aidera, ainsi que tout relecteur du code.
On place également un bref résumé au sommet d’un fichier de code, qui décrit ce que fait l’application (Docstring) et un jeu de
tests (voir le document python_cours_TP1)
a. Lire les « conseils pour une bonne programmation », donnés en page 3 du document ISN_numeration_positionnelle.
Bien sûr il n’est pas inutile de consulter les pages 1 et 2 sur l’optimisation d’un algorithme.
b. Lire le « zen de Python » annexe A, p. 91 du document courspython3.pdf et son annexe B : « Par ou commencer ? »
–
–
–
–
Simplicité du langage Python :
Syntaxe claire et cohérente
Indentation significative
Gestion automatique de la mémoire (garbage collector)
Typage dynamique fort : pas de déclaration
N’ayez pas peur de vous retrouver bloquer de temps en temps :
« Le vrai plaisir de la programmation, c’est de résoudre les problèmes, un à un ».
Bonne programmation !
11. Voir votre manuel de spécialité ISN, chapitre 4 page 72 « Choisir entre un passage par valeur et une variable globale ».
12. Voir le document python_cours_TP1 page 7.
http://lycee.lagrave.free.fr/isn
3
n
Téléchargement