TP IOT-WiFi
TP IOT-WiFi
TP IOT-WiFi
1 Introduction
Les objets connectés ou l’Internet des Objets ( IoT : Internet of Things ) sont des termes très utilisés de nos jours même si
bien des personnes ont encore du mal les définir.
Au sens large, les objets connectés sont des objets communicants. Ils sont à la fois des émetteurs, des capteurs d’informations
qui émettent, mais également qui peuvent interagir avec d'autres machines (M2M) comme des serveurs ou d'autres objets
connectés. Les données générées par ces objets sont capitalisées dans des centres de données (data centers) et de nouveaux
usages de cette donnée apparaissent autour de la santé, du sport, des produits financiers par exemple.
Les objets connectés connaissent une croissance exponentielle. Des estimations indiquent qu’ils seraient près de 15 milliards
en circulation dans le monde actuel. Ils pourraient être plus de 50 milliards d’ici 2020.
Pour connecter les objets, les technologies actuelles peuvent être utilisées (RFID, Wi-Fi, GSM, Bluetooth, Z-Wave, ZigBee, ...)
mais de nouveaux réseaux se développent au niveau mondial. Ils doivent permettre d'envoyer (mais aussi recevoir dans
certains cas) des très petits messages sur des longues portées sans passer par des systèmes coûteux de réseaux mobiles et en
consommant peu d'énergie.
Au cours de ce TP, vous allez mettre en œuvre un objet connecté directement au réseau local. Il s'agira d'une régulation de
température construite autours d'une carte Arduino. L'IHM de supervision et de contrôle sera réalisé au moyen de Node Red
sur un ordinateur embarqué Raspberry Pi et l'historisation des données sera assurée par un serveur de bases de données
InfluxDB installé sur un ordinateur PC de la salle. On accèdera à l'historique des mesures un dashboard construit à partir de
Grafana.
2 Evaluation
L’évaluation portera sur :
Un compte rendu détaillé explicitant les différentes opérations menées durant le TP.
Pensez à prendre des copies d’écran pour illustrer ces opérations.
L'avancement dans la réalisation de l'objet connecté et déploiement de la solution.
3 Arduino
3.1 Installation de l'environnement de développement
Sur votre PC, bootez sur Ubuntu et téléchargez l'environnement de développement Arduino. Décompactez-
le dans le dossier Documents et exécutez-le :
cd arduino-1.8.8
./arduino
3.2 Le montage
Le but est de piloter une LED en TOR (Tout ou Rien) et de lire l'état d'un potentiomètre.
3.3 Le programme
A partir des programmes d'exemple (File -> Examples -> 1-Basics) Blink et AnalogReadSerial, réalisez
un programme qui permet d'allumer la LED lorsque le potentiomètre dépasse la moitié de sa course.
Sketch -> Include Library -> Manage Libraries ->Fliter your search
A partir des programmes précédents, réalisez un programme qui permet d'acquérir une consigne de
température via le potentiomètre et allumera la LED seulement si la température mesurer est inférieure à la
consigne. La température, l'humidité relative, la valeur de la consigne et l'état de la LED sont à retourner vers
le terminal via la liaison Serial toute les 2 secondes selon le protocole suivant :
<Temperature>;<Humidité>;<Consigne>;<EtatLED>\n
Sur un Raspberry Pi qui tourne sur Raspbian, Node Red est déja installé. Pour le lancer, il suffit de cliquer sur
le menu Programmation puis Node Red.
Node Red peut également être lancé ou stopper à partir d'un terminal :
$ node-red-start
$ node-red-stop
L'accès à l'interface de programmation se fait à partir d'un navigateur. Il est préférable d'utiliser le navigateur
d'un ordinateur connecté sur le même réseau que le Raspberry.
$ node-red-stop
$ sudo apt-get update
$ sudo apt-get install npm
$ cd /home/pi/.node-red
$ npm rebuild
$ node-red-start
On dispose désormais du gestionnaire de nodes dans le menu :
Cliquez sur Manage Palette puis recherchez la palette de nodes à installer. Une nouvelle palette est ensuite
disponible :
Pour conserver un historique des valeurs affichés, on peut utiliser un node Chart :
Il nous faut intercaler un node pour insérer la date dans le message à afficher. Nous allons utiliser un node
Function, ce node permet d'effectuer n'importe quel traitement sur le flux entrant pour fabriquer un ou
plusieurs flux sortants. Le code est du JavaScript :
var now = new Date();
var year = now.getFullYear();
var month = now.getMonth()+1;
var day = now.getDate();
var hour = now.getHours();
var minute = now.getMinutes();
var second = now.getSeconds();
msg.payload = day+"/"+
month+"/"+
year+" à "+
hour+":"+
second+" => "+
msg.payload;
return msg;
A noter : Les messages transmis dans les flux d'entrée et de sortie des nodes sont des objets. C'est l'attribut
payload, soit "charge utile" en français qui contient l'information à transmettre. Pour observer cette charge
utile de message vous pouvez utiliser un node Debug.
Réalisons maintenant un flow complet pour exploiter le potentiel de notre montage au travers de cette IHM :
return [hum,temp,stateLed,cons];
Node d'insertion de
données dans InfluxDB
Le serveur InfluxDB est installé sur votre PC et écoute les requêtes sur le port 8086.
Measurement indique le nom de la table dans laquelle les données seront introduites.
La fonction preparForDB() fourni un objet json contenant les noms des champs et les valeurs à
enregistrer :
preparForDB()
var o;
var temp;
var hum;
var cons;
var stateLed;
o = msg.payload.split(";");
hum = parseInt(o[1]);
temp = parseInt(o[0]);
cons = parseInt(o[3]);
stateLed = o[2];
msg.payload = [{
"humidity" : hum,
"temperature" : temp,
"order" : cons,
"stateLed" : stateLed
}];
return msg;
Grafana diffuse et écoute sur le port 3000, vous accéder à l'interface de configuration au moyen d'un
navigateur avec l'URL http://localhost:3000
Par défaut, Username = admin et password = admin.
7 Références web
7.1 Raspberry Pi
https://www.raspberrypi.org/products/raspberry-pi-2-model-b/
http://www.raspberry-projects.com/pi/category/programming-in-c
http://www.adafruit.com/pdfs/raspberrypi2modelb.pdf
https://learn.adafruit.com/downloads/pdf/introducing-the-raspberry-pi-2-model-b.pdf
https://en.wikipedia.org/wiki/ARM_Cortex-A7
7.2 Node Red
http://noderedguide.com/
https://nodered.org/
7.3 InfluxDB
https://www.influxdata.com/
https://docs.influxdata.com/influxdb/v1.7/introduction/installation/
https://docs.influxdata.com/influxdb/v1.7/administration/authentication_and_authorization
https://docs.influxdata.com/influxdb/v1.7/introduction/getting-started/
7.4 Grafana
https://grafana.com/
http://docs.grafana.org/installation/debian/
http://docs.grafana.org/guides/getting_started/
http://docs.grafana.org/features/datasources/influxdb/
7.5 Divers
https://fr.wikipedia.org/wiki/Internet_des_objets
https://www.usine-digitale.fr/objets-connectes/
https://fr.wikipedia.org/wiki/Web_des_objets
https://www.objetconnecte.com/guide-objets-connectes/quest-ce-quun-objet-connecte/
http://silanus.fr/
https://github.com/msilanus