Vous êtes sur la page 1sur 7

Étudiant: Dhai Eddine Zebbiche (SIQ3) Enseignant: Mr.

Abdenour Sehad
TP: Système IoT complet avec utilisation d’une plateforme IoT Module: SCI

1 Partie théorique
a Introduction à NodeRed
Node-RED est un outil de développement de programmation visuelle basé sur les flux qui connecte les
périphériques matériels, les API et les services en ligne dans le cadre de l’Internet des objets.
Node-RED fournit un éditeur de flux basé sur un navigateur Web qui peut être utilisé pour créer
des fonctions JavaScript. Les éléments d’application peuvent être enregistrés ou partagés pour être
réutilisés. Le runtime est construit sur Node.js. Les flux créés dans Node-RED sont stockés dans JSON.
Les nœuds MQTT peuvent établir des connexions TLS correctement configurées.

b Etude théorique sur le protocole MQTT et son utilisation


MQTT signifie Message Queuing Telemetry Transport. Il s’agit d’un protocole de messagerie de
publication-abonnement très léger. Ce protocole est utile pour les régions éloignées où la bande passante
de connexion est très bonne. Cette nature le rend avantageux dans une variété de situations, y compris
des environnements stables tels que la communication d’appareil à appareil et Internet.
Le courtier MQTT est au centre de chaque protocole de publication/abonnement. Il est basé sur la
mise en œuvre qu’un courtier peut gérer jusqu’à des milliers de clients MQTT connectés simultanément.
Le courtier est responsable de la réception de tous les messages, du filtrage des messages, du choix des
abonnés pour chaque message et de la livraison des messages à ces clients abonnés. Le courtier gère
également les sessions pour tous les utilisateurs persistants, tels que les abonnements et les messages
manqués.
Les protocoles de messagerie asynchrone découplent les expéditeurs et les destinataires de messages
de manière régionale et temporelle, et sont donc évolutifs dans des environnements de réseau non fiables.
MQTT est généré pour collecter des informations à partir d’un outil, puis transmettre ces informa-
tions au cadre informatique. Il est léger et idéal pour la surveillance isolée, en particulier dans les liens
M2M qui nécessitent une petite empreinte de code ou une bande passante réseau définie.
Ces capacités le rendent avantageux dans une variété de situations impliquant des environnements
constants, y compris la connectivité de machine à machine et les contextes IoT.
Il s’agit d’un système de publication et d’abonnement où il peut publier et recevoir des messages
en tant qu’utilisateur. Il simplifie la communication entre plusieurs appareils. Il s’agit d’un protocole
de messagerie simple créé pour les appareils contraints à faible bande passante. C’est donc la bonne
solution pour les applications IoT.
Dans MQTT, l’abonné et l’éditeur sont deux comportements du client. Les clients s’abonnent à des
rubriques pour publier et recevoir des messages. On peut dire que si un programme ou un appareil
utilise MQTT, l’appareil est défini comme client.
Si un équipement ouvre le réseau lié au serveur, publie des messages que différents clients ont besoin
de consulter, s’abonne aux messages qu’il participe à recevoir, se désabonne des messages qu’il ne
participe pas à recevoir et arrête le réseau, alors c’est un client lié au serveur.
Dhai Eddine Zebbiche 2

La norme représente également trois types de messages, tels que Connecter, Déconnecter et Publier.
Les messages de type Connect sont envoyés par le client au médiateur, et les messages de type Disconnect
sont des vérifications de "fin de session" envoyées par la médiation au client connecté.
Le type de message de publication commence par le client et envoie les informations au courtier de
messages. Ce schéma de message est également transmis au client lors du transfert de données.

2 Partie pratique
a Installation
• Il faut installer Node-red (préférablement sur Raspberry Pi): Node-Red Running on Raspberry Pi

• Il faut installer le broker Mosquitto: Install Mosquitto MQTT Broker on Raspberry Pi

• Il faut installer les noeuds des widgets graphiques: A set of dashboard nodes for Node-RED

b Capter des données à travers au moins deux capteurs


Après l’installation, on lance node-red avec la commande: $ node-red, et normalement le broker
mosquitto lance automatiquement en tant que service.
On accède à travers l’URL https://localhost:1880/ pour configurer le flow des noeuds. (le flow
complet qu’on a utilisée est en pièce-jointe).
Circuit réalisée:

On a utilisée donc deux capteurs (lumière et pression).

Code Arduino à exécuter:


1 #include <ArduinoMqttClient.h>
2 #include <WiFiNINA.h>
3
4 char ssid[] = "SSID_WIFI";
5 char pass[] = "MOT_DE_PASSE";
6 int sensorPinLight = A1;
7 int sensorPinForce = A2;

Système IoT complet avec utilisation de MQTT et NodeRed


Dhai Eddine Zebbiche 3

8 int sensorValue = 0;
9
10 WiFiClient wifiClient;
11 MqttClient mqttClient(wifiClient);
12
13 const char broker[] = "ADRESSE_IP_BROKER"; // adresse IP de la machine executant le broker
14 int port = 1883;
15 const char light[] = "light";
16 const char force[] = "force";
17
18 void setup() {
19 Serial.begin(9600);
20 while (!Serial) ;
21 Serial.println("Attempting to connect to WPA SSID: ");
22 Serial.println(ssid);
23 while (WiFi.begin(ssid, pass) != WL_CONNECTED) {
24 Serial.print(".");
25 delay(1000);
26 }
27 Serial.println("You're connected to the network");
28 Serial.println();
29 Serial.print("Attempting to connect to the MQTT broker: ");
30 Serial.println(broker);
31 if (!mqttClient.connect(broker, port)) {
32 Serial.print("MQTT connection failed! Error code = ");
33 Serial.println(mqttClient.connectError());
34 while (1);
35 }
36 Serial.println("You're connected to the MQTT broker!");
37 Serial.println();
38 }
39
40 void loop() {
41 mqttClient.poll();
42
43 sensorValue = analogRead(sensorPinLight);
44 Serial.println("Sending message to topic: light");
45 Serial.println(sensorValue);
46 mqttClient.beginMessage(light);
47 mqttClient.print(sensorValue);
48 mqttClient.endMessage();
49
50 sensorValue = analogRead(sensorPinForce);
51 Serial.println("Sending message to topic: force");
52 Serial.println(sensorValue);
53 mqttClient.beginMessage(force);
54 mqttClient.print(sensorValue);
55 mqttClient.endMessage();
56
57 delay(1000);
58 }

On crée deux topics "light" et "force". L’arduino dans ce cas joue le rôle du Publiquateur, les
noeuds node-red joue le rôle des Souscripteurs. Donc on peut contrôler par la suite une LED connecter
à Raspberry Pi qui l’allume où l’éteint relativement a une seuil de lumière. On a crée même des noeuds
pour injecte des valeurs (0 ou 1) pour changer l’état de la LED.
Résultat: (sur l’URL https://localhost:1880/ui affichant le dashboard)

Système IoT complet avec utilisation de MQTT et NodeRed


Dhai Eddine Zebbiche 4

Système IoT complet avec utilisation de MQTT et NodeRed


Dhai Eddine Zebbiche 5

c Utilisation d’un broker et affichage des valeurs sur une plateforme


On va ajouter dans cet partie un nouveau topic "led", les noeuds sur node-red joue le rôle des
publiquateurs (en utilisant un bouton poussoir, ou à travers un widget graphique, on envoie une donnée).
l’arduino joue le rôle du Souscripteur et reçoit les données du topic "led".
Circuit réalisée:

Code Arduino à exécuter:


1 #include <ArduinoMqttClient.h>
2 #include <WiFiNINA.h>
3
4 char ssid[] = "SSID_WIFI";
5 char pass[] = "MOT_DE_PASSE";
6 int sensorPinLight = A1;

Système IoT complet avec utilisation de MQTT et NodeRed


Dhai Eddine Zebbiche 6

7 int sensorPinForce = A2;


8 int pinLED = 1;
9 int sensorValue = 0;
10
11 WiFiClient wifiClient;
12 MqttClient mqttClient(wifiClient);
13
14 const char broker[] = "IP_BROKER";
15 int port = 1883;
16 const char light[] = "light";
17 const char force[] = "force";
18 const char led[] = "led";
19
20 void setup() {
21 Serial.begin(9600);
22 while (!Serial) ;
23
24 pinMode(sensorPinLight, INPUT);
25 pinMode(sensorPinForce, INPUT);
26 pinMode(pinLED, OUTPUT);
27
28 Serial.println("Attempting to connect to WPA SSID: ");
29 Serial.println(ssid);
30 while (WiFi.begin(ssid, pass) != WL_CONNECTED) {
31 Serial.print(".");
32 delay(1000);
33 }
34
35 Serial.println("You're connected to the network");
36 Serial.println();
37
38 Serial.print("Attempting to connect to the MQTT broker: ");
39 Serial.println(broker);
40
41 if (!mqttClient.connect(broker, port)) {
42 Serial.print("MQTT connection failed! Error code = ");
43 Serial.println(mqttClient.connectError());
44 while (1);
45 }
46
47 Serial.println("You're connected to the MQTT broker!");
48 Serial.println();
49
50 mqttClient.subscribe(led);
51 }
52
53 void loop() {
54 mqttClient.poll();
55
56 sensorValue = analogRead(sensorPinLight);
57 Serial.println("Sending message to topic: light");
58 Serial.println(sensorValue);
59 mqttClient.beginMessage(light);
60 mqttClient.print(sensorValue);
61 mqttClient.endMessage();
62
63 sensorValue = analogRead(sensorPinForce);
64 Serial.println("Sending message to topic: force");
65 Serial.println(sensorValue);
66 mqttClient.beginMessage(force);
67 mqttClient.print(sensorValue);
68 mqttClient.endMessage();

Système IoT complet avec utilisation de MQTT et NodeRed


Dhai Eddine Zebbiche 7

69
70 while (mqttClient.available()) {
71 if ((char)mqttClient.read() - '0')
72 digitalWrite(pinLED, HIGH);
73 else
74 digitalWrite(pinLED, LOW);
75 }
76
77 delay(1000);
78 }

On peut donc allumer et éteindre la LED connecter à Arduino avec le dashboard des widgets
graphique, ou avec le bouton poussoir connectée à Raspberry Pi.

Système IoT complet avec utilisation de MQTT et NodeRed

Vous aimerez peut-être aussi