Niveau : Terminale générale, enseignement de spécialité SI
On souhaite relever la température de la salle de cours du lycée et de l'enregistrer afin de pouvoir exploiter les données plus tard, afin d'optimizer le chauffage et de faire des économies d'énergie
Que signifie UDP ?
Pour transmettre les données du microcontrôleur vers le serveur, l'ESP32 devra connaître l'adresse IP.
Les données transitent par un port. Un port s'apparente à une porte par laquelle passent les données. Il est désigné par un entier compris entre 0 et 65535
La trame UDP est encapsulée dans le paquet Data de la trame Ethernet II
Un transfert UDP est caractérisé par :
Entête Ethernet II | |||||||
---|---|---|---|---|---|---|---|
adresse mac destination (6 octets) |
adresse mac source (6 octets) |
type de paquet (2 octets) |
|||||
Entête IP | |||||||
version
(4 bits) |
longueur
Entête (4 bits) |
type
de service (8 bits) |
longueur
totale du datagramme (16 bits) |
||||
Identification (16 bits) |
drapeaux (8 bits) |
Décalage
de fragment ( 8 bits) |
|||||
Durée
de vie (8 bits) |
Protocole (8 bits) |
contrôle
des entêtes (16 bits) |
|||||
Adresse
IP Source (32 bits) |
|||||||
Adresse
IP destination (32 bits) |
|||||||
User Datagram Protocole (UDP encapsulée) | |||||||
Port
source (16 bits) |
Port
destination (16 bits) |
||||||
Longueur
totale du datagramme (16 bits) |
Checksum (16 bits) |
||||||
Données | Données | ||||||
Données | ... |
On dispose :
Exécuter Edupython
Ouvrir l'outil permettant de créer une base de données en cliquant sur l'icône suivante :
Créer une nouvelle base de données "lavoisier.db" que vous sauvegardez dans un dossier dans vos documents.
Ajouter une table A004 et ajoutez les 3 champs indiqués dans le cahier des charges
Connectez le PC au réseau Wifi Netgear
Exécuter le programme "Windows PowerShell" et tapez la commande "ipconfig /all" et relevez les informations de la connexion Wifi:
l'adresse physique (MAC) :
l'adresse IP :
le masque de sous réseau :
Exécutez le programme Thonny Python
Branchez l'ESP32 au port USB du PC, puis dans le menu Outils, port, sélectionner le port COM sur lequel l'Esp32 est branché.
Dans le menu outil, cliquer sur option, puis sélectionner l'onglet interpréteur, Sélectionner l'interpréteur MicroPython (ESP32).
Exécuter Thonny Python en mode ESP32, copier/coller le code python ci-dessous après avoir remplacé les ? pour faire fonctionner le programme.
Depuis la console Thonny Python relevez :
le masque de sous réseau :
Le module ESP32 est-il en mesure de communiquer avec votre PC ? Justifiez votre réponse
Exécuter le logiciel Wireshark et capturez les trames Ethernet de votre carte "Wi-Fi".
Sélectionnez la ligne du protocole UDP et remplir le tableau ci-dessous :
Entête Ethernet II | |||||||
---|---|---|---|---|---|---|---|
adresse mac destination (6 octets) |
adresse mac source (6) |
type de paquet (2) |
|||||
Entête IP | |||||||
version
(½) |
longueur
Entête (½) |
type
de service (1) |
longueur
totale du datagramme (2) |
||||
Identification
(2) |
drapeaux
(1) |
Décalage
(1) |
|||||
Durée
de vie (1) |
Protocole
(1) |
contrôle
des entêtes (2) |
|||||
Adresse
IP Source (4) |
|||||||
Adresse
IP destination (4) |
|||||||
User Datagram Protocole (UDP encapsulée) | |||||||
Port source (2) | Port destination (2) | ||||||
Longueur
totale du datagramme (2) |
Checksum
(2) |
||||||
Données (1 / 1) / | Données (1 / 1) / | ||||||
Données (1) |
Dans quelle base de numération sont encodés les octets de la trame ?
Comparez les adresses mac et identifiez qui du PC et de l'ESP32 est la source et la destination :
Source :
Destination :
Dans l'entête IP vérifier le type de service : (ICMP = 1, TCP = 6, UDP = 17...).
Convertir en décimal :
Le port source :
L'adresse IP source :
Quel code est utilisé pour transmettre les données ?
De combien d'octets en tout est composée la trame Ethernet ?
Le débit théorique maximal de transmission est de 54 Mb/s. Calculer le temps qu'il faudra pour transmettre la trame de l'ESP32 vers l'ordinateur.
Copier/coller le script suivant après avoir remplacé les ? :
Exécuter le script python
Ouvrir la base de données lavoisier.db depuis Edupython avec DB Browser for SQLite
Cliquez sur l'onglet parcourir les données dans DB Browser for SQLite, rafraîchir les données si nécessaire et vérifier la présence d'une nouvelle donnée toutes les 10s.
La documentation constructeur donne les caractéristiques suivantes :
Tension d'alimentation | 3.0 à 3.6V |
Courant moyen absorbé | 80 mA |
Calculer la capacité en mAh pour une semaine de fonctionnement.
Afin de garder de la marge et éviter de trop décharger la batterie, Calculer la capacité de la batterie en appliquant un coefficient de 1.2 (+20%).
On dispose de batteries NiMh de 1.2V et 8.0Ah. Comment faut-il associer les batteries pour former le pack
Simuler l'autonomie du pack en s'inspirant du schéma suivant
Simuler pour une durée de 10 jours pour atteindre la décharge compète de la batterie.
Relever la capacité restante au bout de 7 jours ?
On remarque que la tension de la batterie reste au-dessus des 3,6V il faudrait donc utiliser un régulateur permettant de réguler cette tension à 3,3V par exemple, afin de respecter les préconisations d'alimentation de l'ESP32.
Ajouter une donnée toutes des 10s n'est pas nécessaire, on peut se contenter de le faire toutes les 5 minutes par exemple.
il est possible de faire rentrer l'ESP32 en sommeil profond (deep sleep mode) pendant 5 minutes au lieu d'attendre avec un delay. Lors de son réveil programmé, il va redémarrer le programme complètement.
Il suffit de remplacer la ligne time.sleep(...)
par machine.deepsleep(sleep_time_ms)
.
Durant la phase de sommeil profond, le courant circulant dans la puce est de 10 µA
La phase de boot et de reconnexion au wifi dure en moyenne 10 secondes et le courant moyen est de 210 mA
Calculer le courant moyen en tenant compte de la durée des 2 phases et en déduire la capacité de la batterie nécessaire pour une autonomie de 7 jours en tenant compte du coefficient de 20%
D'après le tableau ci dessus, quelle serait les technologies permettant d'augmenter encore l'autonomie tout en respectant la distance imposée par le cahier des charges.
Nous avons travaillé sur un réseau local avec le protocole UDP qui simplifie l'envoi des données.
Lorsque le PC n'est plus connecté, les paquets envoyés seront perdus.
L'IOT (Internet Of Things) passe par des bases de données accessibles sur Internet, afin que les données soit toujours disponibles, puisque les serveurs fonctionnent 24h/24.
Il existe des sites Internet gratuits comme https://thingspeak.com/ qui permet de stocker nos données. Ces données peuvent être consultées par vous ou par l'ESP32 à n'importe quel moment.
L'architecture réseau du lycée ne nous permet pas mettre en œuvre un TP basé sur ce principe. Il faudrait passer par un partage de connexion depuis votre Smartphone.
Un exemple simple est accessible depuis le logiciel Arduino :
Insérer les informations du partage wifi : nom de partage et mot de passe, dans l'onglet secrets.h
Se rendre sur le site https://thingspeak.com/
Créer un compte étudiant (student) confirmez la création du compte depuis votre boite mail
Connectez-vous au site internet
Créer une nouveau canal : cliquez sur Channel - My Channels et
Puis sauvegardez.
Récupérez l'ID (1) et l'API key (2)
Les inscrire dans les deux lignes du code secrets.h
Téléversez le programme et dans "My channels", cliquez sur "lavoisier" pour voir évoluer les données toutes les 20 secondes.
Il ne reste plus qu'à modifier le programme pour envoyer la température.
Si l'ESP32 était relié à une box, le programme pourrait envoyer en continu les données dans la base de manière autonome.
Exemple d'un site Internet qui traite les données des températures dans le monde, grâce à des stations météo connectés par des particuliers : https://weathermap.netatmo.com/
Contenu
sous
licence CC BY-NC-SA 3.0
Pascal Hassenforder 04/01/2020
Mise à jour du 05/07/2023