Salut
J'étais en balade ce week-end avec juste une tablette (Papa Noël est passé par là) et c'est quand même pas top pour faire des réponses longues... Je crois que le bon vieux clavier/souris n'est pas encore mort
numero_744:
Salut, merci pour ta réponse et bonne année (on est en 2013, déjà ?).
Bonne Année, Bonne Santé, plein de petites arduino par-ci, par-là XD
J'ai la librairie, mais mon problème, c'est les tutos en français...
J'ai regardé les exemples et je ne comprend pas pourquoi il n'y a que
webserver.processConnection();
dans le loop(),
Il faut comprendre que Webduino fonctionne (un peu) comme un (vrai) serveur Web. C'est à dire qu'il va travailler en "tâche de fond" comme un daemon sous Linux ou un service sous Windows. C'est à dire comme un programme qui tourne caché et qui gère ces choses pour toi.
Comme l'Arduino n'est pas multi-tâche (au sens d'un système d'exploitation qui se débrouille pour donner la main par tranche de temps un peu à tous les programmes), il faut que tu lui donne un peu de temps pour travailler en appellant la fonction de gestion ci-dessus dans la loop().
Dans cette fonction, Webduino va regarder s'il y a des connexions Web entrante, gérer les requêtes et faire le boulot. Sinon il te rend la main.
Corolaire : si tu n'appelle pas cette fonction, Webduino est en sommeil et ne faire rien....
Il faut donc impérativement que la boucle loop() tourne et appelle la fonction ci-dessus régulièrement.
ni ce que font
webserver.setDefaultCommand();
et
webserver.addCommand();
dans le setup().
Le principe est que Webduino va gérer toute la partie protocole du HTTP.
Quand une connexion va arriver, il va écouter ce qu'on lui demande et faire une bonne partie du boulot (toute l'analyse des messages)
Mais quelque part, il ne peut pas deviner que qu'il doit faire réellement pour traiter chaque demande.
C'est pour cela que tu va lui fournir une fonction de traitement (ce qu'on appelle aussi un call-back) appellée "command" dans Webduino.
La fonction setDefaultCommand() permet d'indiquer à Webduino qu'elle est TA fonction qui va réagir à la requète sur "http://ip.arduino/"
La fonction addCommand() permet d'indiquer TES fonctions pour les autres requêtes. Ainsi tu peux aussi définir des fonctions pour traiter "http://ip.arduino/getTemp" qui va par exemple être la fonction qui va retourner (en JSON) la température. D'ailleurs la requête peut comporter des paramètres "http://ip.arduino/getTemp?piece=salon".
Tu déclares à Webduino de la façon suivante :
webserver.addCommand("getTemp", &getTemp);
où getTemp() est ta fonction qui va traiter la requête "http://ip.arduino/getTemp"
Webduino appelle cette fonction chaque fois que quelqu'un fait une requête sur "http://ip.arduino/getTemp"
Dans cette fonction tu va pouvor demander à Webduino si la requête contient des paramètres, leur valeur.
Aussi le type de requête (GET avec les paramètres dans la requête ?xx=12&yy=33 ou bien POST avec les paramètres dans le corps de la requête).
L'exemple Web_demo.ino montre ceci.
Ensuite, AJAX est la requête et JSON est ce qui est renvoyé ?
Exact : AJAX est la technique pour faire des requêtes HTTP depuis le code Javascript. JQuery est par exemple une lib Javascript qui simplifie l'écriture de requête AJAX. Tu pourra t'y plonger après.
JSON est la syntaxe pour renvoyer des résultats qui peuvent être directement interprétés comme du code Javascript.
Un exemple :
Un PC fait une requête GET /Bonjour, l'Arduino enregistre "Bonjour".
Puis, un PC fait une requête GET / (vide), l'Arduino renvoie en JSON la variable "message" qui a comme valeur "Bonjour".
Pour que l'Arduino traite la requête GET /bonjour, il faut que tu ais fait un addCommand( "bonjour", maFonctionBonjour )
Et dans maFonctionBonjour() tu réponds "{ result='Bonjour' }" par exemple pour que ta variable result (dans le Javascript) prenne la valeur 'Bonjour'.
Pas besoin de double requête.