M2 IADE : Smart Environments
TP Objets connectés, Internet des objets, Web des objets
Objectifs pédagogiques
Comprendre la problématique liée à la conception et au développement d'une application multi-couches, impliquant :
- la conception d'objets physiques
- la programmation sur des objets physiques
- leur connexion à Internet
- leur mise à disposition sur le Web
Description de l'application
Dans ce TP, vous allez concevoir une application WoT (Web des objets) permettant l'arrosage intelligent des plantes d'un jardin. Il s'agit d'une application Web destinée à être utilisée depuis un navigateur mobile et capable de décider s'il faut arroser des plantes et si oui, de choisir le meilleur moment pour le faire. Pour cela, elle a à sa disposition :
- un capteur de luminosité (l'arrosage se fait uniquement de nuit)
- un capteur de température (pour déterminer la quantité d'eau nécessaire)
- un service de prévisions météo (par exemple : OpenWeatherMap, pour déterminer si des précipitations sont prévues)
- un capteur GPS situé sur le navigateur Web de l'utilisateur (accessible par la Geolocation API, afin de localiser la position du jardin pour l'interrogation du service météo)
- un moteur (qui actionne la pompe à eau pour l'arrosage)
Vous devrez développer l'application de façon à ce qu'elle enregistre la position du jardin et qu'elle décide automatiquement de la mise en route de l'arrosage et de son intensité (le moteur tournera d'un angle plus ou moins grand en fonction de la quantité d'eau). Un feedback utilisateur (sur l'objet et dans l'interface Web) permettra de savoir quand elle a déclenché l'arrosage et la quantité d'eau consommée. L'utilisateur aura à sa disposition un moyen simple (slider, pourcentage) de spécifier le besoin en eau moyen des plantes de son jardin.
Nous imposons les contraintes suivantes pour la conception de l'application :
- Les deux capteurs et l'actionneur seront accessibles à travers un objet physique dont le contrôleur sera un Arduino Uno
- Vous relierez cet objet à une machine qui jouera le rôle de passerelle Internet (très probablement en USB)
- L' "intelligence" (le métier de l'application) sera complètement déportée sur la passerelle ou sur le client
- Les communications entre le client et le serveur qui représente l'objet sur le Web utiliseront des standards du Web (REST / WebSocket)
Déroulement du TP
Ce TP se déroule par équipes de 5 étudiants, définies à la fin du CM du mardi 12 janvier 2016. Vous vous répartirez les rôles à l'intérieur de chaque équipe pour faire en sorte que le projet avance plus vite.
Outils
Matériel
Pour ce TP, chaque équipe dispose d'un Arduino Starter Kit, contenant principalement :
- une carte Arduino Uno
- une "breadboard" (littéralement : planche à pain), sur laquelle vous allez pouvoir câbler vos composants
- un jeu de composants (capteurs et actionneurs)
- un livre contenant de la documentation, et des exemples de projets
Quelques lien utiles vers la documentation :
Logiciel
Côté objet :
Côté passerelle (Java) :
- Eclipse IDE
- lire le port série en Java
Remarque : pour Windows 64bits, télécharger la librairie RXTX version 2.2pre2 (et non la 2.1 stable)
- Un fichier Maven pom.xml déjà configuré pour un projet Web intégrant la bibliothèque de gestion de la liaison série par USB et une autre bibliothèque de sérialisation/désérialisation en JSON
Remarque : côté passerelle, vous n'êtes pas obligés d'utiliser du Java, mais si vous choisissez un autre langage, il faudra vous débrouiller tous seuls pour cette partie du projet...
Conception de l'objet
La première étape est de choisir dans le livre accompagnant le starter kit, les capteurs et actionneurs que vous allez utiliser. Profitez-en pour imaginer un scénario correspondant à une application aussi plausible que possible.
Vous réutiliserez les parties de montage liées à ces capteurs et actionneurs (i.e. toute la partie qui relie le matériel aux pôles + et - de la breadboard) comme elles sont présentées dans le livre.
L'Arduino UNO possède des entrées analogiques sur la gauche et des E/S numériques sur la droite. Reliez les capteurs et actionneurs à la carte Arduino.
Création d'un sketch Arduino
Vous allez maintenant créer un petit programme ("sketch") pour contrôler l'Arduino. Vous trouverez tous les détails dans la documentation du langage (voir Arduino Language Reference, plus haut).
Quelques points essentiels du langage
Un sketch se compose au moins des deux fonctions setup() (initialisation) et loop() (fonctionnement nominal).
- Durant l'initialisation, vous devez spécifier quelles E/S numériques vous utilisez et si elles sont en lecture ou en écriture, à l'aide de l'instruction pinMode()
- En fonctionnement nominal, la fonction loop boucle indéfiniment sur le même contenu. Vous pouvez utiliser les fonctions analogRead(), analogWrite(), digitalRead() et digitalWrite() pour échanger avec les capteurs et les actionneurs.
Remarque : AnalogWrite n'est pas réellement une sortie analogique, mais fonctionne par modulation des impulsions envoyées aux composants (Pulse Width Modulation) pour simuler une tension variable.
- Vous devrez également utiliser le port série (USB) pour dialoguer avec l'ordinateur maître. Pour cela, vous pouvez :
Remarques
- Comme vous ne pouvez pas faire de programmation événementielle, il faut utiliser la méthode Serial.available() pour tester le déclenchement de la réaction de l'Arduino aux messages renvoyés par la passerelle sur le port série, à chaque exécution de la méthode loop()
- Vous disposez d'un moniteur série qui vous permet de voir ce qui est envoyé par l'arduino et de lui envoyer des messages, en, cliquant sur la loupe en haut à droite de la fenêtre de l'IDE
Le reste est ensuite de la programmation en C...
Création de l'intelligence déportée
Cette section concerne le "métier" de votre application. Compte tenu du fait que vous choisissez vous-mêmes le scénario, vous n'y trouverez que des indications générales pour vous synchroniser avc les autres parties du projet.
- Mettez au point, entre les personnes qui gèrent les softs côté objet et côté passerelle, le protocole de comunication à travers la liaison série (i.e. le format des messages échangés)
- Récupérez les messages de l'Arduino
- Traitez-les en fonction du métier de votre application. Pour cela, utilisez les techniques que avez apprises au cours de votre formation. Vous pouvez par exemple appliquer des algos d'IA et/ou tirer parti de la connexion de la passerelle à Internet et au Web pour utiliser de l'information disponible sur le Web
- En fonction du déroulement du métier de votre application, renvoyez à l'Arduino les messages correspondants, pour lui permettre de se comporter en conséquence
Il est conseillé de mettre en place des procédures de test à la fois côté Arduino et côté passerelle, pour vous permettre d'avancer en parallèle.
Encapsulation
Il s'agit ici de réaliser l'interface d'accès à votre objet, conformément à votre scénario applicatif. Pour cela, vous êtes libres d'utiliser les technos Web que vous connaissez :
- Scripting côté serveur
- Utilisation de bibliothèques de code (notamment AJAX)
- WebSockets
- ...
Instructions de rendu
Le rendu s'effectuera sous la forme d'une démonstration et d'une revue de code à la fin de la seconde séance de TP. Par conséquent, ce TP ne dure pas 4h, mais 3h, compte tenu de cette dernière phase.