Académique Documents
Professionnel Documents
Culture Documents
NB : Les questions sont indépendantes et peuvent être traitées dans n’importe quel ordre.
1. Donnez la séquence de commandes shell pour configurer, avec le compte pi, les GPIOs de la
raspberry Pi , comme indiqué dans le tableau suivant :
2. La GPIO 2 (wpi) est utilisée comme entrée reliée à un bouton poussoir ; on souhaite que chaque fois
qu’on appuie sur le bouton l’entrée passe à 0 (logique) et quand on le relâche elle passe à 1
(logique) ; donnez le schéma de câblage du bouton poussoir et les commandes de configuration de la
GPIO 2.
3.3V
R
GPIO2(wpi) GPIO2(wpi)
BP
BP
solution 1 solution 2
Solution 1 : on utilise une résistance de pull up externe, on peut alors désactiver (tristate, flottante)
la résistance de pull_up_down interne ou la mettre aussi au pullup.
Configuration :
gpio mode 2 in ; gpio mode 2 tri (ou gpio mode 2 up)
Solution 2 : on n’utilise pas de résistance de pull_up_down externe, on utilise celle qui est interna à
la raspberry pi.
Configuration :
gpio mode 2 in ; gpio mode 2 up.
Comme ça si le BP n’est pas appuié l’état de l’entrée sera 1 (tirée vers 3.3V) ; si on appuie sur BP
l’état sera 0 (tirée par le BP vers Gnd)
3. Rappel : La commande shell date permet de récupérer la date/heure actuelle, le symbole >> permet
de rediriger les sorties d’une commande pour les ajouter à la fin d’un fichier, comme le montre les
exemples suivantes :
a. Ecrire un programme C qui permet de configurer la GPIO 11 (BCM) comme entrée, puis
chaque fois que GPIO 11 passe de 1 à 0, la date de ce passage est ajoutée au fichier
journal.txt.
#include <wiringPi.h>
#include <stdio.h>
#include <stdlib.h> // pour utilizer la function system
10 19 * 5 * gpio write 2 1
5. On désire concevoir un radar automatique de contrôle de vitesse basé sur une raspberry Pi munie
d’une caméra (picamera), d’un capteur électromagnétique enterré dans la voie ayant une sortie
logique qui reste à 1 tant qu’une voiture se trouve au-dessus du capteur (détection du métal du
châssis du véhicule), et d’un compteur temps réel externe (voir figure 2).
Oscillateur à
Quartz Freq F0 Compteur SPI
Ck
RST GPIO2 (BCM)
AND
Raspberry Pi
GPIO3(BCM)
SL=0
t<t1
t=t1
SL=1
t=t2
SL=1
Rspi+picam
sortie GPIO2
1
0
temps
entrée Ck du compteur
1
0 temps
t1 t2
compteur à 0 comptage des comptage
impulsions (F0) s’arrête compteur à 0
b. En supposant l’existence d’un script python nommé transfert.py dans /home/pi, qui permet
de transférer un fichier donné comme argument en ligne de commande vers un serveur ftp ,
syntaxe :
./transfert.py nom_fichier
Donner un script shell qui permet de transférer toutes les photos capturées et stockées dans
/home/pi vers un le serveur ftp en vous inspirant des commandes shell suivantes :
Pour tout nom_fichier se trouvant dans Liste, copier ce fichier var ./rep_jpeg/ sous le nom
copie_nom_fichier
# !/bin/usr/bash
Liste=$(ls *.jpeg)
for fich in $Liste # pour chaque fichier dans liste
do
./transfert.py $fich #transférer le fichier vers serveur ftp, puis refaire pour le suivant
done
Complément d’informations (non demandé dans la question) : pour tester ce script on commence
part créer d’abord un script transfert.py, qui ne fait pas le transfert vers un serveur ftp mais juste
copie un fichier.jpeg donné en argument dans le même répertoire sous le nom cpfichier.jpeg (ceci
simule un transfert), ce script est donné ci-dessous :
Essai :
Fichier Makefile placé dans le répertoire /home/user/prj/ , car d’après les question l’appel à make
se fait à partir du répertoire /home/user/prj (indiqué par le prompt=invite de commande), donc
make cherchera Makefile dans ce répertoire (/home/user/prj/).
La solution présentée ici n’est pas la seule possible, on n’utilisera pas de commande cd pour
changer de répertoire s’il le faut, on utilisera plutôt les chemins relatifs par rapport au répertoire
où se trouve Makefile (en exploitant les variables)
les fichiers .o et l’exécutable myprogram seront générés dans le répertoire /home/user/prj, alors
que les .c sont dans /home/user/prj/sources et les .h sont dans /home/user/prj/sources/include
clean :
rm -f myprogram ${Obj}
#target clean_build revient à viser target clean puis target par défaut
#d’abord un clean puis une reconstruction
clean_build :
make clean
make