server.on("/", handleRoot);
exécutera la fonction //handleRoot// lorsqu'un tentera de se connecter à l'adresse//%%/%%// qui correspond à la racine du serveur : c'est ce qu'on appelle une **route**. Les routes doivent toutes être déclarées dans le //setup// et ne peuvent être ajoutées dynamiquement.
Les fonctions appelées par les routes contiennent toutes un server.send(CODE, MIME, VALEUR)
permettant au serveur de répondre. En effet, lorsqu'on tente d'accéder à une page web notre navigateur envoie une //requête GET// au serveur qui lui réponds en lui renvoyant la page html désirée. Dans ce cas, le CODE de la réponse est //200 (success)//, le type MIME des données sera //text/html// et sa VALEUR contiendra tout le code HTML nécessaire pour afficher la page. En l'absence de réponse au bout d'un certain temps, le navigateur considérera que le serveur est hors ligne et affichera une page d'erreur. Le type MIME permet au navigateur de savoir comment interpréter les données reçues (est-ce un texte, une vidéo, du code javascript ?)
Pour info, voici la liste des [[https://fr.wikipedia.org/wiki/Liste_des_codes_HTTP | codes HTTP]] et celle des [[https://fr.wikipedia.org/wiki/Type_de_m%C3%A9dias | types MIME]] existants.
===== contrôler une LED =====
On cherche à présent à allumer la LED intégrée à l'ESP8266 en se connectant à l'adresse **/on** puis à l'éteindre en visitant **/off** Il nous suffit donc de créer deux fonctions, une pour l'allumer et une pour l'éteindre, que l'on insérera au début du code, avant le //setup// :
void handleLedON() {
digitalWrite(led, LOW); // allumage de la led embarquée sur l'ESP8266
server.send(200, "text/plain", "led allumee"); // le serveur doit toujours répondre quelque chose (ici requête 200=success)
}
void handleLedOFF() {
digitalWrite(led, HIGH);// extinction de la led
server.send(200, "text/plain", "led eteinte");
}
Ces fonctions doivent être à présent attachées aux URL souhaitées, on ajoute donc deux routes dans le //setup// :
server.on("/on", handleLedON);
server.on("/off", handleLedOFF);
et le tour est joué.
[[https://github.com/reso-nance/INITs/tree/master/ESP8266-ServeurWeb/HelloServerLED | télécharger le code]]
===== lire un potentiomètre =====
==== page statique ====
On a vu comment afficher du texte, il semble donc assez simple d'afficher la valeur d'un potentiomètre sur une page web : on crée une fonction qui lit le port analogique et renvoie la valeur du potentiomètre sous forme d'une chaîne de caractère :
void handlePotentiometer() {
unsigned int potValue = analogRead(A0);
server.send(200, "text/plain", "valeur du potentiometre :" + String(potValue));
}
puis on ajoute une route au //setup// :
server.on("/pot", handlePotentiometer);
et on visite la page **%%
potentiomètre
valeur du potentiomètre :