Sujet n° 23 · Session 2026 · 1 heure
Des capteurs dans les vignes
Des modules agricoles envoient par radio des trames de 40 bits : température, humidité, bits de parité. Le candidat décode les trames, vérifie leur intégrité, puis rend le serveur robuste aux trames abîmées qui faussent l'analyse.
- Programmation objet
- Binaire et BCD
- Bits de parité
- Robustesse
- Graphique matplotlib
Mise en situationLes trames
Plusieurs fois par heure, chaque module mesure la température et l'humidité et transmet ses données par ondes radio, en trames de 40 bits représentées par des chaînes de caractères :
| Bits | Contenu | Exemple |
|---|---|---|
trame[0:8] | identifiant du module, en binaire | 00101010 → 42 |
trame[8:16] | clé de sécurité | 11001000 |
trame[16:28] | température : valeur − 900, divisée par 10 | 010010001100 → 1164 → 26,4 °C |
trame[28:36] | humidité en BCD, un chiffre par quartet | 0110 0010 → 62 % |
trame[36:40] | bits de parité des quatre blocs précédents | 1101 |
Une température inférieure à −10 °C est une erreur de mesure. Exception BCD : 100 % est codé 10100000. Un bit de parité vaut 0 si le nombre de 1 du bloc est pair, 1 sinon.
Toutes les cellules de cette page partagent le même Python, comme un notebook : une fonction écrite à une question sert aux suivantes. Maj + Entrée exécute la cellule.
Question 1Décoder température et humidité
On dispose d'une classe Transmission dont le rôle est de décoder les informations reçues :
>>> t = Transmission("0010101011001000010010001100011000101101")
>>> t
ID : 42 / Temp. : 26.4°C / Hum. : 62%
>>> t.get_temperature()
26.4
Implémenter les méthodes decoder_temperature et decoder_humidite. Ces méthodes ne renvoient rien, mais modifient directement les propriétés de l'objet. Écrire des tests pour vérifier que ces méthodes décodent bien 26.4 et 62 avec la trame d'exemple de l'énoncé.
Appel professeur
À demander au candidat
- Que renvoie
int('010010001100', 2)? Détaillez le calcul de la température. - Pourquoi l'humidité ne se lit-elle pas comme un nombre binaire ordinaire ? Que donnerait
int('01100010', 2)? - Ces méthodes ne renvoient rien. Comment le résultat devient-il accessible ?
BCD : chaque quartet est un chiffre décimal, il faut convertir les deux quartets séparément, sans oublier le cas 100 %.
Résultats attendus
- Trame d'exemple
- ID 42, 26,4 °C, 62 %
Question 2Vérifier la parité
Écrire la méthode est_valide(self) qui renvoie True si les 4 bits de contrôle correspondent bien à la parité des 4 blocs de données, et False sinon. Elle se trouve dans la classe, ci-dessus.
Appel professeur
À demander au candidat
- Comment calculez-vous le bit de parité d'un bloc ? Que vaut-il pour
00101010? - Une trame dont deux bits du même bloc sont inversés passe-t-elle le contrôle ? Qu'en concluez-vous ?
Comparer des caractères avec des caractères : trame[36 + i] est une chaîne, pas un entier.
Question 3Analyser les trames reçues
Le fichier data.txt contient une série de plus de 300 transmissions réelles. Dans le fichier analyse.py, une fonction d'analyse a été écrite pour automatiser le traitement et l'affichage des données valides. Exécuter le fichier analyse.py, identifier les erreurs qui pourraient survenir.
Appel professeur
À demander au candidat
- Combien de trames sont jugées valides avec le seul contrôle de parité ? Que montre le graphique ?
- Quelles trames du fichier sont anormales, et pourquoi certaines passent-elles le contrôle de parité ?
Le fichier contient deux trames de 41 bits et une de 38. Les deux de 41 bits passent la parité par hasard : l'une donne une humidité de 114 %.
Une trame valide en parité affiche −28,6 °C : c'est une erreur de mesure d'après l'énoncé.
Résultats attendus
- Trames reçues
- 314
- Valides, parité seule
- 310, de −28,6 à 36,7 °C
Question 4Un serveur robuste
Proposer des corrections de la classe Transmission permettant de la rendre plus robuste afin de pouvoir effectuer l'analyse et commenter l'affichage obtenu. La classe se trouve à la question 1 ; relancer ensuite la cellule analyse.py de la question 3.
Appel professeur
À demander au candidat
- Quels contrôles avez-vous ajoutés, et dans quel ordre ? Pourquoi vérifier la longueur en premier ?
- Où placer ces contrôles : dans
est_valide, dans le constructeur, dansanalyse.py? Défendez votre choix. - Commentez le graphique obtenu après correction.
Trois défauts à écarter : longueur différente de 40, humidité dont un quartet dépasse 9, température inférieure à −10 °C.
Résultats attendus
- Valides après correction
- 307, de 22,7 à 34,2 °C
Le fichier du candidat
Le jour de l'épreuve, le candidat travaille dans plusieurs fichiers. Chaque bouton rassemble les cellules d'un fichier, telles qu'elles sont à l'écran, à ouvrir dans votre éditeur habituel.