Vous êtes sur la page 1sur 4

Ministère de l’Enseignement Supérieur

et de la Recherche Scientifique ‫وزارة التعليـم العاليوالبحث العلمي‬


Université de Carthage
‫جامعـة قرطاج‬
‫المدرسـة الوطنية للمهندسين بقرطاج‬
Ecole Nationale d’Ingénieurs de Carthage
Année universitaire 2021-2022
Devoir Surveillé
Matière : IoT & Réseaux de capteurs

Enseignants : Faten BEN ABDALLAH & Imen BOUABIDI Date : 02 /11/2021


ème
Filière / Classe :3 Ingénieur Infotronique Durée : 1h30
Nbre. de pages : 4 (pages 3 et 4 à rendre avec la feuille d’examen) Documents : aut. / non aut.

Exercice 1
1. Quel est le rôle principal de la passerelle (gateway) dans une solution IoT ? (1 pt)
2. Dans une architecture IoT, trois solutions possibles pour le déploiement des services, permettent
d’alléger la charge du travail vers le Cloud et de faire des traitements locaux: Fog computing,
Edge computing et Mist computing
- Expliquer la différence entre ses différentes techniques de déploiement des services. (1.5 pts)
- Donner les avantages de chacune de ses solutions. (1.5 pts)
3. Dans une solution IoT, les protocoles de la couche application permettent aux objets connectés
d’envoyer leurs données à un serveur Web Internet ou une plateforme Cloud et de transmettre des
commandes depuis les applications utilisateurs aux actionneurs des objets connectés. Les
protocoles REST et COAP en font parties.
- Quel est le point commun entre ces 2 protocoles ? (0.75 pt)
- Quelle sont les différences majeures entre ces 2 protocoles ? (0.75 pt)
4. Qu’est ce qu’un Broker MQTT et quel est son rôle dans une solution IoT déployant le protocole
MQTT ? (1.5 pts)
5. Pour la mise en œuvre d’une application IoT, le choix de la technologie de communication
permettant aux nœuds de transmettre les données collectées est crucial.
En vous appuyant sur les trois critères de choix : La portée, le débit et la consommation
énergétique, donner le type de réseau (PAN, LAN ou WAN) le plus adéquat pour les applications
IoT suivantes, préciser la technologie choisie (Ex :Zigbee, Wifi, Lora...) et justifier votre choix :
a. T-hirt intelligent capable d’envoyer vers un serveur cloud la fréquence cardiaque d’un
individu (plus spécifiquement un athlète), son emplacement GPS, son itinéraire, sa
vitesse, son altitude etc.…; (1 pt)
b. Parking intelligent permettant de fournir aux conducteurs des informations en temps réel
sur les places de parking disponibles les plus proches et leur prix ; (1 pt)
c. Une société en charge de la gestion des déchets d’une ville (un rayon de 12 km) veut
connaître le niveau de remplissage des bennes pour optimiser les tournées de ses camions :
une benne pleine sera privilégiée à une benne qui n'est pas encore pleine. (1 pt)

1
Exercice 2 (10 pts)
Pour la production de certains types de fromage, c’est grâce à l’étape d’affinage (le moment où le
fromage mature en dépôt) que le fromage peut développer son goût, son odeur ainsi que sa texture unique.
Parmi les conditions primordiales à cette étape, avoir un niveau de luminosité fixe dans la cave.
Un producteur de fromage possédant plusieurs dépôts de fromages dans des villes différentes a besoin de
superviser en temps réel (des dashboards) les niveaux de luminosité de ses caves. On se propose de mettre
en œuvre une solution IOT de contrôle à distance de la luminosité d’un établissement en utilisant le
protocole MQTT et via le serveur cloud Ubidots. La figure suivante explicite cette solution:

- Le Nœud IoT est représenté par un MCU Node ESP8266 relié à un capteur de Luminosité le
GA1A12S202. Ce capteur est un LDR (Light Dependent Resistor) basé sur une résistance
photosensible et fournit une sortie analogique qui sera branchée à la Pin A0 du MCU Node.
- La valeur U de la tension analogique (en Volt) fournie par cette entrée est interprétée en intensité
lumineuse Lum en Lux par la relation suivante : Lum= (U/3472)10 (Equation 1)
- Le nœud IoT publie (publish) au broker MQTT (logé au serveur cloud Ubidots) via le protocole
MQTT la valeur de la luminosité de la salle en Lux au topic : /contrôle/Luminosité
- Le serveur cloud se souscrit (subsribe) au même topic (/contrôle/Luminosité) via le broker MQTT et
permet de contrôler la luminosité de la Led à travers une sortie analogique la Pin D6 du MCU Node.
- La relation entre la tension à fournir à la LED et son intensité lumineuse en Lux est régie par la même
Equation 1.
- Le serveur cloud contrôlera la luminosité de la LED selon la valeur de la luminosité du dépôt mesurée
par le capteur GA1A12S202. Il devra maintenir une luminosité de 1000 Lux dans le dépôt. Par
exemple si la luminosité détectée dans la salle est de 300 Lux, la LED doit fournir 700 Lux.
- Les prototypes des fonctions permettant de lire/écrire de/sur une entrée/sortie analogique sont:
int analogRead(uint8_t pin)
void analogWrite(uint8_t pin, int outValue)

2
Nom : Prénom : Classe :

Compléter le code C donné aux pages 3 et 4 (à rendre avec la feuille d’examen) afin de mettre en œuvre
cette solution IOT de contrôle à distance de la luminosité d’un dépôt en utilisant le protocole MQTT et
via le serveur cloud Ubidots.
#include <PubSubClient.h>
#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#include <stdio.h>
/**************************************** * Define Constants ****************************************/
#define WIFISSID "ENICARTHAGE-E12"
#define PASSWORD "enicarthage.rnu.tn"
#define TOKEN "BBFF-XTDqgv2kVyH7trY3Th9RLTVCMP9sgk"
#define VARIABLE_LABEL "................" // Donner la variable label
#define DEVICE_LABEL "......................" // Donner le device label
#define MQTT_CLIENT_NAME "12654879336"
char mqttBroker[] = "things.ubidots.com";
char payload[700];// char topic[150];
// Rajouter les variables nécessaires à votre code içi

/**************************************** * Initializate constructors for objects****************************************/

ESP8266WiFiMulti WiFiMulti;
WiFiClient ubidots;
PubSubClient client(ubidots);

/**************************************** * Auxiliar Functions ****************************************/

float getFloat(byte packet[], int i)


{
float out;
memcpy(&out, &packet[i], sizeof(float));
return out;
}
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Message arrived [");
Serial.print(topic);
Serial.print("] ");
for (int i=0;i<length;i++) {
Serial.print((char)payload[i]);
}

//Rajouter votre code içi

Serial.println();
}

3
NE RIEN ECRIRE ICI
-
void reconnect() { // Loop until we're reconnected
while (!client.connected()) {
Serial.println("Attempting MQTT connection..."); // Attempt to connect
if (client.connect(MQTT_CLIENT_NAME, TOKEN,"")) {
Serial.println("connected");
}
delay(2000); } }
/**************************************** * Main Functions****************************************/

void setup() {
Serial.begin(115200);
// Préciser les pins modes

WiFiMulti.addAP(WIFISSID, PASSWORD);
Serial.println();
Serial.print("Wait for WiFi... ");
while(WiFiMulti.run() != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
client.setServer(mqttBroker, 1883);
client.setCallback(callback);
}

void loop() {
if (!client.connected()) {
reconnect();
char topicToSubscribe[200];
sprintf(topicToSubscribe, "%s%s", "/v1.6/devices/", "........."); // donner le device à souscrire
sprintf(topicToSubscribe, "%s/%s/lv", topicToSubscribe, "........."); // donner la variable à souscrire
client.subscribe(topicToSubscribe);
}
//Rajouter votre code içi

sprintf(topic, "%s%s", "/v1.6/devices/", DEVICE_LABEL);


sprintf(payload, "{\"%s\":", VARIABLE_LABEL );
sprintf(payload, "%s {\"value\": %s", payload, ...............); // donner la valeur à publier
sprintf(payload, "%s } }", payload);
client.publish(topic, payload);
client.loop();
delay(2000);
}

Vous aimerez peut-être aussi