Académique Documents
Professionnel Documents
Culture Documents
Bruno Masi
bruno.masi@ac-aix-marseille.fr
Consignes de travail
Ce document est à la fois un support de cours et d’activités. Les réponses aux questions doivent
être faites dans votre cahier de SNT.
Questions : vous devez répondre aux questions posées dans votre cahier de SNT.
A faire : vous devez effectuer les manipulations et expérimentations proposées. Vous devez
noter les résultats obtenus et dans votre cahier de SNT.
Synthèse : vous devez réfléchir aux questions et noter les réponses dans votre cahier de SNT.
Rev : 1.0
Date : décembre 2022
Ce document à été rédigé en LATEX avec l’éditeur Texworks et la distribution MiKTeX. Il a été compilé le 27 août
2023, 8 h 14 CEST.
Table des matières
Consignes de travail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2 L’informatique embarquée 14
2.1 La carte Galaxia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.1.1 Le menu système . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.2 Programmation de la carte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.2.1 Un premier programme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.2.2 Changement de couleur progressif . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.2.3 Acqusition des données issues de l’inclinomètre . . . . . . . . . . . . . . . . . . 17
2.2.4 Synthèse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Interface
utilisateur
Système
Capteurs Unité de traitement Actionneurs
physique
Depuis quelques années les systèmes informatiques embarqués peuvent être dotés d’une interface de
communication (wifi, bluetooth, etc..) qui leur permet parfois d’être connectés au réseau internet. On
parle alors d’objets connectés. Les applications de ces objets connectés sont innombrables, on peut
citer par exemple les domaines de la domotique, de la télésurveillance, de la santé...
Le nombre croissant d’objets connectés via internet a fait émerger l’idée d’un internet des objets ou,
en anglais, internet of things abrégé souvent en IoT.
Pour qu’un ordinateur puisse effectuer une tâche, par exemple un calcul, ou la résolution d’un pro-
blème, il faut le programmer, c’est à dire lui donner une suite d’instructions simples qui, lorsqu’elles
seront exécutées conduiront à l’accomplissement de la tâche.
Les programmes sont écrits dans des langages informatiques dont les mots sont des instructions et les
règles la syntaxe. Il existe de nombreux langages de programmation. Pour les « petits systèmes » tels
que les objets connectés on utilise le plus souvent le langage C ou C++ cependant, l’augmentation
des capacités de calcul et de la vitesse des micro-contrôleurs et des SOC permettent d’employer des
langages de plus haut niveau (plus abstraits) comme le langage Python.
3 4
L’écran de Online-GDB est séparé en deux parties repérées « 1 » et « 2 » sur la figure 1.1 :
– Partie 1 : Zone d’édition du programme, vous pouvez écrire votre programme dans cette partie
de la fenêtre.
– Partie 2 : Zone de sortie, sur laquelle s’affichent les résultats de l’exécution du programme.
A faire
1.1 Connectez vous sur le site Online-GDB, modifiez le texte du message « Hello World ! »
en le remplaçant par celui de votre choix. Cliquez sur le bouton « Run » et vérifiez que
votre message s’affiche dans la zone de sortie.
1.2 Sauvegardez ce travail sur votre ordinateur en donnant au fichier le nom programme1.py.
Questions
On donne le programme :
x = 1
y = 2 + x
z = 2 * y + x
1.3 Sans utiliser l’ordinateur, donnez le contenu des variables x, y et z après l’exécution du
programme.
On donne le programme :
x = 1
x = x + 2
1.4 Sans utiliser l’ordinateur, donnez le contenu de la variable x, après l’exécution du pro-
gramme.
– lorsque l’on écrit print(a) le contenu de la variable a est affiché, mais si l’on écrit print("a")
c’est le caractère a qui est affiché. De même, lorsque l’on écrit print("a = "), tout le message
a = est affiché « tel quel ».
– il est possible de faire afficher plusieurs informations par print en séparant ces informations
par des virgules.
A faire
Copiez le programme ci-dessous dans l’éditeur de Online-GDB :
x = 3
y = 4
p = x * y
print ( " Le produit de x par y vaut p " )
print ( " Le produit de x par y vaut " , p )
1.5 Que constatez-vous ? Pourquoi le fonctionnement du premier print n’est-il pas satisfai-
sant ?
1.6 Modifiez le programme pour qu’il affiche :
Le produit de x par y vaut 12 et sa somme vaut 7
– int : il s’agit des nombres entiers, positifs comme négatifs. Exemples : a = 123, b = -22, c = 0.
– float : ce sont des approximations de nombres réels. En effet, il n’est pas possible pour Python
de traiter les nombres réels, par exemple, pour la valeur 31 nous devrons nous contenter de valeur
approché 0, 333333333333333. Python n’offre (en standard) qu’une précision de 15 décimales.
Exemples : pi = 3.14, rien = 0.
– str : appelé chaı̂nes de caractères ce type de variable permet de traiter des mots, des phrases,
ou n’importe quelle succession de caractères. Une chaine de caractères est délimitée par des
guillemets. Exemple : phraseCulte = "Hello World !"
– ligne 1 : Affiche un message grâce à l’instruction print afin d’inviter l’utilisateur à entrer son
nom au clavier.
– ligne 2 : L’instruction input() effectue la saisie des caractères entrés au clavier par l’utilisateur.
Lorsque l’utilisateur presse la touche Entrée la saisie se termine et la chaı̂ne de caractères qui
a été tapée est affectée à la variable n.
– ligne 3 : L’instruction print affiche le message Bonjour suivi du contenu de la variable n, c’est
à dire du nom entré par l’utilisateur.
Il est possible de confier à l’instruction input le soin d’afficher le message d’invite à l’utilisateur, en
plus d’effectuer la saisie. Cette solution est présentée dans le code ci-dessous :
1 n = input ( " Quel est votre nom ? " ) # Affiche l ’ invite et saisie la r é ponse
2 print ( " Bonjour " , n )
Listing 1.4 – Affichage et saisie avec l’instruction input
A faire
1.9 Saisissez le programme du listing 1.4 dans Online-GDB et vérifiez son bon fonctionnement.
A faire
1.10 Saisissez le programme du listing 1.5 dans Online-GDB et vérifiez son bon fonctionnement.
1.11 Écrivez un programme qui demande à l’utilisateur d’entrer le rayon d’un cercle et qui
affiche sa surface et sa circonférence. On rappelle que pour un cercle : circonf erence =
2 × π × rayon et surf ace = π × rayon2 .
1.2.6 Synthèse
Répondez en quelques phrases aux questions suivantes :
Synthèse
1.12 Qu’est-ce qu’une variable ?
1.13 Qu’est-ce que le type d’une variable ? Quels sont les types de variables rencontrés dans ce
cours ?
1.14 Que signifie affecter une variable ? Comment se font les affectations de variables en langage
Python ?
1.15 Qu’est-ce qu’une entrée ? Qu’est-ce qu’une sortie ?
1.16 Quels sont les mots clés de Python qui permettent d’effectuer des entrées et des sorties ?
Questions
On donne deux variables : a = 3 et b = 5
1.17 Indiquez, pour chacune des conditions données, si elle est vrai ou fausse :
(a) a != b
(b) a == b
(c) a != b-2
(d) a <= b
(e) not (a != b)
(f) (a != b) and (a == 3)
(g) (a != b) or (a == 3)
Dans l’exemple ci-dessus, la structure conditionnelle if permet de n’exécuter les instructions print
uniquement si la valeur de la variable t est supérieure à 37.
Remarque : Les deux instructions print (lignes 4 et 5) sont décalées de quatre colonnes par rapport
à l’instruction if. Cela s’appelle une indentation c’est ce qui permet à l’interpréteur Python de savoir
que ces deux instructions font partie de la structure conditionnelle if.
A faire
1.18 Recopiez le programme dans l’éditeur de Online-GDB et exécutez-le plusieurs fois avec
différentes valeurs de température. Assurez-vous qu’il fonctionne correctement.
1.19 Retirez l’indentation du second print afin de mettre cette instruction au même niveau
que le if. Exécutez le programme plusieurs fois comme à la question précédente. Que
constatez-vous ? Expliquez ce nouveau comportement.
A faire
1.20 Recopiez le programme dans l’éditeur de Online-GDB et exécutez-le plusieurs fois avec
différente valeurs de température. Assurez-vous qu’il fonctionne correctement.
1.21 Comment aurait-on pu arriver au même résultat sans utiliser la structure if-else mais
uniquement la structure if ? Quel avantage la structure if-else présente-elle ?
1.4.3 Synthèse
Répondez en quelques phrases aux questions suivantes :
Synthèse
1.22 Qu’est-ce qu’une condition ?
1.23 Quel est le rôle de la structure conditionnelle if ?
1.24 Quel est le rôle de la structure conditionnelle if-else ?
– les boucles bornées, elles sont utilisées lorsque l’on connaı̂t à l’avance le nombre de répétitions
que l’on souhaite effectuer.
– les boucles non bornées, elles sont utilisées lorsque l’on ne connaı̂t pas à l’avance le nombre
de répétitions que l’on souhaite effectuer.
Dans l’exemple ci-dessus, un code secret est enregistré dans la variable codeSecret, l’utilisateur doit
saisir un code qui sera placé dans la variable entree. Au début du programme on affecte une chaı̂ne
vide à la variable entree (ligne 2).
La ligne 5 contient une instruction input qui invite l’utilisateur à entrer un code et qui place la
chaı̂ne saisie dans la variable entree.
La boucle while de la ligne 4 va répéter l’instruction input de la ligne 5 tant que le code entré par
l’utilisateur sera différent du code secret attendu.
Puisque l’on ne peut pas connaı̂tre à l’avance le nombre de fois où l’utilisateur entrera un code erroné,
il n’est pas possible de savoir combien de fois la boucle va « tourner ».
A faire
capital = 10000 # capital de d é part
taux_interet = 3/100 # taux d ’ iteret annuel
n = 0 # nombre d ’ ann é es é coul é es
A faire
Une feuille de nénuphar de dix centimètres de diamètre se trouve au centre d’un lac circulaire
de 10 mètres de diamètre. Le nénuphar grandit de telle sorte que le diamètre de sa feuille est
multiplié par 1,5 chaque jour.
1.27 Écrire un programme qui détermine le nombre de jours qu’il faut pour que la feuille
recouvre tout le lac.
Dans l’exemple ci-dessus la boucle for répétera 10 fois la ligne 2 : print(i). L’indice i prendra
successivement les valeurs entières comprises entre 0 et 9 (soit 10 valeurs).
A faire
La consommation énergétique annuelle d’internet était estimée à 6000 TWh/an en 2022. Elle
est multipliée par 1,2 tous les ans.
1.28 Écrire un programme qui détermine la consommation énergétique annuelle d’internet en
2030.
1.5.3 Synthèse
Répondez en quelques phrases aux questions suivantes :
Synthèse
1.29 Qu’est-ce qu’une boucle ?
1.30 Qu’est-ce qu’une boucle non bornée ?
1.31 Quelle instruction Python permet de créer une boucle non bornée ?
1.32 Qu’est-ce qu’une boucle bornée ?
1.33 Quelle instruction Python permet de créer une boucle bornée ?
L’informatique embarquée
Les systèmes embarqués sont des ordinateurs et des logiciels présents dans les objets que nous utilisons
tous les jours. On retrouve des systèmes embarqués à peu près partout :
– dans les avions,
– dans les automobiles,
– dans les appareils électroménagers,
– dans la téléphonie,
– ...
Connecteur USB
Afficheur
OLED Sortie Audio Magnétomètre
Accéléromètre
Connecteur
Connecteur Groove
Groove
Touches Bouton "A"
tactiles
Haut, Bas
SOC ESP-32
Droite, Bouton "B"
Gauche
Connecteur
Micro:bit
Le cœur de la carte Galaxia est un System On Chip (SOC) ESP32. C’est un véritable micro-ordinateur
construit sur une seule puce. Il contient, entre autres, les éléments suivants :
– un processeur Xtensa® cadencé à 240 Mhz,
– 4 Mo de mémoire flash,
– 320 Ko de mémoire ram,
– une interface Wifi,
– une interface Bluetooth,
– une liaison usb.
# Menu système #
I Dernière erreur I
*| Fichier à exécuter |
I Variables I
| Boutons |
I LED I
| Capteurs |
I Redémarrer I
On se déplace dans le menu à l’aide des touches directionnelles haut et bas, la ligne sélectionnée est
indiquée par une étoile sur la colonne de gauche. On valide son choix avec le bouton A.
Dans la ligne de code led.set_color(255, 0, 0) les valeurs 255, 0, 0 correspondent aux niveaux
d’allumage du rouge, du vert et du bleu de la led. La valeur 255 conduit à l’allumage maximal et la
valeur 0 à l’extinction. Ainsi, led.set_color(255, 0, 0) allume la couleur rouge au maximum et
éteint le vert et le bleu.
A faire
2.5 Modifiez le programme précédent pour que la led clignote alternativement en rouge et en
vert.
2.6 Modifiez à nouveau le programme précédent pour que la led clignote rouge, verte et bleue
puis recommence. Chaque couleur restera allumée 0,5 seconde.
4 while True :
5 for i in range (256) :
6 led . set_colors (i , 0 , 255 - i )
7 time . sleep (0.01)
Listing 2.2 – Code du programme dimmer.py
Questions
2.7 Que fait la boucle for de la ligne 5 ?
2.8 Lorsque la variable i vaut 0, quelle est la couleur de la led ?
2.9 Lorsque la variable i vaut 255, quelle est la couleur de la led ?
2.10 Lorsque la variable i vaut 127, quelle est la couleur de la led ?
A faire
2.11 Copiez le programme dimmer.py sur la carte Galaxia et exécutez-le.
2.12 Modifiez le programme pour qu’il revienne progressivement de la couleur rouge à la couleur
bleu.
La carte Galaxia possède plusieurs capteurs, dont un accéléromètre trois axes. Ce capteur est capable
de mesurer l’accélération due à la masse de la Terre. Nous allons l’utiliser ici comme un inclinomètre
capable de nous indiquer l’angle que forme la carte avec l’horizon.
A faire
2.13 Dans le menu système sélectionnez Capteurs.
2.14 Notez la valeur du paramètre Accel Y lorsque la carte est positionnée :
– à l’horizontale,
– à la verticale avec la led vers le haut,
– à la verticale avec la led vers le bas.
Le programme accelero.py donné ci-dessous allume la led en rouge lorsque la carte est placée led
vers le haut et l’éteint dans le cas contraire.
1 from thingz import *
2
3 while True :
4 if accelerometer . get_y () > 800: # Si l ’ acceleration est > à 800 mg
5 led . set_colors (255 , 0 , 0) # On allume la led en rouge
6 else : # Sinon
7 led . set_colors (0 , 0 , 0) # On eteint la led
Listing 2.3 – Code du programme accelero.py
Questions
2.15 Lire le code du programme et expliquer son fonctionnement.
A faire
2.16 Modifiez le programme pour que la led s’allume en rouge quand la carte est dirigée vers
le haut et en vert lorsqu’elle est dirigée vers le bas.
3 while True :
4 i = accelerometer . get_y ()
5 rouge = int ((1000 + i ) / 4)
6 bleu = 512 - rouge
7 led . set_colors ( rouge , 0 , bleu )
Listing 2.4 – Code du programme accelero2.py
A faire
2.19 Téléchargez le programme accelero2.py et copiez-le sur la carte.
2.20 Lancez le programme et vérifiez que l’on obtient bien le résultat attendu.
2.2.4 Synthèse
Répondez, en quelques phrases, aux questions suivantes :
Synthèse
2.21 Qu’est-ce qu’un capteur ?
2.22 Quel capteur présent sur la carte Galaxia avez-vous mis en œuvre durant cette activité ?
2.23 Qu’est-ce qu’un actionneur ? Donnez deux exemples issus de systèmes techniques courants
comme une automobile ou une machine à laver.
L’informatique embarquée permet de rendre les objets communicants. Ainsi, un objet technique peut
accéder à internet et devenir un objet connecté. Cette tendance conduit à un internet des objets ou
Internet of Things (IoT).
Les applications des objets connectés sont innombrables dans l’industrie, mais également dans la vie
de tous les jours.
Internet
Afin de se connecter au routeur vous devez disposer de son SSID ainsi que du mot de passe :
– SSID : SNT
– Mot de passe : sntsainteloi
4 code_html = """
5 <! doctype html >
6
28 <ul >
29 <li > System On Chip ESP -32 : </ li >
30 <ul >
31 <li > Processeur XTensa cadenc é à 240 Mhz </ li >
32 <li >4 Mo de m é moire Flash </ li >
33 <li >320 ko de m é moire Ram </ li >
34 <li > Connectivit é Wifi </ li >
35 <li > Connectivit é Bluetooth </ li >
36 </ ul >
37 <li > Capteurs : </ li >
38 <ul >
39 <li > Magn é tom è tre 3 axes </ li >
40 <li > Acc é l é rom è tre 3 axes </ li >
41 <li > Capteur de temp é rature </ li >
42 <li > Capteur de lumi è re </ li >
43 </ ul >
56 while True :
57 http . wait_request ()
58 http . respond_with_html ( code_html , template = " mytemplate . html " )
Listing 3.1 – Code du programme serveur_web.py
Le code html de la page web qui apparait lorsque vous vous connectez à la carte est contenu dans la
variable Python html (lignes 5 à 48).
A faire
3.5 Modifiez le code html pour personnaliser votre site. Vous veillerez à faire apparaitre les
noms des élèves de l’équipe.
3.6 Relancez le programme et connectez-vous à nouveau sur votre carte. Vérifiez que vos
modifications sont bien visibles.
Réseau
Lampe connectée
IP : 192.168.0.5
Le protocole http permet de demander, depuis un client, l’accès à une ressource sur le serveur. Dans
l’exemple ci-dessus, c’est le navigateur du téléphone qui est le client, et la carte Galaxia le serveur.
Lorsque l’on demandera, depuis le client, à accéder à la ressource « a » (comme Allumer), la carte
Galaxia allumera la led et lorsque l’on demandera à accéder à la ressource « e » (comme éteindre),
la Galaxia éteindra la led.
Pour demander au navigateur d’accéder à une ressource spécifique il faut ajouter /mon_ressource
après l’adresse IP. Dans l’exemple ci-dessus :
– 192.168.0.5/a allumera la led
– 192.168.0.5/e éteindra la led
6 code_html_1 = """
7 <! doctype html >
8
21 code_html_2 = """
22 </ h2 >
23 </ body >
24 </ html >
25 """
26
32 while True :
33 response = http . wait_request ()
34 message = response . get_url ()
35 mess_html = ’ ’
36 if message == ’a ’:
37 led . set_colors (255 , 255 , 255)
38 mess_html = " allum é e "
39 if message == ’e ’:
40 led . set_colors (0 , 0 , 0)
41 mess_html = " etteinte "
42
A faire
3.7 Téléchargez le programme lampe_connectee.py, copiez-le sur la carte Galaxia et exécutez-
le.
3.8 Depuis votre smartphone, essayez d’allumer et d’éteindre la led.
A faire
3.9 Modifiez le programme lampe_connectee.py afin d’obtenir le comportement souhaité.
3.10 Vérifiez le fonctionnement de votre programme.
3.4 Synthèse
Répondez aux questions suivantes en quelques phrases :
Synthèse
3.11 Qu’est-ce qu’un objet connecté ? Donnez trois exemples.
3.12 Qu’est-ce que l’internet des objets ?
3.13 Quel sigle (anglais) utilise-ton pour désigner l’internet des objets ?
3.14 Quel est le protocole de communication que vous avez utilisé pour réaliser vos objets
connectés avec la carte Galaxia ?
3.15 La carte était-elle un client ou un serveur ?