SCIENCES DE L'INGENIEUR

Niveau : Terminale générale, enseignement de spécialité SI

D
É
C
O
N
N
E
C
T
É

TP : L'Internet des Objets (IOT)

iot

1 - Objectif :

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

2 - Cahier des charges

  1. Un microcontrôleur EPS32 se chargera de relever la température et la transmettre sans fil à un serveur
  2. L'autonomie du microcontrôleur ESP32 devra être d'une semaine au moins
  3. Les données reçues par le serveur, seront stockées dans une base de données comme suit :
    • Une table "A004" comprendra les champs suivants :
        • num : un numéro unique d'enregistrement (Type : INTEGER, clé primaire : CP, auto-incrémenté : IA)
        • date : la date et l'heure sous la forme YYYY/MM/JJ-HH:MM:SS (Type : TEXT)
        • valeur : la valeur de la température au dixième de degré (Type TEXT)
  4. La portée de transmission sera inférieure à 50 mètres.
  5. Les données seront transmises en utilisant le protocole UDP

3 - Protocole UDP

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

Trame Ethernet II

Trame Ethernet

Trame UDP

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 ...

4 - Mise en oeuvre

On dispose :

Configuration du serveur : le PC

Exécuter Edupython

Ouvrir l'outil permettant de créer une base de données en cliquant sur l'icône suivante : base

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:

Câblage du capteur :

  • Relier la broche VCC du capteur à la broche 3V3 de l'ESP32
  • Relier la broche GND du capteur à la broche GND de l'ESP32
  • Relier la broche SIG du capteur à la broche G34 de l'ESP32
  • Câblage

    Configuration du client : l'ESP32

    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 module ESP32 est-il en mesure de communiquer avec votre PC ? Justifiez votre réponse

    Capture de la trame UDP :

    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 :

    Dans l'entête IP vérifier le type de service : (ICMP = 1, TCP = 6, UDP = 17...).

    Convertir en décimal  :

    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.

    Enregistrement dans la base de données

    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.

    5 - Choix de la batterie

    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

    simulation

    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.

    Optimisation :

       

    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%

    tableau

    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.

    5 - Conclusion :

    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.

    mathlab

    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 :

    IOT

    Insérer les informations du partage wifi : nom de partage et mot de passe, dans l'onglet secrets.h

    secrets

    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 new

    channel

    Puis sauvegardez.

    Récupérez l'ID (1) et l'API key (2)

    ID-API

    Les inscrire dans les deux lignes du code secrets.h

    secret2

    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/

     
    Fond : Texte : Tables :