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 :
·
#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.