Vous êtes sur la page 1sur 33

Travaux Pratiques – Systèmes d’exploitation embarqués EST Fès

Travaux Pratiques

Systèmes d’exploitation Embarqués

Filière : Systèmes Embarqués

Semestre 3

2022/2023

Prof. Zakaria Moutakki

1
Travaux Pratiques – Systèmes d’exploitation embarqués EST Fès

TP 1 : Initiation à la carte Raspberry Pi

1. Objectifs du TP :

- Description des différents composants de la carte Raspberry Pi V4.

- Introduction aux GPIO.

- Implémentation du Système d’exploitation Pi.

- Configuration du OS.

- Contrôle à distance en se basant sur le protocole SSH.

2. Description des différents composants de la carte Pi :

Figure 1 : Carte Raspberry Pi 4 avec ces composants

2
Travaux Pratiques – Systèmes d’exploitation embarqués EST Fès

Les composants principaux du Raspberry Pi 4 sont repérés sur l’image ci-dessus.


Le processeur est muni d’un boîtier métallique assurant une meilleure dissipation
de la chaleur que celui des modèles précédents, en céramique.

Le circuit Wi-Fi-Bluetooth est sous un capot métallique servant de blindage. Il y


a peu de modifications par rapport aux versions précédentes. Le connecteur PoE
(Power on Ethernet = Alimentation par Ethernet) est présent sur le Raspberry Pi
4, à proximité du connecteur Ethernet. Il est destiné à recevoir une carte dédiée à
assurer l’alimentation du Raspberry Pi par le câble réseau.

2.1. USB 3 et USB 2

Le Raspberry Pi 3 accueille un HUB USB/Ethernet connecté à la sortie USB 2 du


CPU, ce qui crée un goulot d’étranglement puisque toutes ses communications
partagent la même ligne.

Avec le Raspberry Pi 4, la Fondation introduit un HUB USB 3 doté d’un bus PCI
Express. Ceci supprime les limitations rencontrées avec l’USB sur les versions
précédentes.

La commande lspci, installée avec la commande :

sudo apt-get install pciutils

Cette commande permet d’afficher les caractéristiques de la connexion USB :

2.2. Ethernet Gigabit

Le Raspberry Pi 4 bénéficie d’un "vrai" port Ethernet à 1 Gbit/s directement relié


au CPU, sans passer par un HUB USB comme dans les versions précédentes. Le
port Gigabit Ethernet s’appuie sur un circuit Broadcom BCM54213. Ce circuit
gère toutes les fonctions de la couche réseau physique en 1000BASE-T,
100BASE-TX et 10BASE-T EEE (Energy Efficient Ethernet) 802.3az.

3
Travaux Pratiques – Systèmes d’exploitation embarqués EST Fès

2.3. Le Wi-Fi et le Bluetooth du Raspberry Pi 4

Le Raspberry Pi 4 est équipé d’un circuit doté des fonctions Wi-Fi 802.11ac à
2,4 GHz et 5 GHz, mais aussi de la communication simultanée Bluetooth et
Bluetooth Low Energy (BLE). Le circuit est recouvert par un couvercle
métallique qui protège l’ensemble des perturbations électromagnétiques (EMI).

Figure 2 : Wi-Fi et le Bluetooth du Raspberry Pi 4

2.4. Les sorties vidéo

Le Raspberry Pi 4 dispose de trois sorties vidéo :


- Une sortie vidéo composite (analogique)
- Deux sorties HDMI (High Definition Multimedia Interface = interface
multimédia haute définition).

NB : Les sorties analogique et HDMI ne peuvent pas fonctionner simultanément.

- Connecteurs micro HDMI :

Le connecteur HDMI est une interface audio/vidéo entièrement numérique. Il


existe deux connecteurs micro HDMI sur la carte. Ils peuvent fournir une vidéo
de qualité jusqu’au 4K. Le port activé par défaut est le HDMI0. Il est capable de
fournir de la vidéo 4K60p. Si deux écrans sont connectés, le maximum disponible
est deux fois 4K30p.

4
Travaux Pratiques – Systèmes d’exploitation embarqués EST Fès

Figure 3 : Connecteurs Micro HDMI

2.5. Les sortie Audio :

- Audio numérique

La sortie audio numérique se fait sur le port HDMI au format 5.1. L’audio est
combiné à la vidéo.
Si votre écran indique qu’il possède des haut-parleurs, le son est transmis par
défaut sur la sortie HDMI ; sinon, il est émis via la prise analogique. Vous pouvez
également forcer manuellement la sortie dans l’utilitaire raspi-config, dans le
fichier config.txt ou en faisant un clic droit sur l’icône en forme de haut-parleur,
en haut à droite de la barre des tâches.

- Audio analogique

La sortie audio analogique se fait sur un jack stéréo de 3,5 mm à quatre pôles.
Cette sortie fournit un signal d’environ 1 volt crête à crête. Ce signal est trop faible
pour être utilisé avec un casque audio ou un haut-parleur. Il faudra impérativement
utiliser un amplificateur.
Sur le Raspberry Pi 4, l’audio numérique est sélectionné par défaut. Il faudra
modifier la configuration pour utiliser la sortie analogique.

2.6. Le bus CSI

Le bus CSI-2 du Raspberry Pi 4 est identique à celui du Raspberry Pi 3 B+. Il


permet de connecter une caméra compatible grâce à un câble en nappe.

5
Travaux Pratiques – Systèmes d’exploitation embarqués EST Fès

Figure 4 : Bus CSI

2.7. Le bus DSI

Le bus DSI-2 du Raspberry Pi 4 permet de connecter un écran LCD grâce à un


câble en nappe.

Figure 5 : Bus DSI

2.8. Le GPIO du Raspberry Pi 4

Le GPIO (General Purpose Input/Output = entrée/sortie à usage général) est une


interface qui permet de relier le Raspberry Pi 4 au monde réel. C’est
l’emplacement identifié J8 et GPIO.

Figure 6 : GPIO

2.9. L’alimentation

Elle fait appel à une prise USB-C (Figure ci-dessous). Il n’y a pas d’interrupteur
marche/arrêt et c’est l’insertion ou le retrait de la prise micro USB-C qui joue le
rôle d’interrupteur.

6
Travaux Pratiques – Systèmes d’exploitation embarqués EST Fès

Figure 6 : Alimentation sous forme prise USB type C

2.10. Le connecteur de carte micro SD

Il est situé sous la carte du Raspberry Pi 4, le connecteur est prévu pour accueillir
une carte micro SD.
La vitesse d’accès à la carte micro SD est passée de 25 Mb/s (Raspberry Pi 3) à
50 Mb/s sur ce modèle. Le connecteur est de type "push-pull". Il n’y a pas de
verrouillage mécanique lors de l’insertion de la carte, et pour ressortir la carte, il
suffit de tirer dessus.

Figure 6 : Connecteur du micro SD

3. Manipulations :

Les manipulations concernant les points suivants :


- Implémentation du Système d’exploitation Pi.
- Configuration du OS.
- Contrôle à distance en se basant sur le protocole SSH.
Seront réalisées durant la séance TP.

7
Travaux Pratiques – Systèmes d’exploitation embarqués EST Fès

TP 2 : Configuration d’OS et développement


par C++
1. Objectifs :

- Se familiariser avec les lignes de commande du Terminal.


- Affichage du bureau Raspberry Pi OS sur un ordinateur Windows.
- Transfert de fichier entre la carte Raspberry Pi et un ordinateur équipé de
Windows ou une distribution Linux.
- Initiation à la programmation avec C++ en utilisant la bibliothèque
bcm2835.
2. Le terminal

Le terminal (ou « ligne de commande ») sur un ordinateur permet à un utilisateur


un grand contrôle sur son système. Les utilisateurs de Windows ont peut-être déjà
rencontré l'invite de commande ou Powershell, tandis que les utilisateurs de Mac
OS sont peut-être familiers avec Terminal. Tous ces outils permettent à un
utilisateur de manipuler directement son système à l'aide de commandes. Ces
commandes peuvent être enchaînées et/ou combinées dans des scripts complexes
qui peuvent potentiellement effectuer des tâches plus efficacement que des
progiciels traditionnels beaucoup plus volumineux.

2.1. Terminal dans Raspberry Pi Os

Sur le système d'exploitation Raspberry Pi, l'application de terminal par défaut


s'appelle LXTerminal. C'est ce qu'on appelle un « émulateur de terminal », cela
signifie qu'il émule les anciens terminaux vidéo (d'avant le développement des
systèmes de fenêtrage) dans un environnement graphique. L'application peut être
trouvée sur le bureau Raspberry Pi, et une fois démarrée ressemblera à la figure
1.
8
Travaux Pratiques – Systèmes d’exploitation embarqués EST Fès

Figure 1 : Terminal du Raspberry Pi Os

Dans la fenêtre du terminal, vous devriez pouvoir voir l'invite suivante :


pi@raspberrypi ~ $

Cela montre votre nom d'utilisateur et le nom d'hôte du Pi. Ici, le nom d'utilisateur
est pi et le nom d'hôte est raspberrypi.

2.2. Les commandes indispensables

9
Travaux Pratiques – Systèmes d’exploitation embarqués EST Fès

3. Connexion bureau à distance

3.1. Configuration sur Raspberry Pi :

Il suffit ensuite d'installer les outils xrdp et tightvncserver. Pour cela, entrez
simplement ces deux commandes :
sudo apt-get install tightvncserver
sudo apt-get install xrdp

Lorsque l'on vous demande si vous êtes sûr de vouloir installer des paquets
supplémentaires, entrez 'y' (ou 'o') puis validez avec Enter.

3.2. Configuration sur Windows :

Il faut d’abord lancer l'outil "Connexion Bureau à distance". Il est facilement


trouvable en utilisant la barre de recherche Windows.

Figure 2 : Assistant connexion bureau à distance dans Windows

Entrez simplement l'adresse IP du Raspberry (disponible en tapant ifconfig dans


un terminal) puis cliquez sur "Connexion". La fenêtre sur Figure 3 devrait s'ouvrir.
Connectez-vous avec vos identifiants et mots de passe (par défaut pi et raspberry)
et validez.

10
Travaux Pratiques – Systèmes d’exploitation embarqués EST Fès

Figure 3 : Connexion bureau à distance

4. Transfert de fichiers :

4.1. Avec linux

scp <ressource_a_envoyer> <destination>

Exemples:

- Envoyer le fichier /home/bernard/photo.jpg de votre PC vers le


répertoire /home/pi de la Raspberry :
scp /home/bernard/photo.jpg pi@192.168.0.15:/home/pi

- Récupérer le fichier /home/pi/toto.txt sur la Raspberry Pi et le copier dans le


dossier /tmp de votre PC :
scp pi@192.168.0.15:/home/pi/toto.txt /tmp

- Transférer les fichiers ~/file1 et ~/file2 de votre PC vers le dossier /home/pi de


votre Raspberry :
scp ~/file1 ~/file2 pi@192.168.0.15:/home/pi

- Enfin, cas particulier, transférer tout le dossier /home/pi de votre Raspberry Pi


vers un nouveau dossier ~/tmp_pi dans votre PC :
scp -r pi@192.168.0.15:/home/pi ~/tmp_pi

11
Travaux Pratiques – Systèmes d’exploitation embarqués EST Fès

4.2. Avec Windows

Sous Windows ou Mac OS, nous n’allons pas transférer les fichiers directement
en lignes de commandes, mais nous allons utiliser une interface graphique à la
place. Nous allons en fait utiliser un outil appelé FileZilla.

Figure 4 : Démarrage de FileZilla

5. Programmation en C ++

Pour introduire les programmes et assurer leur exécution, nous allons utiliser IDE
Geany. Geany est un environnement de développement intégré petit et léger. Il a
été développé pour fournir un IDE petit et rapide, qui n'a que quelques
dépendances d'autres packages. Un autre objectif était d'être aussi indépendant
que possible d'un environnement de bureau spécial comme KDE ou GNOME -
Geany ne nécessite que les bibliothèques d'exécution GTK3.

Pour installer l’IDE, on a besoin de la commande suivante :


sudo apt-get install geany

12
Travaux Pratiques – Systèmes d’exploitation embarqués EST Fès

5.1. Premier programme :

Pour se familiariser avec l’IDE Geany, commençons par un simple programme


qui permet d’afficher (Bonjour).
#include <iostream>
#include <string>
using namespace std;

int main()
{

string prenom;

cout << "Test d'ecriture et de compilation d'un programme C++ sur Raspbery PI " << endl ;

cout << "- Ecriture sur cible " << endl ;

cout << "Quel est ton prenom ? " ;

cin >> prenom;

cout << "Bonjour " << prenom << endl;


}

NB: Il existe une autre méthode pour introduire et exécuter les programmes sous
Raspberry Pi Os sans utiliser un IDE. Cela est effectué en se basant uniquement
sur des lignes de commandes.

5.2. La bibliothèque bcm2835

Il s'agit d'une bibliothèque C pour Raspberry Pi (RPi). Il donne accès au GPIO et


à d'autres fonctions d'E/S sur la puce Broadcom BCM 2835, telle qu'utilisée dans
le RaspberryPi, permettant l'accès aux broches GPIO sur la prise IDE à 26 broches
de la carte RPi afin que vous puissiez contrôler et interfacer avec divers
périphériques externes.

13
Travaux Pratiques – Systèmes d’exploitation embarqués EST Fès

5.2.1. Installation :

Pour installer le package de la bibliothèque. Il suffit de visiter le site web de cette


dernière. Les commandes d’installation sont les suivantes :
wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.70.tar.gz
tar zxvf bcm2835-1.70.tar.gz
cd bcm2835-1.xx
./configure
make
sudo make check
sudo make install

5.2.2. Les GPIO:

Une caractéristique puissante du Raspberry Pi est la rangée de broches GPIO sur


le long du bord supérieur de la carte. GPIO (General-Purpose Input/Output)
signifie entrée/sortie à usage général. Ces broches sont une interface physique
entre le Raspberry Pi et le monde extérieur. Les broches GPIO permettent au
Raspberry Pi de contrôler et de surveiller le monde extérieur en étant connecté à
des circuits électroniques. Le Pi est capable de contrôler les LED, de les allumer
ou de les éteindre, de faire fonctionner des moteurs et bien d'autres choses.

Figure 5 : GPIO avec leurs descriptions

14
Travaux Pratiques – Systèmes d’exploitation embarqués EST Fès

5.2.3. Programme de clignotement d’une Led :

Le circuit approprié pour assurer le clignotement de Led apparait dans Figure 6.

Figure 6 : Circuit de clignotement d’une Led.

Le programme est le suivant :


#include <bcm2835.h>
#define LED RPI_GPIO_P1_12

int main(int argc, char **argv){

if(!bcm2835_init()) return 1;

bcm2835_gpio_fsel (LED, BCM2835_GPIO_FSEL_OUTP);


unsigned int delay = 1000;
while(1){
bcm2835_gpio_set(LED);
bcm2835_delay(delay);
bcm2835_gpio_clr(LED);
bcm2835_delay(delay);
}}

15
Travaux Pratiques – Systèmes d’exploitation embarqués EST Fès

TP 3 : C++ sous Raspberry Pi

Bibliothèque wiringPi

1. Objectif du TP :

WiringPi est une bibliothèque C++ pour Raspberry Pi. Avec cette bibliothèque,
nous pouvons utiliser de nombreuses fonctionnalités fournies par les GPIO :
broches numériques, SPI, I2C, UART, etc.

Bien qu'il existe de nombreuses bibliothèques Python pour les GPIO Raspberry
Pi, C++ est assez en retard. Heureusement, il existe WiringPi.

Dans ce TP, nous allons installer WiringPi, apprendre à l'utiliser et voir de


nombreux points pratiques qui nous seront utiles lorsque nous travaillerons avec
cette bibliothèque sur nos propres projets.

2. Présentation de la bibliothèque wiringPi


2.1. Installation de la bibliothèque:

L’installation est effectuée soit en utilisant les commandes de mis à jours et


d’amélioration du système d’exploitation Pi :

sudo apt-get update


sudo apt-get upgrade

Soit par la commande suivante qui installe directement la bibliothèque :

sudo apt-get install wiringpi

Dans d’autres distributions de Linux qui ne supportent pas RaspberryPi.


L’installation pourra nécessiter plus de lignes de commandes :
sudo apt-get purge wiringpi
hash -r
git clone --branch final_official_2.50 https://github.com/WiringPi/WiringPi.git ~/wiringpi
cd ~/wiringPi
./build

16
Travaux Pratiques – Systèmes d’exploitation embarqués EST Fès

Pour s’assurer que la bibliothèque WiringPi a été installée avec succès. Essayez
d’exécuter la ligne de commande suivante qui permet d’afficher la version:

gpio –v

Si la commande ne s’exécute pas, on a forcément un problème de mis à jour. Pour


le remédier, utilisez les lignes de commandes suivantes :

cd /tmp
wget https://project-downloads.drogon.net/wiringpi-latest.deb
sudo dpkg -i wiringpi-latest.deb

2.2. L'utilitaire GPIO

WiringPi comprend un utilitaire de ligne de commande gpio qui peut être utilisé
pour programmer et configurer les broches GPIO. Vous pouvez l'utiliser pour lire
et écrire les broches et même l'utiliser pour les contrôler à partir de scripts shell.

- Exemple : gpio readall

Avec cette commande, nous pouvons obtenir un aperçu complet de toutes les
broches disponibles sur la carte Pi (Figure1).

Figure 1 : Exécution de « gpio readall » Figure 2 : Broches de Raspberry Pi

17
Travaux Pratiques – Systèmes d’exploitation embarqués EST Fès

Le tableau que nous voyons avec « gpio readall » est assez complet, il nous donne
beaucoup d'informations utiles. Le tableau est séparé en 2 parties, qui sont en
miroir, exactement comme le brochage du Raspberry Pi sur Figure 2.

La description de chaque colonne du tableau de Figure 1:

Physical : il correspond simplement aux broches physiques de GPIO présents sur


la carte PI.

V : la « valeur » actuelle de la broche, en gros, cette colonne indique si la broche


donnée est à l'état BAS ou HAUT.

Mode : une broche doit être définie dans un certain « mode » pour effectuer des
opérations. Les modes les plus courants pour les broches numériques sont INPUT
(vous pouvez lire la valeur à partir de la broche) et OUTPUT (vous pouvez écrire
une valeur sur la broche). On peut également remarquer le mode ALT0, qui est
ici utilisé pour le protocole I2C (SDA, SCL) et le protocole SPI (MOSI, MISO,
SCLK).

Name : Si on regarde la deuxième image (Figure 2) avec le brochage du Raspberry


Pi, nous pouvons voir que la colonne "Name" affiche simplement la fonction
standard de chaque broche et, le cas échéant, remplace cette fonction standard par
la fonction alternative. Notez que les numéros GPIO correspondent à la colonne
« wPi » et non à la colonne « BCM ».

wPi : les numéros de broche réellement utilisés par la bibliothèque WiringPi. Cette
convention de numérotation a été établie il y a assez longtemps lorsque la
bibliothèque WiringPi a été écrite pour la première fois. Cela garantit que les
numéros de broche restent les mêmes pour toutes les versions de la carte.

BCM : La carte Raspberry Pi a un BCM2835 (Broadcom SOC Channel). Il définit


les numéros de broche et les fonctions alternatives pour l'en-tête GPIO. Cette
convention de numérotation est désormais la plus utilisée au sein de la
communauté Raspberry Pi.
18
Travaux Pratiques – Systèmes d’exploitation embarqués EST Fès

- D’autre commandes gpio :

Ligne de commande Utilité


gpio –v Permet d’afficher la version
gpio mode <pin> in/out/pwm/clock/up/down/tri Cela définit le mode d'une broche en mode
entrée, sortie, pwm ou horloge, et peut en outre
définir les résistances internes de pull-up/down
sur pull-up, pull-down ou aucune.
gpio write <pin> 0/1 Définit une broche de sortie sur l’état HAUT (1)
ou BAS (0)
gpio pwm <pin> <value> Règle la broche sur une valeur PWM (0-1023)
gpio read <pin> Affiche la valeur logique de la broche donnée : 0
(Low) ou 1 (High).
gpio wfi <pin> rising/falling/both Cela oblige GPIO à effectuer une attente non
occupée sur une seule broche GPIO jusqu'à ce
qu'elle change d'état en celui indiqué.

2.3. Les fonctions de wiringPi :

Dans cette section, on va présenter quelques fonctions fréquemment utilisées dans


la bibliothèque wiringPi.

Fonction Description
wiringPiSetup(void) Initialise le système wiringPi et suppose que le
programme développé va utiliser le schéma de
numérotation des broches wiringPi.
wiringPiSetupGpio(void) Ceci est identique à ci-dessus, mais cela permet
aux programme d'utiliser les numéros de broche
GPIO Broadcom (BCM)
pinMode (int pin, int mode) ; Définit le mode d'une broche sur INPUT,
OUTPUT ou PWM_OUTPUT.
digitalWrite (int pin, int value) ; Écrit la valeur HIGH ou LOW (1 ou 0) sur la
broche donnée qui doit avoir été préalablement
définie comme sortie.
pwmWrite (int pin, int value) ; Écrit la valeur dans le registre PWM pour la
broche donnée. La valeur doit être comprise
entre 0 et 1024.

19
Travaux Pratiques – Systèmes d’exploitation embarqués EST Fès

digitalRead (int pin) ; Cette fonction renvoie la valeur lue à la broche


donnée. Il sera HAUT ou BAS (1 ou 0) selon le
niveau logique à la broche.
pullUpDnControl (int pin, int pud) ; Cela définit le mode de résistance pull-up ou
pull-down sur la broche donnée, qui doit être
définie comme entrée.
Le paramètre (pud) doit être ; PUD_OFF, (pas
de pull up/down), PUD_DOWN (pull to ground)
ou PUD_UP (pull to 3.3v)
pwmSetMode (int mode) ; Le générateur PWM peut fonctionner en 2 modes
– « Balanced » et « mark:space ». Le mode
mark:space est traditionnel, mais le mode par
défaut du Pi est « balanced ». Vous pouvez
changer de mode en fournissant le paramètre :
PWM_MODE_BAL ou PWM_MODE_MS.
delay (unsigned int tempo) Cela provoque une pause de l'exécution du
programme pendant au moins « tempo »
millisecondes. En raison de la nature multitâche
de Linux, cela pourrait être plus long. Notez que
le délai maximum est un entier 32 bits non-signé
ou environ 49 jours.
delayMicroseconds (unsigned int tempo) Cela provoque une pause de l'exécution du
programme pendant au moins « tempo »
microsecondes. En raison de la nature
multitâche de Linux, cela pourrait être plus long.
Notez que le délai maximum est un entier non-
signé de 32 bits, soit environ 71 minutes.

20
Travaux Pratiques – Systèmes d’exploitation embarqués EST Fès

2. Manipulations:

Dans cette série de manipulations, on va se concentrer sur l’utilisation de la


bibliothèque wiringPi pour réaliser diverses applications.

2.1. Manipulation 1 - LED clignotante :

Figure 3 : Schéma du circuit avec Proteus

Pour assurer le fonctionnement du montage, il faut écrire un programme en C++


en utilisant le Terminal. Le terminal est l’interface du Shell qui interprète les
lignes de commandes. C'est donc le programme qui attend que vous rentriez des
commandes (comme l'illustre Figure 4).

Figure 4 : Terminal du système d’exploitation Pi

Les commandes fréquemment utilisées pour assurer l’exécution du programme


seront introduite pendant la séance TP.

21
Travaux Pratiques – Systèmes d’exploitation embarqués EST Fès

Le programme de la Led clignotante est montré dans Figure 5.

Figure 5 : Programme de clignotement d’une seule Led en utilisant l’éditeur de texte Gnu Nano

- Compte rendu

Q1- Essayez de faire clignoter deux Leds simultanément (Image du circuit).


Q2- Introduisez le programme approprié avec des commentaires sur l’ensemble des
instructions utilisées.
Q3- Les commandes utilisées sur le Shell pour assurer l’exécution du programme doivent
être présentées avec une description de chaque commande.

2.2. Manipulation 2 – Comparaison de deux nombres entiers:

Figure 6 : Schéma du circuit avec Proteus

22
Travaux Pratiques – Systèmes d’exploitation embarqués EST Fès

- Compte rendu :

Q4 : Ecrire un programme qui permet de faire allumer 3 Leds selon le résultat de


comparaison de deux nombres entiers.

Par exemple : si j’ai entré deux nombres qui sont 12 et 10. La Led verte s’allume.

Si j’ai entré deux nombres 5 et 9. La Led bleue s’allume.

Si j’ai entré deux nombres 2 et 2. La Led rouge s’allume.

NB : Le programme doit être accompagnée par des commentaires expliquant les


différentes instructions utilisées.

2.3. Manipulation 2 – Le bouton poussoir:


- Compte rendu

Q5 : Réaliser un programme qui permet de réaliser la tâche suivante : Si j'appuie sur le


bouton poussoir la Led s'allume. Si je n'appuie pas sur le bouton poussoir, la Led s'éteint.

Q6 : Etablir un nouveau programme qui permet de faire clignoter la Led quand le bouton
poussoir est actionné.

23
Travaux Pratiques – Systèmes d’exploitation embarqués EST Fès

TP 4 : Python sous Raspberry Pi


1. Objectifs du TP:

Le but du TP est de se familiariser avec l’utilisation du langage python pour


paramétrer la carte Raspberry Pi.

Python est un langage de programmation puissant, facile à utiliser, facile à lire et


à écrire et, avec Raspberry Pi, il permet de connecter le projet développé au monde
réel. La syntaxe Python est claire, met l'accent sur la lisibilité et utilise des mots-
clés anglais standards.

Durant la séance, nous ferons appel aussi à l’une des bibliothèques fréquemment
utilisées dans la programmation de la carte. Il s’agit de RPi.GPIO.

2. Installation et mise à jour :

Il existe deux versions de Python installées par défaut dans le Raspberry Pi OS,
la version 2 et la version 3. Pour découvrir le nombre exact de la version installée,
il suffit d’introduire les deux commandes suivantes :

python2 –version
python3 –version

Il y’a tellement de différences entre les versions 2 et 3 de python. Alors, le choix


de version est important.

Au cas contraire, si python n’est pas installé. Les commandes suivantes


permettent d’installer la dernière version Python 3 du site officiel :

wget https://www.python.org/ftp/python/3.9.9/Python-3.9.9.tgz
tar -zxvf Python-3.9.9.tgz
cd Python-3.9.9
./configure --enable-optimizations
sudo make altinstall

Si Python est déjà installé. Et vous voulez effectuer une mise à jour de la version,
les commandes suivantes seront suffisantes :

24
Travaux Pratiques – Systèmes d’exploitation embarqués EST Fès

sudo apt update


sudo apt upgrade

3. Mode d’utilisation de Python dans le terminal :


3.1. Mode interactive de Python

L’interpréteur Python peut être utilisé de manière interactive, c’est-à-dire qu’on


va pouvoir directement lui fournir du code Python à exécuter et il nous renverra
les résultats immédiatement. Cette fonctionnalité est très utile lorsqu’on souhaite
tester rapidement des bouts de code ou pour l’apprentissage.

Pour utiliser l’interpréteur Python version 3 de cette manière, on va déjà devoir


l’appeler depuis l’invite de commande ou le terminal. Pour cela, on écrit la
commande :

python3
Puis on presse Entrée pour valider. Ensuite, on a plus qu’à écrire nos différentes
instructions et à presser Entrée afin que l’interpréteur les interprète
immédiatement.

Figure 1 : Démarrage du python version 3 en mode interactive

Vous pouvez ensuite exécuter une commande simple, par exemple :

print("hello world")

25
Travaux Pratiques – Systèmes d’exploitation embarqués EST Fès

Pour démarrer la version 2 il suffit d’entrer la commande :

python2

3.2. Utilisation de ligne de commande :

Vous pouvez écrire un fichier Python dans un éditeur standard (Par ex : Nano) et
l'exécuter en tant que script Python à partir de la ligne de commande.

Pour créer le script :

nano name.py

Puis entrez le programme, par exemple :

L’exécution peut être assurer en utilisant la commande suivante :

python3 name.py

4. Bibliothèque RPi.GPIO

La bibliothèque RPi.GPIO fournit une classe pour contrôler GPIO sur Raspberry
Pi. Cette bibliothèque Python est incluse dans Raspberry Pi Os, Dont ce n’est pas
la peine de l’installer. Autrement, la commande suivante peut assurer
l’installation :

pip install RPi.GPIO

pip est un gestionnaire de paquets pour Python. Cela signifie que c'est un outil qui
vous permet d'installer et de gérer des bibliothèques et des dépendances

26
Travaux Pratiques – Systèmes d’exploitation embarqués EST Fès

supplémentaires qui ne sont pas distribuées dans le cadre de la bibliothèque


standard.

La gestion des packages est si importante que pip est inclus dans le programme
d'installation de Python depuis les versions 3.4 pour Python 3 et 2.7.9 pour Python
2, et il est utilisé par de nombreux projets Python, ce qui en fait un outil essentiel.
Pour l’installer :

wget https://bootstrap.pypa.io/get-pip.py
python3 get-pip.py

4.1. Configuration des broches GPIO:

Le Raspberry Pi autorise deux numérotations : celle de la sérigraphie du


connecteur de la carte (GPIO.BOARD), ou la numérotation électronique
(GPIO.BCM). Figures 2 et 3 présentent les numérotations de GPIO.

Figure 2 : Commande « gpio readall » Figure 3 : Commande « pinout »


(GPIO.BCM) = Colonne BCM (GPIO.BCM) = Numérotation sans ()
(GPIO. BOARD) = Colonne Physical (GPIO. BOARD) = Numérotation avec ()

27
Travaux Pratiques – Systèmes d’exploitation embarqués EST Fès

4.2. Instructions utiles:

Importation du module RPi.GPIO afin de l’utiliser dans le développement :

import RPi.GPIO as GPIO

Afin de choisir le mode de numérotation de la carte Raspberry Pi durant le


développement du script :

GPIO.setmode(GPIO.BOARD)
GPIO.setmode(GPIO.BCM)
# On peut aussi demander la configuration etablie
configuration = GPIO.getmode()

Afin d'initialiser une Entrée/Sortie, il suffit de préciser son numéro, fonction de la


configuration précédemment choisie, son paramétrage (entrée ou sortie) et
éventuellement son état initial (pour une sortie) :

GPIO.setup(12, GPIO.IN) # broche 12 est une entree numerique


GPIO.setup(12, GPIO.OUT) # broche 12 est une sortie numerique
GPIO.setup(12, GPIO.OUT, initial=GPIO.HIGH) # broche 12 est une sortie initialement a
l'etat haut

Afin de lire l'état d'une entrée, il suffit de préciser le numéro de l'E/S :

GPIO.input(12)

Pour modifier l'état d'une sortie, il faut indiquer le numéro de la sortie, ainsi que
l'état désiré :

GPIO.output(12, GPIO.LOW)

Un toggle (inversement d'état) s'effectue en inversant l'état lu :

GPIO.output(12, not GPIO.input(12))

On peut déterminer le mode de l’E/S afin de connaître son état de configuration.


Les valeurs renvoyées sont alors GPIO.INPUT, GPIO.OUTPUT, GPIO.SPI,
GPIO.I2C, GPIO.HARD_PWM, GPIO.SERIAL ou GPIO.UNKNOWN.

state = GPIO.gpio_function(pin)
print(state)

28
Travaux Pratiques – Systèmes d’exploitation embarqués EST Fès

5. Manipulations:

Dans cette série de manipulations, on va opter pour l’utilisation du module


RPI.GPIO pour réaliser diverses applications.

5.1. Manipulation 1 - LED clignotante :

Figure 4 : Schéma du circuit avec Proteus

Figure 5 : Script Approprié pour LED clignotante

- Compte rendu
Q1- Essayez de faire clignoter trois Leds simultanément (Image du circuit).

Q2- Introduisez le script approprié avec des commentaires sur l’ensemble des instructions
utilisées.

29
Travaux Pratiques – Systèmes d’exploitation embarqués EST Fès

5.2. Manipulation 2 - LED clignotante par PWM:


5.2.1. Rappel :

PWM (Pulse Width Modulation) est une technique de modulation par laquelle la
largeur d'impulsion est modifiée tout en maintenant la fréquence constante.

Grâce à la technique PWM, nous pouvons contrôler la puissance fournie à la


charge en utilisant un signal ON-OFF.

Les signaux PWM peuvent être utilisés pour des applications telles que le contrôle
de la vitesse des moteurs à courant continu, la modification de l'intensité d'une
LED, le contrôle des servomoteurs, etc.

Figure 6 : LED clignotante par la technique PWM

5.2.2. GPIO pour PWM:

Raspberry Pi possède deux canaux PWM, à savoir PWM0 et PWM1. Les broches
PWM pour les deux canaux sont les suivantes :

GPIO Pin PWM0/PWM1


GPIO12 PWM0
GPIO18 PWM0
GPIO13 PWM1
GPIO19 PWM1

30
Travaux Pratiques – Systèmes d’exploitation embarqués EST Fès

Les broches PWM sur Raspberry Pi sont illustrées dans Figure 7.

Figure 7 : broches PWM sur Raspberry Pi

5.2.3. Manipulation:

Nous allons générer un signal PWM sur Raspberry Pi. Cette sortie PWM est
connectée à une LED qui indiquera le changement d'intensité. La sortie PWM
utilisée est GPIO18.

Figure 8 : Script PWM pour une seule Led

31
Travaux Pratiques – Systèmes d’exploitation embarqués EST Fès

- Compte rendu
Q3- Utilisez la technique PWM pour commander deux Leds qui s’allument en série. Ça
veut dire quand une Led s’éteint, l’autre commence à s’allumer (Image du circuit).

Q4- Introduisez le script approprié avec des commentaires sur l’ensemble des instructions
utilisées.

5.3. Manipulation 3 – Lecture de l’état d’un bouton:

Dans cette manipulation, nous allons essayer de lire l’état d’un bouton poussoir.
Selon cet état, une Led s’allumera ou s’éteindra.

Figure 9 : Script incomplet de la manipulation

- Compte rendu
Q5 : Le script sur la figure ci-dessus n’est pas complet. Essayez de le compléter sans
erreur. Vous pouvez également développer votre propre programme. N’oubliez pas les
commentaires pour expliquer les instructions.

Q6 : Dessinez un schéma du circuit avec tous les broches GPIO utilisées.

32
Travaux Pratiques – Systèmes d’exploitation embarqués EST Fès

TP 4 : Mini-projet

Développement web sous Raspberry PI

33

Vous aimerez peut-être aussi