M2 IA : 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 :
- le développement 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). L'objectif de cette application sera de permettre à un utilisateur d'accéder aux capteurs et de contrôler les actionneurs d'un objet connecté depuis un navigateur Web. Vous êtes libres de proposer le scénario applicatif de votre choix autour de l'utilisation de cet objet.
Nous imposons les contraintes suivantes pour la conception de l'application :
- Vous utiliserez un objet physique dont le contrôleur sera un Arduino Uno et qui sera relié à au moins un capteur et un actionneur
- 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
- Les communications entre le client et le serveur qui représente l'objet sur le Web utilisent des standards du Web (REST / WebSocket)
Déroulement du TP
Ce TP se déroule par équipes de 4 étudiants. Vous vous répartirez les rôles à l'intérieur de chaque équipe pour faire en sorte que le projet avance plus vite.
Chaque équipe devra choisir un scénario applicatif. Au besoin, les encadrants pourront prooposer un sujet pour accélérer ce choix.
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
- Pour la tranquilité du TP Merci d'éviter d'utiliser le beeper piezo ;-)
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.