Institut Universitaire de Technologie, Aix-Marseille
Université
MEMOIRE
Diplôme Universitaire de
Technologie Spécialité Réseaux et
Télécommunications
Etude et réalisation d'une station
météorologique
sur Arduino
|
Raphaël BOURGEAY
2020
Responsable académique : Anouch HOVSEPIAN
DUT R&T - Mémoire 2020 - BOURGEAY Raphaël
Remerciements
Je tiens à remercier toutes les personnes qui ont
contribué à la réalisation de mon mémoire et qui
m'ont aidé à la rédaction.
Je voudrais dans un premier temps remercier, mon directeur de
mémoire Mme Anouch HOVSEPIAN, directrice des études de
2ème année et professeure
d'électronique, physique, télécoms et
mathématiques à l'IUT Réseaux et
Télécommunications de l'Université d'Aix-Marseille,
pour sa patience, sa disponibilité et surtout ses judicieux conseils,
qui ont contribué à alimenter ma réflexion.
Je désire aussi remercier les professeurs de
l'université d'Aix-Marseille, qui m'ont fourni les outils
nécessaires à la réussite de mes études
universitaires.
À tous ces intervenants, je présente mes
remerciements, mon respect et ma gratitude.
DUT R&T - Mémoire 2020 - BOURGEAY Raphaël
Résumé
Notre travail a pour objectif de proposer une solution
matérielle et logicielle intégrée, nous adoptons la
technologie d'IoT (Internet of Things) pour créer, fusionner du
matériel et différents périphériques
connectés pour développer une station météorologie
entièrement connectée grâce à un
microcontrôleur Arduino qui enverra les données captées
ainsi qu'un nano-ordinateur Raspberry qui traitera ces données
reçues pour les exploiter sous forme graphique.
La partie matérielle consiste à proposer et
réaliser un système de capteurs en utilisant un réseau
sans fil Wi-Fi (Wireless Fidelity) pour équiper la station. La
partie logicielle consiste à implémenter une application IoT,
sous une plateforme de gestion d'IoT pour le stockage, l'analyse et la
visualisation des données, pour contrôler et recevoir des
données à partir du système d'IoT à distance et en
temps réel sur une page web (World Wide Web). La solution
proposée utilise la plateforme Mosquitto (serveur MQTT Open Source)
ainsi que quelques protocoles de communications dédiés aux
systèmes d'IoT tels que MQTT (Message Queuing Telemetry
Transport) et le Wi-Fi. Nous visons cette catégorie de station
météorologique « maison » car le système de
cloud mis en place par Arduino nous est complètement
impénétrable, c'est-à-dire que l'on ne sait pas si nos
données sont utilisées dans un but statistique voire commercial.
De plus, les capacités sont limitées comme : 5
capteurs/actionneurs maximum utilisables, le temps de traitement est
limité à 200 secondes par jour (environ 10
téléversements du programme). Le but de notre projet est de
fournir un système connecté où les lumières peuvent
être pilotées et les capteurs consultés à distance.
La solution proposée utilise deux types de capteurs, capteur de
luminosité (photorésistance) et un potentiomètre et
s'appuie sur deux modes d'éclairage LED (Light-Emitting Diode
(diode électroluminescente en français)) : allumé ou
éteint.
Ce mémoire présente une méthode de
création de cloud sur un serveur personnel et devra être
réalisable en TP de quelques heures pour les étudiants.
Mots clés : Internet of Things, station
météorologique, protocoles de communication, plateformes de
gestion d'IoT, Smart Data.
DUT R&T - Mémoire 2020 - BOURGEAY Raphaël
Abstract
Our work aims to provide an integrated hardware and software
solution, we implement IoT (Internet of Things) technology to create, merge
hardware and various connected peripherals to develop a fully connected weather
station using an Arduino microcontroller that will send the data received and a
Raspberry nano computer that will process the data received to exploit it in
graphical form.
The hardware part consists of proposing and building a system
of sensors using a Wi-Fi (Wireless Fidelity) network to equip the station. The
software part consists in implementing an IoT application, under an IoT
management platform for data storage, analysis, and visualization, to control
and receive data from the IoT system remotely and in real time on a web page.
The proposed solution uses the Mosquitto platform (Open Source MQTT server) and
some communication protocols dedicated to IoT systems such as MQTT (Message
Queuing Telemetry Transport) and Wi-Fi. We are targeting this category of
"home-made" weather station because the cloud system set up by Arduino is
entirely impenetrable to us, i.e. we do not know whether our data is used for
statistical or even commercial purposes. Moreover, the capacities are limited
such as: 5 sensors/actuators maximum usable, the processing time is limited to
200 seconds per day (about 10 uploads of the program). The goal of our project
is to provide a connected system where the lights can be controlled, and the
sensors can be remotely consulted. The proposed solution uses two types of
sensors, a brightness sensor and a potentiometer and relies on two LED
(Light-Emitting Diode) lighting modes: on or off. This thesis presents a method
for creating a cloud on a personal server and should be feasible in a few hours
of practical work for the students.
Keywords: Internet of Things, weather station, communication
protocols, IoT management platforms, Smart Data.
DUT R&T - Mémoire 2020 - BOURGEAY Raphaël
Table des matières
1 Introduction 1
2 Histoire 3
3 Problématique 4
4 Etat de l'art 4
5 Objets connectés 4
5.1 Liaison à un cloud 4
5.1.1 Le cloud privé 5
5.1.2 Le cloud public 5
5.1.3 Le cloud hybride 6
5.2 Fonctionnement de cloud spécial IoT 6
5.3 Domaines d'application 6
6 Arduino 7
6.1 Présentation, caractéristiques, packs, cartes
7
6.2 Application, langage, broches 9
7 Cloud libre avec MQTT 11
7.1 Historique 11
7.2 Accès aux données avec le modèle pub/sub
12
7.2.1 Evolutivité 13
7.2.2 Sécurité 14
7.2.3 Difficultés 14
7.2.4 Applications 14
7.3 Topics MQTT 14
7.4 Qualité de service 15
7.5 Exploitation de données 16
8 Conception de la station météorologique 17
8.1 Choix des éléments matériels 17
8.1.1 Carte Arduino 17
8.1.2 Capteur de lumière 17
8.1.3 Potentiomètre 18
8.2 Arduino IDE 19
8.3 Configuration routeur internet 19
9 Problèmes rencontrés 20
10 Conclusion générale 21
11 Bibliographie / sources 23
12 Tutoriel 24
DUT R&T - Mémoire 2020 - BOURGEAY Raphaël
DUT R&T - Mémoire 2020 - BOURGEAY Raphaël
DUT R&T - Mémoire 2020 - BOURGEAY Raphaël 1
1 Introduction
Aujourd'hui, l'électronique intervient dans le
quotidien de tous, les systèmes sont de plus en plus
sophistiqués, petits et puissants.
La météorologie est souvent au coeur de nos
discussions, pour certains elle nécessaire à la planification de
certaines activités, pour d'autres elle est une passion. Les conditions
climatiques changeant sans cesse, la météorologie était
considérée comme une science incertaine durant des années.
Aujourd'hui, la transmission radio d'informations collectées à
tous les endroits du monde (stations, navires et satellites
météorologiques) peut fournir des prévisions plus
fiables.
Le « Cloud computing » traduit de l'anglais «
informatique en nuage » n'est pas une nouvelle technologie, mais une
nouvelle méthode informatique, qui contient de nombreuses idées
difficiles à maîtriser. En février 2011, le groupe IPSOS
(société française de sondage et société
internationale de marketing d'opinion) s'est associée à Microsoft
pour soulever des questions sur ce problème auprès de plusieurs
sociétés. Observation : 82% des TPE-PME (Très Petite
Entreprise - Petite et Moyenne Entreprise) ne peuvent pas définir avec
précision le concept de cloud computing, et 52% d'entre elles ont
déjà utilisé des solutions de type cloud.
De manière générale, on peut assimiler le
« Cloud Computing » à un regroupement de ressources
informatiques exploitées, à distance et à la demande, par
de nombreux clients externes, sous forme de services à la consommation.
Les traitements informatiques ne sont donc plus réalisés sur le
poste utilisateur ou sur un serveur interne mais déportés dans un
centre de données virtuelles maintenues par le prestataire de service
Cloud. L'objectif étant de réduire la complexité de
l'informatique.
Cette technologie existe dans nos vies et nous
émerveillera par la qualité et par la rapidité de son
évolution. Elle améliore nos vies grâce à la
quantité d'informations accessibles à tous, elle informe tout ce
qui se passe dans le monde, elle peut guider les décisions et faciliter
la mise à jour. La technologie apporte d'énormes avantages
à tout le monde. Ces dernières années, la technologie a
réagi dans divers domaines et a inévitablement un impact sur la
vie quotidienne. Afin de faciliter la vie et d'éliminer les dilemmes qui
entourent les êtres humains, il existe toujours plusieurs technologies
pour garantir qu'une de ces technologies existe : l'Internet des objets (IoT).
L'Internet des objets représente l'expansion d'Internet aux objets et
aux lieux du
DUT R&T - Mémoire 2020 - BOURGEAY Raphaël 2
monde physique. Bien qu'Internet ne dépasse
généralement pas le monde électronique, l'Internet
connecté représente l'échange d'informations et de
données d'appareils dans le monde réel vers Internet.
De nos jours, l'Internet des objets devient un sujet
intéressant, qui concerne divers domaines tels que l'agriculture, les
soins de santé, les villes intelligentes, l'énergie intelligente,
etc. Et a ouvert une nouvelle source d'innovation technologique presque
inépuisable, qui est également très précieuse pour
de nombreuses industries. La technologie de l'Internet des objets facilite la
connexion de divers objets au réseau et le développement
d'applications pour contrôler et gérer des objets. Toute la
complexité de la tâche de connexion est confiée à la
plateforme IoT. Par conséquent, la plate-forme de gestion du
système Internet des objets fournit d'autres fonctions, telles que
l'analyse, la visualisation et le stockage des données. La
définition de la plate-forme IoT varie selon l'auteur. Par exemple, la
plate-forme IoT peut être définie, de cette façon : les
objets peuvent être connectés au système informatique tout
en assurant l'authentification et la sécurité des objets
connectés, mais aussi gérer les données et les commandes
pour envoyer et recevoir, collecter, visualiser et analyser les données
et l'intégrer à d'autres services Web.
DUT R&T - Mémoire 2020 - BOURGEAY Raphaël 3
2 Histoire
Les premières mesures de la température à
la surface du globe ont démarré en 1856, lorsque la
société météorologique britannique a
commencé à rassembler des données de 24 stations
réparties dans le monde. Afin de comprendre la température avant
cette date, les scientifiques ont développé des méthodes
de mesure "indirectes" à partir de données collectées dans
le milieu naturel (événements historiques, anneaux annuels,
coraux, glace, palynologie).
En utilisant ces techniques "indirectes", les
températures peuvent être reconstruites pendant des centaines de
milliers d'années, et le thermomètre à air ou
thermomètre de Santora Santo Rio (1561-1636) a été le
premier appareil à mesurer la température. L'appareil n'a que
trois échelles : la température de l'air refroidi par la neige,
la température de l'air chauffé par la flamme de la bougie et le
point médian.
Début du XVIIIe siècle : Daniel Fahrenheit est
l'auteur de la plus ancienne échelle de températures encore en
usage aujourd'hui. Il fixe la température du mélange d'eau, de
glace, de sel marin et de sel d'ammoniaque à 0 °, fixe la
température du mélange d'eau et de glace à 32 ° et
fixe la température du corps à 100 ° à l'image d'une
personne légèrement fiévreuse.
À la fin du XVIIIe siècle : invente le
thermomètre bimétallique et le thermomètre enregistreur
à tube de Bourdon qui utilisent la déformation thermique du
métal, également appelé enregistreur de
température. Un imageur thermique est un instrument de mesure
composé de stylet qui peut enregistrer mécaniquement les
changements de température sur un graphique.
Aujourd'hui, il existe des stations
météorologiques numériques qui peuvent mieux mesurer et
signaler des informations afin qu'elles soient faciles à voir et
à comprendre. Certaines stations météorologiques peuvent
même se connecter à des applications de téléphones
intelligents ou à des services en ligne afin que des personnes puissent
accéder à leurs informations météorologiques de
n'importe où. Les observateurs météorologiques modernes
peuvent utiliser ces informations pour gérer leurs jardins, surveiller
leurs fermes. Les stations météorologiques numériques ont
tendance à être plus précises et plus faciles à
utiliser.
DUT R&T - Mémoire 2020 - BOURGEAY Raphaël 4
3 Problématique
Aujourd'hui le monde tourne autour des objets
connectés, pour répondre au besoin de l'utilisateur qui cherche
à obtenir le bon service au bon moment et au bon endroit, on pense qu'il
existe plusieurs défis à la mise en oeuvre réussie de
l'IoT. En tant qu'étudiant, notre souci est d'arriver à combiner
le monde réel et le monde virtuel, autrement dit, de travailler sur la
standardisation de ce nouveau système en développant de nouvelles
applications et de nouveaux environnements ainsi que de nouveaux protocoles de
communication.
Comment construire une station météorologique en
déjouant le système Arduino IoT Cloud ?
4 Etat de l'art
L'IoT et la technologie Web sont les outils majeurs de la
nouvelle ère de transformation digitale. À travers l'IoT, nous
recherchons le potentiel des nouvelles technologies et leurs impacts dans
l'amélioration continue du monde réel. Il est important de
dresser un état de l'art retranscrivant les divers travaux
déjà réalisés par nos prédécesseurs
pour apporter ou même lever le voile sur des solutions qui, de prime
abord, ne paraitraient pas aussi évidentes quant à notre
problématique. Pour cela, nous développerons cette partie qui
apportera des réponses à notre problématique.
5 Objets connectés
5.1 Liaison à un cloud
La connexion au cloud permet des calculs et dispose d'un
espace de stockage géré à distance. Les utilisateurs
peuvent se connecter via des ordinateurs, des téléphones et des
tablettes via des connexions Internet et peuvent accéder directement aux
données hébergées sur le serveur. Il existe 3 niveaux de
cloud :
DUT R&T - Mémoire 2020 - BOURGEAY Raphaël 5
5.1.1 Le cloud privé
a. Privé interne
L'architecture est gérée par l'entreprise. Le
cloud privé interne est utilisé par plusieurs consommateurs d'une
seule entreprise propriétaire de l'infrastructure. Il peut
également être partagé avec des filiales ou entre elles.
b. Privé externe
Le cloud privé externe suit la même logique que
le cloud privé interne. La différence est que l'architecture est
hébergée par un fournisseur de services. Il est
entièrement propre à l'entreprise et accessible via un
réseau sécurisé, un réseau privé virtuel, un
VPN (Virtual Private Network) En effet, ces VPN sont gérés
directement par l'entreprise via ses services informatiques internes. Ils
peuvent également être partagés et le fournisseur sera
responsable de la plateforme. Ce modèle devrait apporter les avantages
de l'informatique en nuage «publique» (par exemple: réduire
les coûts associés à la virtualisation des applications
dans le cas d'une infrastructure partagée) sans inconvénients: en
mettant l'accent sur les données sur la sécurité, la
conformité de la gouvernance d'entreprise, et tout Fiabilité du
service fourni.
5.1.2 Le cloud public
Le cloud public est basé sur un modèle de cloud
computing standard dans lequel les fournisseurs de services fournissent des
ressources, telles que des applications ou du stockage, au public via Internet.
Le cloud public peut être gratuit, ou il peut être exploité
en fonction du paiement du consommateur. L'avantage de cette architecture est
qu'elle est facile à installer et le coût est relativement
raisonnable. La charge, l'application et la bande passante des matériaux
sont à la charge du fournisseur. De cette façon, le modèle
peut offrir une flexibilité et une évolutivité
améliorées pour répondre rapidement à la demande.
Aucune ressource n'est gaspillée car les clients ne paient que ce qu'ils
consomment. Malheureusement, les entreprises s'inquiètent toujours de
cette solution, et les participants au cloud computing public devront encore
utiliser certains arguments pour convaincre les décideurs
informatiques.. Les entreprises de toutes tailles considèrent la
sécurité, la confidentialité et l'immaturité comme
les principales faiblesses des solutions IaaS (Infrastructure as a
Service) ouvertes. Nous trouvons tout type de solution SaaS (Software
as a Service) (messagerie en ligne, stockage en ligne, etc.) ou PaaS
(Platform as a Service) (Microsoft Windows Azure46) dans le cloud
public.
DUT R&T - Mémoire 2020 - BOURGEAY Raphaël 6
5.1.3 Le cloud hybride
Comme nous venons de le voir dans le cloud public, certains
problèmes liés à la sécurité des
informations peuvent survenir. Ensuite, vous pouvez «hybrider» les
clouds privés et publics en utilisant une plateforme hybride. Ce terme
n'évoque pas réellement le cloud, car c'est le problème de
la coexistence et de la communication des clouds privés et publics. En
public, nous expulserons les éléments insensibles; en
privé, nous conserverons les données relatives aux
activités sensibles de l'entreprise.
5.2 Fonctionnement de cloud spécial IoT
L'IoT permet l'interconnexion des différents objets
intelligents via l'Internet. Ainsi, pour son fonctionnement, plusieurs
systèmes technologiques sont nécessaires. Citons quelques
exemples de ces technologies. « L'IoT désigne diverses solutions
techniques (TCP/IP (Transmission Control Protocol/Internet Protocol),
technologies mobiles, etc.) qui permettent d'identifier des objets, de capter,
stocker, traiter, et transférer des données dans les
environnements physiques, mais aussi entre des contextes physiques et des
univers virtuels».
5.3 Domaines d'application
Nous voyons que le concept de l'Internet des objets explose,
et il y a une demande croissante d'objets intelligents qui nous permettent
d'atteindre plus facilement nos objectifs dans notre vie quotidienne. Par
conséquent, le champ d'application de l'Internet des objets peut
être modifié. L'Internet des objets affectera plusieurs domaines
d'application. L'Internet des objets existe non seulement dans notre vie
quotidienne, mais aussi dans les services publics fournis par le gouvernement.
On peut dire que l'Internet peut être connecté à n'importe
quel objet. Par conséquent, les domaines d'application de l'Internet des
objets sont divers. Par exemple, l'industrie, la santé,
l'éducation et la recherche. Cependant, à l'avenir, il est
possible que n'importe qui, à tout moment, puisse trouver le concept de
l'Internet des objets. La référence Pessemier a souligné :
"L'Internet des objets est constitué de données intelligentes
(smart data). S'il est utilisé correctement, il contribuera à
résoudre les problèmes d'aujourd'hui, en particulier dans les
domaines suivants : aérospatial, aviation, automobile,
télécommunications, construction, médical, autonomie pour
les personnes handicapées, pharmacie, logistique, gestion de la
chaîne d'approvisionnement, fabrication de produits et gestion du cycle
de vie, sécurité, sûreté, surveillance
environnementale, traçabilité alimentaire, agriculture et
élevage. »
DUT R&T - Mémoire 2020 - BOURGEAY Raphaël 7
6 Arduino
6.1 Présentation, caractéristiques, packs,
cartes
Le projet Arduino a été lancé par un
groupe d'enseignants et d'étudiants l'école de Design
d'Interaction d'Ivrea en Italie en 2004-2005.
L'équipe de développement composée de
Massimo Banzi, David Cuartuelles, Tom Igoe, Gianluca Martino, David Mellis et
Nicholas Zambetti a conçu ce projet et mis en oeuvre une petite carte
électronique programmable et un logiciel multiplateforme, que tout le
monde peut utiliser dans le but de créer facilement des systèmes
électroniques.
Les principaux utilisateurs d'Arduino sont :
· des « bidouilleurs » dont beaucoup ont peu de
connaissances en électronique
· des artistes qui ont besoin d'animer leurs oeuvres ou de
créer des interactions avec elles
· des étudiants, des lycées et des
collèges
Il y a trois types de cartes:
· Les « officielles », qui sont
fabriquées en Italie par Smart Projects. À ce jour, dix-sept
versions de cartes de type Arduino ont été produites et vendues,
y compris la version Arduino MKR (que nous utiliserons), qui est une
série de cartes au format simplifié pour l'IoT ; la carte propose
plusieurs versions, chaque version et possède différentes
fonctions de connexion IoT: Sigfox, LoRa, Wi-Fi, etc.
· Les « compatibles », non fabriqués
par Smart Projects, mais entièrement compatibles avec les Arduino
officielles telles que celles de STMicroelectronics. La carte Nucleo STM32
basée sur le processeur STM32 utilise l'architecture ARM au lieu de
l'architecture Harvard d'Atmel AVR.
· Les « autres », produites par d'autres
sociétés et vendues sous différents noms (Freeduino,
Seeduino, Femtoduino, etc.).
Les cartes Arduino sont compatibles avec nombres de Shields
(cartes d'extension) avec des fonctions diverses qui s'enfichent sur la carte
Arduino :
· Relais, commande de moteurs, lecteur carte SD, ...
· Ethernet, WIFI, GSM (Global System for Mobile),
GPS (Global Positioning System)...
· Afficheurs LCD (Liquid Crystal Display),
Écran TFT (Thin-film transistor), ...
DUT R&T - Mémoire 2020 - BOURGEAY Raphaël 8
Figure 1 : diverses cartes Arduino (source :
npoulain.fr)
Figure 2 : divers shields Arduino
Avantages :
Un prix accessible de quarante euros pour la carte seule,
soixante-dix euros pour le pack avec les différents capteurs et
actionneurs que nous utiliserons dans le cours. Cependant, certaines cartes
sont à moins de dix euros, et à une vingtaine d'euros le pack
complet.
DUT R&T - Mémoire 2020 - BOURGEAY Raphaël 9
La communauté est très développée et
de nombreux forums d'entre-aide sont disponibles en cas de besoin de solutions
aux programmes et de bibliothèques...
Un site en anglais
arduino.cc et un autre en
français
arduino.cc où nous trouverons
tout de la référence Arduino, le matériel, des exemples
d'utilisations, de l'aide pour débuter, des explications sur le logiciel
et le matériel...
Une liberté quasi absolue. Elle constitue en
elle-même deux choses:
· Le logiciel: gratuit et open source,
développé en Java, très simple d'utilisation, disponible
sur internet et est compatible sous toutes les plateformes : Windows, Linux et
Mac OS (Operating System).
· Le matériel: cartes électroniques dont les
schémas sont en libre circulation sur internet.
6.2 Application, langage, broches
Connaissances nécessaires :
· Peu si on utilise des cartes et des modules tout faits,
sauf en cas de première expérience.
· En électronique, si l'on veut optimiser ou faire
du sur-mesure
· La communauté francophone est très active
sur le forum. entraide, (tutoriels, exemples de réalisations ...)
Le logiciel utilisé est l'IDE (Environnement de
Développement Intégré) Arduino multi OS, il permet :
· l'édition du programme (langage proche du C,
possède de très nombreuses librairies logicielles disponibles)
· la compilation du programme
· le transfert du programme dans la carte via le port USB
(Universal Serial Bus)
Le programme principal consiste en deux fonctions (ce sera
toujours le cas), dont voici les signatures simples :
· void setup() : est appelée une seule fois, au
moment de la mise sous tension de la carte
· void loop() : appelée, comme son nom l'indique, en
boucle. Elle est lancée après setup(), et tourne à
l'infini (tant que la carte est alimentée en tout cas)
Les principales fonctions de la librairie standard :
·
DUT R&T - Mémoire 2020 - BOURGEAY Raphaël 10
#include <LaLibraireDésirée.h> : permet
d'inclure une libraire pour les fonctions non implémentées de
base
· Serial.print("message) : affiche le message
demandé, très utile pour le repérage des erreurs
· pinMode(pinNumber, mode) : définit le mode de
fonctionnement d'un pin, soit INPUT, soit OUTPUT ;
· digitalWrite(pinNumber, value) : si le pin est
défini en OUTPUT, cette instruction permet d'écrire HIGH et LOW
qui sont des constantes prédéfinies, mais 1 ou 0 fonctionnent
aussi ;
· delay(ms) : bloque l'exécution de tout le
programme pendant une durée donnée en millisecondes.
· client.subscribe pour la souscription aux
différents topics
· client.publish pour l'envoi des mesures au brocker
Toutes ces fonctions, une fois assemblées, permettent
par la suite de réaliser tout notre programme pour la construction de la
station météorologique.
Il existe trois groupes de broches sur une carte Arduino :
-Les broches analogiques (de A0 à A6) : pour les
entrées analogiques
-Les broches numériques (de 2 à 14 (0 et 1
servent à la communication série)) peuvent servir
d'entrée numérique ou de sortie
numérique.
-Les broches d'alimentation et référence :
AREF (Analog REFerence) tension de
référence pour les broches analogiques
RESET (Réinitialisation) permet de
réinitialiser l'Arduino et donc de redémarrer le
programme au début. Pour réinitialiser
l'Arduino, il suffit de mettre cette broche à une tension de
0V puis de la repasser à 5V, ou 3,3V selon
l'Arduino.
3.3V pour alimenter un circuit externe en 3,3V.
5V pour alimenter des circuits externes en 5V. Si on
désire construire sa propre
alimentation 5V, on peut également fournir cette
tension à l'Arduino via cette broche.
GND : La masse/terre/ground/0V
VIN (Voltage INput) : pour alimenter l'Arduino via cette
broche au lieu d'utiliser la prise
d'alimentation.
DUT R&T - Mémoire 2020 - BOURGEAY Raphaël
11
7 Cloud libre avec MQTT 7.1 Historique
MQTT un protocole basé TCP / IP, qui permet à
chaque système abonné / publieur d'échanger jusqu'à
256 Mo de données. L'avantage de ce protocole pour notre application est
qu'il ne nécessite pas de réseau haut débit pour assurer
la communication des données. Dans notre application, Arduino joue le
rôle de publisher et le Raspberry joue le rôle de serveur. Tous ces
échanges sont possibles car l'agent (serveur MQTT) est
déjà installé sur le serveur. MQTT est un protocole de
messagerie ISO-ISO (IEC / PRF 20922) basé sur un modèle de
publish/subscribe. Il fonctionne comme un protocole de couche application via
le protocole TCP / IP. Il est conçu pour se connecter à des
emplacements distants qui nécessitent une «empreinte de code
réduite» ou des contraintes de bande passante réseau.
Le modèle de messagerie de publish/subscribe requiert
un broker de messages basé sur le port 1883.
MQTT a été inventé en 1999 par Andy
Stanford-Clark (IBM (International Business Machines)) et Arlen Nipper
(Arcom, maintenant Cirrus Link). Leur cas d'usage était de créer
un protocole avec une perte de charge électrique et une bande passante
minimales. Ils ont spécifié les objectifs du futur protocole :
· Simple à mettre en oeuvre
· Livraison de données avec qualité de
service
· Bande passante légère et efficace
· Maintenance des sessions
· Prise en compte de beaucoup de types de messages comme
du binaire ou du JSON (JavaScript Object Notation)
MQTT est un protocole de communication 50 fois plus rapide
que le protocole HTTP (HyperText Transfer Protocol). Très
léger, particulièrement adapté à la domotique et
aux objets connectés. Cela facilite la communication entre les objets
connectés (M2M (Machine to Machine)) tout en économisant
la batterie.
Ces objectifs restent au coeur de MQTT, et l'attention est
passée des systèmes intégrés propriétaires
aux cas d'utilisation de l'IoT. La signification correcte des
abréviations est souvent source de confusion. La réponse longue
d'histoires raconte que l'ancien acronyme signifiait "Transport de
télémétrie MQ", tandis que MQ fait référence
à « MQ Series», qui est un produit développé par
IBM qui prend en charge MQTT. L'accord a été nommé lors de
son invention en
DUT R&T - Mémoire 2020 - BOURGEAY Raphaël 12
1999. Souvent, MQTT est incorrectement nommé le
protocole de file d'attente. Il n'y a pas de file d'attente dans la solution de
file d'attente de messages traditionnelle. Cependant, les messages peuvent
être mis en file d'attente dans certaines circonstances. Par
conséquent, après avoir utilisé MQTT en interne pendant un
certain temps, la version 3.1 a été publiée gratuitement
en 2010. À partir de ce moment-là, tout le monde a pu
l'implémenter et l'utiliser.
Environ trois ans après la première version, le
29 octobre 2014, MQTT a été normalisé en tant que standard
OASIS, qui est une organisation ouverte visant à faire progresser la
norme. MQTT 3.1.1 est la dernière version de l'accord et la version 5 de
la spécification est publiée depuis le 7 mars 2019
Figure 3 : nombre de recherches dans le mot du terme
« MQTT » (source : google trends)
7.2 Accès aux données avec le
modèle pub/sub
Figure 4 : modèle publisher/subscriber (source
:
hivemq.com)
Le modèle publish/subscribe (pub/sub) est une
alternative au modèle traditionnel "client/serveur", le client
communique directement avec un point de terminaison. Le modèle "Pub/Sub"
sépare un client qui envoie un message spécifique (appelé
publisher) d'un autre client
(ou plusieurs clients) qui reçoit le message
(appelé subscriber). Par conséquent, le publisher et le
subscriber ne se connaissent. Le troisième composant, appelé le
broker, qui est connu à la fois par le publisher et le subscriber,
filtre tous les messages entrants et les distribue en conséquence.
L'élément de base du modèle "pub/sub"
est la dissociation des clients publisher et subscriber. Ceux-ci peuvent
être distingués de plusieurs manières :
Dissociation spatiale : le publisher et le subscriber n'ont
pas besoin de se connaître (adresse IP et port par exemple)
Dissociation temporelle : le publisher et le subscriber n'ont
pas besoin de s'exécuter en même temps.
Dissociation de synchronisation : Lors de la publication ou
de la réception, le fonctionnement de ces deux éléments ne
sera pas interrompu. En résumé, le modèle
publish/subscribe peut séparer l'éditeur (publisher) et le
destinataire (subscriber) du message. En raison du filtrage des messages seuls
certains clients sont susceptibles de recevoir certains messages. Par
conséquent, le découplage a trois dimensions : l'espace, le temps
et la synchronisation.
7.2.1 Evolutivité
Par rapport à l'approche traditionnelle "pub/sub",
l'évolutivité est également fonction du modèle
"client/serveur". En fait, les opérations sur l'agent peuvent être
fortement parallélisées et traitées par le biais
d'événements. De même, les messages mis en cache et leur
routage intelligent sont souvent essentiels pour améliorer
l'évolutivité. Pour prendre en charge des millions de connexions,
il peut être nécessaire de répartir la charge entre des
clusters de brokers.
DUT R&T - Mémoire 2020 - BOURGEAY Raphaël 13
Figure 5: Mesure de latence des protocoles de
messagerie d'application web IoT
DUT R&T - Mémoire 2020 - BOURGEAY Raphaël 14
7.2.2 Sécurité
Il existe de nombreuses possibilités de
sécurisation (mot de passe, authentification par certificats client et
serveur, chiffrement SSL/TLS (Secure Sockets Layer/ Transport Layer
Security) listes de contrôle d'accès...)
Dans un monde où les objets connectés sont
d'importants vecteurs d'attaque, c'est une qualité incontournable.
7.2.3 Difficultés
Quels sont les facteurs qui causent des difficultés dans
le modèle pub/sub ?
Premièrement, il faut comprendre à l'avance la
structure des données. Dans le cas d'un filtrage par sujet,
l'éditeur et l'abonné doivent savoir quels sont les sujets
adéquats.
Deuxièmement, en ce qui concerne la messagerie, un
publisher ne peut pas supposer que quelqu'un écoute ses messages. Par
conséquent, il se peut qu'un message ne soit lu par aucun subscriber.
7.2.4 Applications
De nombreux projets utilisent le protocole MQTT :
Facebook Messenger : Facebook a utilisé des aspects de
MQTT dans Facebook Messenger, cependant on ne connaît pas exactement ce
qui est utilisé de MQTT dans Facebook Messenger ni pourquoi.
La dernière version du système de contrôle
de signalisation de IECC (International Energy Conservation Code)
Scalable DeltaRail utilise MQTT pour les communications entre les
différentes parties du système et les composants du
système de signalisation.
7.3 Topics MQTT
Les subscribers MQTT s'enregistrent auprès du broker
sur des topics, des sortes de chemins d'accès à une ressource.
Ils demandent ainsi à être notifiés lorsque quelqu'un
publie sur ces topics.
Cela peut être un topic de température par exemple
: /raph/temperature.
On peut souscrire à un ensemble de topics en utilisant
des métacaractères # : raph/#
DUT R&T - Mémoire 2020 - BOURGEAY Raphaël 15
Par exemple, si un client publie sur les topics
/raph/température et /raph/humidite, un autre client peut écouter
ces deux topics à la fois : /raph/#.
7.4 Qualité de service
La qualité de service (QdS) ou Quality of Service
(QoS) est la capacité de transmettre sur un type de trafic donné
en fonction de la disponibilité, de la vitesse, du délai de
transmission, de la gigue, du taux de perte de paquets, etc. dans de bonnes
conditions. En d'autres termes, la QoS permet aux périphériques
réseau de différencier le trafic et de lui appliquer
différents comportements.
Trois niveaux de qualité de service (QoS) sont
définis pour la publication des messages :
QoS 0 : Livraison une fois maximum.
Les messages sont envoyés en fonction de la
capacité maximale du réseau TCP/IP sous-jacent. Aucune
réponse n'est attendue. Aucune sémantique de relance n'est
définie dans le protocole. Par conséquent, le message n'atteindra
pas du tout l'agent de destination, ni n'arrivera qu'une seule fois. Le niveau
QoS 0 est également appelé fire and forget.
Figure 6 : représentation de la QoS 0 (source :
hivemq.com)
QoS 1 : Livraison au moins une fois.
L'arrivée d'un message QoS 1 au broker est reconnue.
Si un lien identifiable ou une unité d'envoi échoue, ou si aucun
message de confirmation n'est reçu dans un certain laps de temps,
l'expéditeur envoie à nouveau une copie du message.
Par conséquent, le message arrivera certainement, mais
il peut effectuer cette opération plusieurs fois.
DUT R&T - Mémoire 2020 - BOURGEAY Raphaël 16
Figure 7 : représentation de la QoS 1 (source :
hivemq.com)
QoS 2 : Livraison exactement une fois.
Pour le niveau QoS 2, d'autres flux de protocoles que QoS 1
seront utilisés afin que le message ne soit pas envoyé de
manière répétée à l'application
réceptrice. Il s'agit du plus haut niveau de service utilisé lors
de la répétition inappropriée de messages. Cela aura un
impact sur le trafic réseau, mais étant donné l'importance
du contenu du message, cet impact est généralement acceptable. La
qualité de service peut être sélectionnée message
par message, ce qui permet la libération de messages secondaires avec le
niveau de QoS 0 et la distribution de messages importants avec QoS 2.
Ces niveaux sont atteints grâce à d'autres
échanges entre l'expéditeur et le destinataire, et plus la
qualité demandée est élevée, plus les
échanges sont nécessaires pour vérifier la publication
comme indiqué. Pour tous les niveaux supérieurs à
zéro, l'identifiant est associé au message pour lui permettre
d'être suivi, MQTT offre la possibilité d'attendre jusqu'à
65535 messages (l'identifiant de message réserve 16 bits)
Figure 8 : représentation de la QoS 1 (source :
hivemq.com)
7.5 Exploitation de données
Node-RED est un langage de programmation graphique pour
développer des objets connectés en combinant des blocs
fonctionnels. Node-RED est un projet open source gratuit pris en charge par
IBM. Node-RED est un programme qui fonctionne en liant des fonctions
représentées sous forme de briques. Le flux de données est
transmis d'un processus à un autre (d'une fonction à une
DUT R&T - Mémoire 2020 - BOURGEAY Raphaël 17
autre). Les paramètres fournis par certaines fonctions
ne doivent être définis qu'à l'aide d'une liste ou d'un
champ de sélection. Il existe des centaines de plugins dans tous les
domaines permettant d'enregistrer les données dans une base de
données (MySQL (My Structured Query Language), MongoDB
(Mongo Data Base)...), de contrôler les entrées/sorties
Arduino ou Raspberry (ajouter une interface graphique pour tracer des
graphiques, afficher des jauges, commander un relai à l'aide d'un
bouton...)
8 Conception de la station météorologique
8.1 Choix des éléments matériels
8.1.1 Carte Arduino
Le choix de la carte Arduino MKR1000 a été un
choix, car elle possède tout ce dont on a besoin pour réaliser ce
que l'on souhaite ici. Le module Wi-Fi intégré est ce qu'il y a
de plus important, car une station météorologique est rarement
connectée par câble, et que cela prend beaucoup de place.
Figure 9 : carte Arduino MKR1000 (source : reichelt
elektronik)
8.1.2 Capteur de lumière
Nous utiliserons un LDR (Light Dependent Resistor)
qui est une photorésistance, la résistance du capteur
dépend de la quantité de lumière reçue. La
variation de la lumière provoque une variation de la
résistance.
Nous savons que le capteur de soleil est une
résistance variable, donc nous pouvons convertir cette résistance
en une tension.
DUT R&T - Mémoire 2020 - BOURGEAY Raphaël 18
Figure 10 : capture d'écran
réalisée sur Tinkercad
Caractéristiques techniques :
· Resistance de 50ohm à 2Mohm
· I[lux] = 10000 / (R[kÙ]*10) A (1.2)
· Tension maximale 320V
· Courant maximal 75mA
Figure 11 : photorésistance (source :
alibaba)
8.1.3 Potentiomètre
Le potentiomètre sera ici utilisé car il est un
capteur, qui peut varier comme on le désire. Il est composé d'une
entrée, d'une sortie et d'une masse
Figure 12 : branchement d'un potentiomètre
réalisé sur Tinkercad
DUT R&T - Mémoire 2020 - BOURGEAY Raphaël
19
8.2 Arduino IDE
Dans ce projet, nous allons utiliser le logiciel Arduino IDE
pour développer le programme qui contrôle le circuit
électronique de la station météorologique. Ce programme
est exécuté sur le microcontrôleur.
L'IDE Arduino permet :
· d'éditer du code.
· de compiler ce code dans le langage de l'Arduino.
· de communiquer avec la carte Arduino grâce au
terminal.
Figure 13 : capture d'écran du
logiciel
8.3 Configuration routeur internet
Cette configuration est très importante car elle permet
aux périphériques externes (ordinateurs, modules GPRS... )
d'accéder au serveur web et au serveur TCP/IP.
Pour cela, nous allons ouvrir trois ports :
· Un pour le protocole FTP (File Transfert
Protocol), pour contrôler le serveur à distance
· Un pour ouvrir la page web du port 1880
· Un pour le broker, qui réceptionne les
données sur le port 1883
Pour ouvrir un port, il faut aller dans les paramètres de
la Box internet, puis aller dans les paramètres NAT(Network Address
Translation) où nous créons des nouvelles règles.
L'image suivante montre les ports ouverts dans le routeur.
DUT R&T - Mémoire 2020 - BOURGEAY Raphaël 20
Figure 14 : capture d'écran de l'ouverture des
ports du routeur
Remarque :
Il est préférable de choisir un autre port que
celui de base pour le port externe, cela complique l'accès rapide aux
ports internes pour les personnes mal intentionnées.
9 Problèmes rencontrés
Durant cette période exceptionnelle, il n'aura pas
été très aisé de réaliser ce projet, cela
est dû à certains problèmes comme :
· La livraison tardive du pack
· L'IUT ayant été fermé, la
communication directe avec les professeurs était restreinte
Dans la réalisation du circuit, il y a aussi eu un
problème comme suit :
· Le thermomètre ne fonctionne pas (semble
être brûlé)
Pour résoudre ce problème, il a donc fallu
utiliser un potentiomètre pour combler ce défaut.
DUT R&T - Mémoire 2020 - BOURGEAY Raphaël
21
10 Conclusion générale
Un travail soutenu donne toujours de bons résultats.
Cela nous satisfait car nous avons acquis une richesse de connaissances et de
compétences en programmation logicielle et en conception
matérielle.
Ce projet nous a permis de toucher plusieurs outils de
développement, tels que
· Tinkercad pour la simulation de notre circuit
· Arduino IDE pour la programmation de notre
microcontrôleur
Le côté pratique de ce projet nous a aidé
à améliorer notre niveau en appliquant nos connaissances
théoriques dans sa réalisation.
La plate-forme développée pour ce projet
ressemble tous les unités techniques nécessaires pour mettre en
place un système autonome, elles peuvent aussi être
appliquées sur tout autre projet qui doit être
contrôlé à distance comme les exploitations agricoles, les
entreprises de pétrole et de gaz....
La technologie Wi-Fi permet d'envoyer et recevoir des
données sans fil via un routeur à travers le réseau
internet, nous avons bénéficié de cette technologie pour
accéder à notre système à partir de n'importe quel
endroit au monde et cette technologie peut être facilement
intégrée dans le domaine industriel.
En outre, la technologie décrite ci-dessus nous
amène à apprendre d'autres technologies comme les serveurs
TCP/IP, les serveurs Web qui permettent d'accéder, d'afficher et de
contrôler les systèmes à partir de n'importe quel
endroit.
La combinaison des informations discutées nous a
aidés à développer la plate-forme
météorologique, mais nous n'arrêterons pas notre projet
à ce point et pour la poursuite des travaux, nous proposons les
améliorations suivantes:
· Optimiser la consommation d'énergie dans le
circuit.
· Modifier le circuit électronique pour accepter des
nouveaux capteurs sans modifier le système.
· Remplacez l'alimentation USB par une alimentation sur
pile.
· Remplacez le serveur TCP/IP par des requêtes HTTP
Post.
· Améliorer les rapports
générés par l'application Web.
· Mise en place d'un système de caméra
DUT R&T - Mémoire 2020 - BOURGEAY Raphaël 22
DUT R&T - Mémoire 2020 - BOURGEAY Raphaël 23
11 Bibliographie / sources
Ouvrage
BENGHOZI, Pierre-Jean et al. L'internet des objets : quels enjeux
pour l'Europe ? Les Editions de la MSH, 2009. 170p.
Codes
https://github.com/256dpi/arduino-mqtt
Article
GUILLEMIN, Patrick État de l'art sur l'Internet des Objets
en Europe - L'IdO (IoT) en Europe. Innovation | Innovations technologiques.
Aout 2018, Réf : TE8001V1. 20p
Document de thèse
GAILLARD, Guillaume. Opérer les réseaux de
l'Internet des Objets à l'aide de contrats de qualité de service
(Service Level Agreements), Thèse de doctorat : Lyon : INSA : 2016.
161p
Site web
https://www.hivemq.com/
https://www.github.com
Page web
https://hackernoon.com/a-detailed-guide-to-the-world-of-mqtt-bo1d63cay
http://www.steves-internet-guide.com/mosquitto_pub-sub-clients/
https://blog.groupe-sii.com/le-protocole-mqtt-dans-liot/
Fichier en ligne
GUBBI, et al. Internet of Things (IoT): A vision,
architectural elements, and future directions [en ligne], IoT Group.
[Consulté le 22/06/2020]
http://www.parkjonghyuk.net/lecture/2014-2nd-lecture/ubiquitous/salahe.pdf
Lily Trible, Internet of Things [consulté le
29/06/2020]
https://www.mindmeister.com/fr/1199107014/internet-of-things?fullscreen=1
Documentation
http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html
DUT R&T - Mémoire 2020 - BOURGEAY Raphaël 24
12 Tutoriel
Ce premier tutoriel utilise le IoT cloud d'Arduino, tout
d'abord, il vous faudra vous rendre à ce lien :
https://create.arduino.cc/iot/
vous devrez créer un compte et vous n'aurez plus qu'à suivre les
étapes pour l'enregistrement de la carte
Figure T1 : Montage sur la Breadboard / Figure T2 :
Montage général
Par la suite vous arriverez sur une page comme celle-ci,
où il ne restera plus qu'à ajouter les objets, pour les
permissions, vous utiliserez RO pour un capteur et R&W pour un actionneur
:
Figure T3 : Propriétés
Une fois les propriétés renseignées, une
bonne partie du code se génère.
Code.ino
#define LED_PIN A2 #define LED_PIN2 A3
#define POTENTIOMETER_PIN A4
#define THERMOMETRE A5
#define PHOTOR A6
#include "thingProperties.h"
void setup() {
// Initialize serial and wait for port to open:
pinMode (LED_PIN, OUTPUT);
pinMode (LED_PIN2, OUTPUT);
Serial.begin(9600);
delay(1500);
initProperties();
ArduinoCloud.begin(ArduinoIoTPreferredConnection);
setDebugMessageLevel(2);
ArduinoCloud.printDebugInfo();
}
void loop() {
ArduinoCloud.update();
int potence = analogRead(POTENTIOMETER_PIN); potentio =
map(potence, 0, 1023, 0, 1000);
int photores = analogRead(PHOTOR); resistancephoto =
map(photores, 0, 1023, 0, 1000);
int thermo = analogRead(THERMOMETRE);
float temperature_celcius = thermo * (5.0 / 1023.0 * 100.0);
thermometre = map(temperature_celcius, 0, 60, 0, 1); }
void onThingChange() {
digitalWrite(LED_PIN, thing); Serial.print("The thing is ");
if(thing){
Serial.println("ON");
}else {
Serial.println("OFF");
}
}
void onThing2Change() {
digitalWrite(LED_PIN2, thing2);
Serial.print("The thing is ");
if(thing2){
Serial.println("ON");
}
else {
Serial.println("OFF");
}
}
DUT R&T - Mémoire 2020 - BOURGEAY Raphaël 25
thingProperties.h
#include <ArduinoIoTCloud.h>
#include <Arduino_ConnectionHandler.h>
const char THING_ID[] =
"52b35df3-e5c1-4e5d-932f-c8f20d9024ce";
const char SSID[] = SECRET_SSID; // Network SSID (name)
const char PASS[] = SECRET_PASS; // Network password (use for
WPA, or use as key for WEP)
void onThingChange(); void onThing2Change();
CloudTemperature thermometre;
int potentio;
int resistancephoto;
bool thing;
bool thing2;
void initProperties(){
ArduinoCloud.setThingId(THING_ID);
ArduinoCloud.addProperty(thermometre, READ, ON_CHANGE, NULL);
ArduinoCloud.addProperty(potentio, READ, ON_CHANGE, NULL, 10);
ArduinoCloud.addProperty(resistancephoto, READ, ON_CHANGE, NULL, 10);
ArduinoCloud.addProperty(thing, READWRITE, ON_CHANGE,
onThingChange);
ArduinoCloud.addProperty(thing2, READWRITE, ON_CHANGE,
onThing2Change);
}
WiFiConnectionHandler ArduinoIoTPreferredConnection(SSID,
PASS);
DUT R&T - Mémoire 2020 - BOURGEAY Raphaël 26
Figure T4 : dashboard illustrant une journée
(soleil, lumières éteintes)
Figure T4 : dashboard illustrant la nuit (lune,
lumières allumées
DUT R&T - Mémoire 2020 - BOURGEAY Raphaël 27
Il suffit ensuite de créer le dashboard avec les elements
à selectionner.
Figure T6 : installation de mosquitto
Figure T7 : installation de mosquitto-clients
Figure T8 : installation de paho-mqtt
Figure T5 : mise à jour des paquets
DUT R&T - Mémoire 2020 - BOURGEAY Raphaël 28
Figure T10 : modification du code pour la
sécurisation
Figure T9 : test de l'envoi de données
DUT R&T - Mémoire 2020 - BOURGEAY Raphaël 29
Figure T11 : création d'un mot de passe : ici
« raph »
Figure T12 : test de l'envoi de données avec
sécurité
Figure T13 : installation de Node-Red
Figure T14 : installation du paquet node-red-admin (pour
avoir un mot de passe sur l'interface)
Figure T15 : génération d'un mot de passe
crypté pour Node-Red (ici « raph »)
DUT R&T - Mémoire 2020 - BOURGEAY Raphaël 30
Figure T16 : sécurisation de
Node-Red
Figure T17 : interface d'entrée à
Node-Red accessible via AdresseIp/PortNode-Red
DUT R&T - Mémoire 2020 - BOURGEAY Raphaël 31
Figure T18 : interface de création de
l'interface graphique
DUT R&T - Mémoire 2020 - BOURGEAY Raphaël 32
Figure T19 : Menu
Figure T20 : installation de la palette
dashboard
DUT R&T - Mémoire 2020 - BOURGEAY Raphaël 33
Figure T21 : apparition de la palette
dashboard
Dans la palette network, choisir « mqtt in »
Figure T22 : renseignement du serveur (avec port du
broker) et du topic
Et brancher en sortie un noeud « debug », dans la
catégorie common
Figure T23 propriétés du noeud
debug
DUT R&T - Mémoire 2020 - BOURGEAY Raphaël 34
DUT R&T - Mémoire 2020 - BOURGEAY Raphaël 35
Figure T24 : reception des données
Il ne vous reste qu'à utiliser les différents
noeuds disponibles pour votre interface graphique
Figure T25 : mise en forme des
données
DUT R&T - Mémoire 2020 - BOURGEAY Raphaël 36
Interface graphique accessible via AdresseIp:PortNode-Red/ui (UI
: User Interface)
Figure T26 : interface graphique
Code à utiliser :
// Identifiant de connection au point d'acces Wi-Fi local
#define SSID L "Nom de la box" // Nom du réseau
Wi-Fi _
#define MOT_DE_PASSE_L "Mot de passe" // Mot De Passe du
réseau Wi-Fi
// Adresse IP et port du serveur MQTT
#define ADRESSE_IP_SERVEUR_MQTT "adresse x.x.x.x" #define
PORT_SERVEUR_MQTT 1883
// Identifiants MQTT
#define mqtt_user "nom d'utilisateur" // Si configuré sur
le Broker ! #define mqtt_password "mot de passe" // Si configuré sur
le Broker !
// Déclaration des bibliothèques
utilisées
#include <WiFi101.h> #include <MQTT.h>
#include <PubSubClient.h>
// Définition des constantes globales
int led_Bleu = 7;
#define PORT_LED_INTERNE 6 // Numéro de port auquel est
branchée la LED interne.
// Déclaration globales
WiFiClient ClientWiFi; // Déclaration de notre Client
Ethernet pour la connexion au serveur MySQL
MQTTClient ClientMqtt; // Déclaration de notre Client pour
la connexion au serveur Myqtt
PubSubClient client(ClientWiFi);
long lastMsg = 0;
int value = 0;
char message_buff[100];
// Fonction appelée lors de la réception d'un topic
+ traitement du payload: void callback(char* topic, byte* payload, unsigned int
length)
{
int i = 0;
Serial.print("Message reçu [");
Serial.print(topic);
String topic2 = String(topic);
Serial.println("] ");
// Traitement du payload, on le transforme en String.
for (i = 0; i<length; i++)
{
message_buff[i] = payload[i];
}
message_buff[i] = '\0';
String msgString = String(message_buff);
Serial.println("Payload: " + msgString);
if (topic2 == "raph/switchBleu") // LED bleue, il faudra
rajouter
{ // cette condition pour chaque LED if (msgString == "ON")
{
digitalWrite(led_Bleu, HIGH);
}
else {
digitalWrite(led_Bleu, LOW); }
}
}
//Connexion to WiFi: void setup_wifi() { delay(10);
Serial.println();
Serial.print("Connexion à "); Serial.println(SSID_L);
WiFi.begin(SSID_L, MOT_DE_PASSE_L);
while (WiFi.status() != WL_CONNECTED) { delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("Connexion WiFi établie ");
Serial.print("=> Adresse IP : "); Serial.println(WiFi.localIP());
}
void reconnect() {
// Boucle de reconnxion tant que l'on est pas connecté
while (!client.connected()) {
Serial.print("En attente de la connexion au serveur MQTT...");
// On attend la connection, mqtt_user et mqtt_password si
configuré sur le
Broker !
if (client.connect("raph", mqtt_user, mqtt_password)){ //
DUT R&T - Mémoire 2020 - BOURGEAY Raphaël 37
DUT R&T - Mémoire 2020 - BOURGEAY Raphaël 38
Serial.println("connected");
// Une fois connectée, on souscrit aux différents
topics: client.subscribe("raph/switchBleu"); //à répéter
pour chaque switch
}
else {
Serial.print("erreur, rc=");
Serial.print(client.state());
Serial.println(" nouvel essai dans 5 secondes");
// On attend 5 secondes pour essayer de se reconnecter au
Broker
delay(5000);
}
}
}
void setup()
{
Serial.begin(115200);
setup_wifi(); //Connexion au wifi
client.setServer(ADRESSE_IP_SERVEUR_MQTT, 1883); //Connexion au
serveur MQTT, port à changer selon votre cas
client.setCallback(callback);
delay(5000);
pinMode(LED_BUILTIN, OUTPUT); digitalWrite(LED_BUILTIN, LOW);
// Configuration des pins Arduino en sortie: pinMode(led_Bleu,
OUTPUT); //pour chacun
}
void loop()
{
if (!client.connected()) {
reconnect();
}
client.loop();
long now = millis();
if (now - lastMsg > 5000) // toute les 5 secondes on envoie
les mesures au Broker
{
char t[10];
lastMsg = now;
++value;
// On envoie les mesures au Broker:
float potence;
int potentio = analogRead(A1);
float pontence = potentio;
client.publish("raph/potence", String(potence).c_str());
int photo = analogRead(A6);
float photor = photo;
client.publish("raph/photor", String(photor).c_str());
Serial.println("Publication des messages des capteurs");
}
}
|