Technologies Web synchrones et multi-dispositifs
This project is maintained by aurelient
L’objectif du TP est de vous faire développer une application Web of Things (WoT), qui utilise un arduino Uno, avec capteurs et actionneurs.
Le use case choisi est un système de limitation d’accès à un environnement physique (en clair : une porte), contrôlé par un système d’ouverture et de fermeture par vibrations sonores (quand on frappe) ou à distance (authentification).
La porte est matérialisée par un servo-moteur, et la détection de vibrations sonores est obtenus par un capteur piézo-électrique.
Pour cela, vous utiliserez :
La première étape est d’installer les drivers arduino, qui sont inclus dans le Arduino Create Plugin. Branchez ensuite l’arduino Uno en USB, et voyez s’il est reconnu par votre PC.
Alternativement, vous pouvez installer un IDE qui inclut les drivers et vous permet de tester facilement que votre board est connectée et reconnue (menu Fichiers -> Exemples -> Basics -> Blink, puis “téléverser”, et la LED doit clignoter).
Johnny-five est en fait un client JS qui implémente le protocole Firmata. Pour pouvoir contrôler une board arduino avec cette bibliothèque, il faut donc déployer (“téléverser”) le firmware StandardFirmataPlus
sur la board.
Pour cela, ouvrir l’IDE arduino et :
La méthode qui a marché pour moi sous Windows : selon la procédure indiquée ici, dans un powershell en mode administrateur, taper : npm --add-python-to-path install --global --production windows-build-tools
Puis, cloner le repo dans TP4 et lancer : node index.js
Vous devriez voir la LED clignoter.
Le montage est schématisé ainsi :
Dans ce TP, il vous est demandé de réaliser une application Web et non le sketch arduino de référence.
L’étape suivante est de réaliser le circuit ci-dessous, comme indiqué ici. Apparemment, le code est un peu buggé, mais c’est juste pour tester votre montage.
Note : pour les moteurs Tower Pro MG90S (IGA), le schéma de montage en fonction des couleurs des files est ici.
Pour mieux comprendre le fonctionnement du circuit et de l’arduino, vous pouvez vous aider du livre “Arduino Project Book” fourni avec le starter kit, ou des ressources sur le site arduino.cc.
À l’aide de Johnny-Five, vous allez mettre en place dans votre projet un module en JS qui expose les capacités (foncions JS) suivantes :
Remarque : le module “piezo” de Johnny-Five est un actionneur, destiné à produire des sons (au demeurant très désagréables). Il n’existe pas de module utilisant le piezo en tant que capteur. C’est pourquoi vous utiliserez le module générique Sensor
en vous inspirant du sketch arduino pour les paramètres d’initialisation.
Installez et mettez en place dans votre projet un serveur Socket.IO qui expose des fonctionnalités applicatives :
/door
avec un paramètre position
(GET et PUT)/knock
, en permettant de s’abonner (POST) / se désabonner (DELETE) et de récupérer les événements (WebSocket)/unlock
répondant uniquement aux requêtes POST et prenant un paramètre code
qui s’il est valide déclenchera l’ouverture de la porte puis sa fermeture au bout de 5 secondesVotre serveur sera basé sur un pattern MV* “classique”, avec cette spécificité que le modèle sera le module d’interface avec l’arduino : il permet de récupérer les données des capteurs et de transmettre les ordres aux actionneurs.
Le Content-Type des requêtes et des réponses sera application/json
.
Utilisez le framework JS de votre choix pour :
Faites en sorte que votre serveur serve aussi les fichiers statiques du client pour éviter les problèmes de CORS.
Vous allez maintenant faire en sorte que votre objet puisse être utilisé par d’autres clients que le vôtre, en fournissant une description standardisée de son API, conformément à la spec WoT Thing Description (TD) du W3C.
Créez un fichier de description de votre arduino en tant que Thing
, qui exposera les capacités simples de l’objet indiquées ci-dessus et exposées par votre serveur à l’aide d’InteractionAffordance
:
ActionAffordance
: permet de modifier l’état de la porte,PropertyAffordance
: expose l’état courant de la porte,EventAffordance
: permet de s’abonner, de se désabonner aux événements “knock” et définit le format des données dans cet événementNe tenez pas compte pour l’instant de la fonctionnalité unlock
.
Pour réaliser votre fichier, vous pouvez vous inspirer des exemples de l’introduction de la spec WoT TD.
Pour valider votre fichier, vous pouvez utiliser le validateur du Playground d’Eclipse ThingWeb.
Si votre fichier est valide, vous devez pouvoir le publier sur l’annuaire de TD fourni par le W3C : ThingWeb Directory, un annuaire “fait maison” dont nous avons déployé une instance sur l’infra OpenStack, à l’URL http://192.168.75.13:8080/TD/. Pour accéder à cette machine de l’extérieur, vous pouvez passer par notre proxy : https://proxy-tps-m1if13-2019.univ-lyon1.fr/13/TD/ (le slash à la fin est nécessaire).
Modifiez votre client pour qu’il requête sa TD dans cet annuaire et utilise cette TD pour :
Le TP est réalisé par groupe de 4. Il est évalué sur une base binaire PASS/FAIL + sur une soutenance qui aura lieu le mardi 4 février 2020 après-midi. IL compte pour 10% de la note de TP totale.
Les critères d’évaluation sont les suivants pour avoir un PASS:
npm run build
construit le projetnpm run start
lance le serveur et permet de tester le projet.