PM2M-2016-XBee/Suivi

Réseaux de capteurs XBee

Etudiants M2PGI PM2M: DIAGNE EL-HADJI Malick, ZAKARI TOURE Ismaël

Dépôt Git : github

Documents : [[Media:PM2M-2016-XBee.pdf|Rapport]] - [[Media:PM2M-2016-XBee-slides.pdf|Transparents]] - [[Media:PM2M-2016-XBee-flyer.pdf|Flyer]] - Video

=Contexte= Dans le cadre de notre formation Master 2 Pro. Génie Informatique, nous sommes amenés à concevoir un système informatique d'interaction "Machine -to-Machine". Ce système mettra en oeuvre l'exploitation de capteurs, embarqués sur un système distant alimenté par une batterie. Ce système devra par conséquent être minimal et transmettra les données capturées à un autre système plus important via les modules radios Xbee fournis pour réaliser ce projet.

=Objectif du projet= Nous avons choisi de mettre en oeuvre un système de surveillance (des plantes) d'un jardin. Ce système mettra en oeuvre plusieurs capteurs listés ci-dessous. Il permettra d'avoir un aperçu des niveaux de luminosité, d'humidités (du sol et de l'air) et pluviométrie de notre jardin. L'objectif est de réduire au minimum le développement/écriture de code, au profit de la coopération de systèmes existants à travers leur configuration. A cet effet, nous utiliserons les technologies sous-mentionnées, notamment la platforme InfluxData pour la collecte, le stockage et le rendu de données séries capturées.

=Matériel utilisé=
 * 2 modules XBee: 1x module S1 et 1x module Pro
 * 1x "Breakout board" Xbee USB Explorer pour programmer les Xbee
 * 1x Arduino FIO
 * 1x "Breakout board" FTDI pour programmer la FIO
 * 1x photo-résistance, 2x capteurs d'humidité (air et sol) et 1x capteur de pluie

=Technologies utilisées=
 * Mosquitto, un broker MQTT
 * Node-RED, avec le noeud node-red-node-serialport (à installer) pour lire les données reçues par le module Xbee "local"
 * AWS EC2
 * Telegraf
 * InfluxDB
 * Chronograf

=Plan de développement=

Architecture - Conception générale
Ci-dessous, un schéma de l'architecture de notre projet.

Configuration des modules Xbee
Afin que les modules puissent communiquer entre eux, nous devons les configurer. Pour ce faire, nous disposons d'une "breakout board" USB Explorer Xbee. Les 2 modules utiliseront les paramètres suivants: Voici les paramètres que nous avons configuré pour chacun de nos modules: Nous pouvons configurer les modules soit en utilisant un terminal série comme minicom ou screen, soit avec X-CTU. En bas de page, quelques références  qui sont d'une grande aide à la configuration de modules.
 * baud rate : 57600
 * flow control: none
 * data bit: 8
 * parity: none
 * stop bits: 1

Montage
Ci-contre, voici le schéma de montage de notre ArduinoFIO:

Branchements:

-Pin A0: Capteur de luminosité

-Pin A1: Capteur d'hygrométrie

-Pin A2: Capteur d'humidité du sol

-Pin A3: Détecteur de pluie

Programmation du ArduinoFIO
Nous allons maintenant programmer notre ArduinoFIO afin de lire les valeurs mesurées sur les pins A0, A1, A2 et A3, les mettre en forme et les envoyer via les modules Xbee à notre machine "locale". Le code arduino compilé dans notre ArduinoFIO est le suivant:

Installation de Node-RED
Nous utiliserons npm pour installer Node-Red sur notre machine locale. Dans un terminal, entrer: sudo npm install node-red

Nous aurons besoin de créer un noeud "serialport" pour recevoir les données du module Xbee distant. Nous aurons besoin du module node-red-serialport cd ~/.node-red sudo npm install node-red

Création des noeuds Node-RED
Lancer le serveur node-red. Dans un terminal, entrer: node-red Il est maintenant accessible sur le port 1880 de notre machine locale ("localhost"). Ci-contre, une capture d'écran de nos noeuds Node-RED et les configurations qui leurs sont associées.

Serveur AWS ("distant")
Pour la suite nous avons créé un compte AWS ainsi qu'une instance EC2-Linux. Après avoir lancé notre instance EC2, nous pouvons maintenant nous y connecter et y installer et configurer les services TICK ("Telegraf-InfluDB-Chronograf-Kapacitor"). Mais avant cela, commençons par installer le broker MQTT Mosquitto.

Installation de Mosquitto
Dans le terminal connecté à l'instance EC2, entrer: // Installation de Mosquitto sudo apt-get install mosquitto

// Lancer mosquitto mosquitto Mosquitto est ainsi actif sur notre instance EC2 (port 1883).

Installation de InfluxDB, Telegraf et Chronograf
Pour installer ces services, entrer dans le terminal (celui connecté à l'instance EC2): // Téléchargement et installation de Telegraf wget http://get.influxdb.org/telegraf/telegraf_0.12.0-1_amd64.deb sudo dpkg -i telegraf_0.12.0-1_amd64.deb

// Téléchargement et installation de InfluDB wget https://s3.amazonaws.com/influxdb/influxdb_0.12.1-1_amd64.deb sudo dpkg -i influxdb_0.12.1-1_amd64.deb

// Téléchargement et installation de Chronograf wget https://s3.amazonaws.com/get.influxdb.org/chronograf/chronograf_0.12.0_amd64.deb sudo dpkg -i chronograf_0.12.0_amd64.deb Une fois ces services installés, nous allons maintenant les configurer.

Configuration de Telegraf
Nous allons commencer par créer un fichier de configuration pour notre service. telegraf -sample-config -input-filter mqtt_consumer -output-filter influxdb > telegraf.conf Avec cette commande, nous avons créé un fichier "telegraf.conf" à partir de la configuration par défaut de telegraf mais uniquement avec les sections qui nous intéressent : La section "INPUT PLUGINS" sera modifiée de la sorte:
 * en "input", le service "mqtt_consumer" pour intercepter les entrées émises via le broker MQTT Mosquitto de notre instance EC2
 * en "output", le service "influxdb" pour mettre en forme ces entrées et les stocker dans InfluxDB. Il faut noter que Telegraf y créera par défaut une table "telegraf" que nous exploiterons.

Nous n'avons pas besoin de modifier la section "OUTPUT PLUGINS" car telegraf est configuré par défaut pour stocker les entrées séries dans InfluxDB (notamment dans la table "telegraf").

Note : Il ne serait pas inutile de se documenter un peu plus sur la configuration détaillée de telegraf.

Configuration de InfluxDB
Nous n'avons pas besoin de configuration particulière à effectuer pour InfluxDB, la configuration par défaut suffit amplement.

Chronograf
La configuration et l'utilisation de Chronograf n'est pas compliquée. Elles sont d'autant plus simple que nous avons gardé les configuration par défaut de Telegraf et InfluxDB. Le lien suivant détaille parfaitement la procédure à suivre pour configurer Chronograf et créer nos visualisations et "Dashboard". Petit rappel : nous avons gardé la configuration initiale de Telegraf. Nous exploiterons la database "telegraf" de InfluxDB, créée par défaut par Telegraf. Note : Pour accéder à chronograf depuis l'extérieur de notre instance EC2, penser à modifier son fichier de configuration à cet effet (par défaut "/opt/chronograf/config.toml").

Lancement de nos services
Il ne nous reste plus qu'à lancer nos services Telegraf, InfluxDB et Chronograf: // Lancer InfluDB sudo service influxdb start

// Lancer Chronograf sudo service chronograf start

// Lancer Telegraf sudo service influxdb start

// Lancer la capture des entrées Xbee par Telegraf (en utilisant notre fichier de configuration édité précédemment) telegraf -config myTelegraf.conf Une fois les services lancés, la capture des données commence. Il ne nous reste plus qu'à visualiser ces données avec Chronograf. Chronograf est accessible sur le port :10000 de notre instance EC2.

=Expérimentations et Résultats=

Voici quelques captures d'écran de notre dashboard:

Fichier vidéo ".zip" à télécharger

Lien vidéo youtube ICI.

=Références=