Commander un Arduino avec une tablette Android

- Etude de cas -


précédentsommairesuivant

VIII. Implémentation de la couche [métier] du serveur

Image non disponible

VIII-A. Le projet Eclipse

Image non disponible
  • en [1] le projet Eclipse est un projet Maven [2] ;
  • en [3], les dépendances Maven. On remarque la dépendance sur les deux projets précédents [domotique-entities] et [server-dao] ;
  • en [4], le code source de la couche [métier].

VIII-B. Les dépendances Maven

Le fichier [pom.xml] du projet Maven est le suivant :

 
CacherSélectionnez
  • lignes 5-8 : l'identité Maven du projet ;
  • lignes 18-22 : il n'y a qu'une dépendance, celle sur le projet [server-dao] de la couche [DAO]. Les autres dépendances en découlent en cascade.

VIII-C. Le code

L'interface [] de la couche [metier] est la suivante :

 
CacherSélectionnez
  • ligne 10 : pour lire la valeur d'une pin d'un Arduino :
  • idCommande : identifiant de la commande - une chaîne de caractères quelconque qui permettra de retrouver la réponse dans des logs. La réponse reprend en effet l'identifiant de la commande,
  • idArduino : l'identifiant de l'Arduino à qui est destinée la commande,
  • pin : le n° de la pin à lire,
  • mode : le mode de lecture : " a " pour analogique, " b " pour binaire ;
  • ligne 12 : pour écrire une valeur sur la pin d'un Arduino :
  • idCommande : identifiant de la commande,
  • idArduino : l'identifiant de l'Arduino à qui est destinée la commande,
  • pin : le n° de la pin à écrire,
  • mode : le mode d'écriture : " a " pour analogique, " b " pour binaire,
  • val : la valeur à écrire sur la pin ;
  • ligne 14 : pour faire clignoter une led d'un Arduino :
  • idCommande : identifiant de la commande,
  • idArduino : l'identifiant de l'Arduino à qui est destinée la commande,
  • pin : n° de la pin à laquelle est reliée la led,
  • millis : durée en millisecondes d'un clignotement,
  • nbIter : le nombre de clignotements à opérer ;
  • lignes 8, 16, 18 : correspondent aux méthodes de mêmes noms dans la couche [DAO].

 : écrire la classe [Metier] qui implémente l'interface [IMetier]. On lira auparavant les informations ci-dessous.

Pour les différentes méthodes, les chaînes JSON à envoyer à l'Arduino sont les suivantes :

Méthode

commande JSON envoyée à l'Arduino

Signification

pinRead

{"id":"0","parametres":{"pin":"3","mod":"b"},"action":"pr"}

lire (action) la pin 3 (pin) en mode binaire (mod)

pinWrite

{"id":"0","parametres":{"val":"200","pin":"8","mod":"a"},"action":"pw"}

écrire (action) la valeur 200 (val) sur la pin 8 (pin) en mode analogique (mod)

faireClignoter

{"id":"1","parametres":{"nb":"100","dur":"200","pin":"8"},"action":"cl"}

faire clignoter (action) la pin 8 (pin) 100 fois (nb) avec une période de 200 ms (dur)

L'objet [Commande] correspondant à la chaîne JSON de la méthode [pinRead] de l'exemple ci-dessus est le suivant :

Champ

JSON

String id

"id":"0"

String action

"action":"pr"

Map<String,String> parametres

"parametres":{"pin":"3","mod":"b"}

On respectera les contraintes suivantes :

Méthode

 

pinRead

  • le mode doit être " a " (analogique) ou " b " (binaire) ;
  • en mode analogique, le N° de pin doit être dans l'intervalle [0,5] ;
  • en mode binaire, le N° de pin doit être dans l'intervalle [1,13].

pinWrite

  • le mode doit être " a " (analogique) ou " b " (binaire) ;
  • le N° de pin doit être dans l'intervalle [1,13] ;
  • en mode binaire, la valeur doit être 0 ou 1 ;
  • en mode analogique, la valeur doit être dans l'intervalle [0,255].

faireClignoter

  • le N° de pin doit être dans l'intervalle [1,13] ;
  • la durée du clignotement doit être un entier >0

Si une contrainte n'est pas vérifiée, la méthode lancera une exception de type [DomotiqueException].

VIII-D. Tests de la couche [métier]

Dans le dossier [support] du TP, vous trouverez un projet Eclipse qui va vous permettre de tester les différents éléments du serveur :

Image non disponible
  • en [1] : le projet console de tests ;
  • en [2] : les classes de test de la couche [métier].

Examinons le programme [Clignoter] qui fait clignoter une led :

 
CacherSélectionnez
  • ligne 9 : le programme se lance avec trois arguments. Ceux-ci sont expliqués ligne 11 ;
  • lignes 11-63 : la validité des trois arguments est vérifiée ;
  • ligne 66 : la couche [métier] est instanciée à l'aide du fichier de configuration [metierContext.xml] suivant :
Image non disponible
 
CacherSélectionnez
  • lignes 6-20 : on retrouve la configuration de la couche [DAO] déjà expliquée ;
  • lignes 22-24 : configuration de la couche [métier]. Celle-ci a une référence sur la couche [DAO] (ligne 23) ;

Retour au code du test :

  • ligne 69 : la liste des Arduinos connectés est demandée à la couche [métier] ;
  • lignes 70-75 : si celle-ci est vide, elle est redemandée toutes les secondes ;
  • lignes 77-79 : on envoie la commande de clignotement à tous les Arduinos connectés à l'aide de la méthode [faireClignoter] de la couche [métier].

Les autres tests ont un code analogue.

Travail à faire  : Assurez-vous que votre couche [métier] passe tous les tests.

Note : Pour passer des arguments à un programme, il faut créer une configuration d'exécution. Voici un exemple :

Image non disponible

Ce processus a été décrit au paragraphe , page .


précédentsommairesuivant

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2013 Serge Tahé. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.