Commander une LED Wifi
Nous avons vu dans le chapitre [..] comment la carte ESP 8266 peut se connecter à un point d'accès Wifi. Nous nous fixons comme objectif de connecter l'ESP 8266 au même réseau qu’un smartphone ou un ordinateur pour commander une LED. Pour ce faire, nous allons configurer l'ESP 8266 afin d'offrir un service. Dans un premier temps nous offrirons une page Web à l'utilisateur. Elle permettra de commander la LED incorporée sur votre plaque de développement ESP 8266.
Sur la carte de développement, comme l'ESP-12F, est soudée une LED. Cette LED est celle qui clignote faiblement quand vous téléversez une programme. C'est également celle qui clignote avec le programme blink led. Techniquement parlant, cette LED est branchée sur le port GPIO 16. Mais il n'est pas forcément nécessaire de connaître cette valeur par cœur car nous utiliserons dans le code la constante (mot clé défini dans l'IDE ARDUINO) LED_BUILTIN
.
..
Jusqu'à présent nous avons utiliser l'ESP pour présenter une page Web, fournir un moyen de commander la LED et informer de l'état de la LED. Dans les objets connectés il n'est pas nécessaire de présenter une page Web car celle-ci est fournie par un service centralisé comme Domoticz ou OpenHAB.
#include <ESP8266WiFi.h> const char* ssid = "MON-REZO-WIFI"; const char* password = "leMotDePasseDuRezoWifi"; int ledPin = 16; // Déclaration du Server sur le port 80 WiFiServer server(80); void setup() { // initialisation de la communication série Serial.begin(115200); delay(100); // initialisation de la sortie pour la LED int valeurLED = HIGH; pinMode(ledPin, OUTPUT); digitalWrite(ledPin, valeurLED); // Connexion wifi Serial.println(); Serial.print("Connexion au réseau Wifi "); Serial.println(ssid); WiFi.begin(ssid, password); // connexion en cours ... while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } // Wifi connecter Serial.println("Réseau WIFI connecté"); // Démmarrage du serveur. server.begin(); Serial.println("Serveur démarré !"); // Affichage de l'adresse IP Serial.print("Utiliser cette adresse URL pour la connexion : "); Serial.print("http://"); Serial.print(WiFi.localIP()); Serial.println("/"); } void loop() { // Attente de connexion d'un client client = server.available(); if (!client) { return; } // Attendre si le client envoie des données ... Serial.println("nouveau client"); while(!client.available()){ delay(1); } String request = client.readStringUntil('\r'); Serial.println(request); client.flush(); if (request.indexOf("/LED=ON") != -1) { valeurLED = LOW; digitalWrite(ledPin, valeurLED); // allumer la led } if (request.indexOf("/LED=OFF") != -1) { valeurLED = HIGH; digitalWrite(ledPin, valeurLED); // éteindre la led } // Réponse client.println("HTTP/1.1 200 OK"); client.println("Content-Type: application/json"); client.println(""); if(valeurLED == LOW) { client.println("{\"LED\": \"on\"}"); } else { client.println("{\"LED\": \"off\"}"); } Serial.println("Client déconnecté"); Serial.println(""); }