Accueil > NodeMCU > NodeMCU : serveur WEB la suite

NodeMCU : serveur WEB la suite

Voici la suite de l’article précédent qui consiste à allumer ou éteindre la LED interne de l’ESP-12E.

Cette fois-ci on va implémenter 2 boutons sur la page WEB qui permettront d’éteindre ou allumer la LED au lieu d’effectuer une requête.
La page WEB obtenue est celle-ci :
serveur web

Le programme modifié sera le suivant :

 

/*
* Programme qui permet d’allumer ou d’éteindre la LED du module ESP-12E sur le NodeMCU
* à partir d’une page HTML et également d’afficher sur l’écran OLED l’état de la LED
*
*/

// Ajout librairie gestion OLED et I2C
#include <Wire.h>
#include « SSD1306.h »
// Déclaration de l’afficheur OLED via I2C
// D1 -> SDA
// D2 -> SCL
SSD1306 display(0x3c, D1, D2);

 

// Ajout librairie gestion WIFI
#include « ESP8266WiFi.h »

// Ajout librairie Web Server
#include <ESP8266WebServer.h>

// Déclaration WIFI pour la connexion
const char* ssid = « ssid_wifi »;
const char* password = « mot_de_passe »;

// Création d’une instance serveur
ESP8266WebServer server(80); // port d’écoute 80
// Création de la page HTML
static const char *indexhtml = « <html>\n »
« <fieldset> <legend>Contr&ocirc;le de la LED</legend>\n »
« <form action=\ »/\ » method=\ »POST\ »>\n »
« <input type=\ »submit\ » name=\ »led_on\ » value=\ »LED ON \ »>\n »
« </form>\n »
« <form action=\ »/\ » method=\ »POST\ »>\n »
« <input type=\ »submit\ » name=\ »led_off\ » value=\ »LED OFF\ »>\n »
« </form>\n »
« </fielset>\n »
« <p>\n »
« </html>\n »;

void dessine_led(boolean status)
{
display.clear();
display.drawLine(20, 60, 20, 40);
display.drawLine(31, 60, 31, 40);
display.drawLine(16, 40, 35, 40);
display.drawLine(16, 40, 16, 20);
display.drawLine(35, 40, 35, 20);
display.setPixel(25, 10); display.setPixel(26, 10);
display.setPixel(24, 10); display.setPixel(27, 10);
display.setPixel(23, 11); display.setPixel(28, 11);
display.setPixel(22, 11); display.setPixel(29, 11);
display.setPixel(22, 12); display.setPixel(29, 12);
display.setPixel(21, 12); display.setPixel(30, 12);
display.setPixel(20, 13); display.setPixel(31, 13);
display.setPixel(19, 14); display.setPixel(32, 14);
display.setPixel(18, 15); display.setPixel(33, 15);
display.setPixel(18, 16); display.setPixel(33, 16);
display.setPixel(17, 17); display.setPixel(34, 17);
display.setPixel(17, 18); display.setPixel(34, 18);
display.setPixel(16, 19); display.setPixel(35, 19);
if (status == true) // LED allumée
{
display.drawVerticalLine(25, 9, 31); display.drawVerticalLine(26, 9, 31);
display.drawVerticalLine(24, 9, 31); display.drawVerticalLine(27, 9, 31);
display.drawVerticalLine(23, 10, 30); display.drawVerticalLine(28, 10, 30);
display.drawVerticalLine(22, 10, 30); display.drawVerticalLine(29, 10, 30);
display.drawVerticalLine(22, 11, 29); display.drawVerticalLine(29, 11, 29);
display.drawVerticalLine(21, 11, 29); display.drawVerticalLine(30, 11, 29);
display.drawVerticalLine(20, 12, 28); display.drawVerticalLine(31, 12, 28);
display.drawVerticalLine(19, 13, 27); display.drawVerticalLine(32, 13, 27);
display.drawVerticalLine(18, 14, 26); display.drawVerticalLine(33, 14, 26);
display.drawVerticalLine(18, 15, 25); display.drawVerticalLine(33, 15, 25);
display.drawVerticalLine(17, 16, 24); display.drawVerticalLine(34, 16, 24);
display.drawVerticalLine(17, 17, 23); display.drawVerticalLine(34, 17, 23);
display.drawVerticalLine(16, 18, 22); display.drawVerticalLine(35, 18, 22);
}
}

void page_html()
{
if ((server.hasArg(« led_on »)) || (server.hasArg(« led_off »))) { traite_led(); } // on vérifie l’argument renvoyé
else { server.send(200, « text/html », indexhtml); } // affiche la page HTML
}

void traite_led()
{
display.clear();
if (server.hasArg(« led_on »))
{
digitalWrite(2, LOW); // allume la LED interne
dessine_led(true);
display.drawString(55, 20, « LED ON »);
}
if (server.hasArg(« led_off »))
{
digitalWrite(2, HIGH); // éteint la LED interne
dessine_led(false);
display.drawString(55, 20, « LED OFF »);
}
display.display();
server.send(200, « text/html », indexhtml); // affiche la page HTML
}

void page_html_non_trouve()
{
server.send(200, « text/html », « page non existante »);
}

void setup()
{
int x = 0;
char adr_ip[20]; // contient l’adresse IP fournit par le point d’accès WiFi
IPAddress ip; // définition de la variable ip qui est une adresse IP
String ipStr; // chaine de caractères qui contient l’adresse IP à afficher sur l’écran OLED
display.init(); // initialise l’afficheur OLED
display.flipScreenVertically(); // inverse l’affichage
display.setFont(ArialMT_Plain_10); //définit la police et la taille
WiFi.mode(WIFI_STA); // configure le WIFI en mode station
WiFi.begin(ssid, password); // connexion au point d’accès WiFi
display.clear(); // efface le buffer d’affichage
display.drawString(10, 0, « Connexion WIFI en cours »);
display.display(); // affichage
while (WiFi.status() != WL_CONNECTED) // on attend la connexion
{
delay(500);
display.drawString(x, 10, « . »);
display.display();
x = x+5;
}
ip = WiFi.localIP(); // on récupère l’adresse IP
ipStr = String(ip[0]) + ‘.’ + String(ip[1]) + ‘.’ + String(ip[2]) + ‘.’ + String(ip[3]); // on traite l’adresse IP
ipStr.toCharArray(adr_ip, 20);
display.clear(); // efface l’affichage
display.drawString(20, 0, « WIFI connecté »);
display.drawString(0, 10, « Utilisez les URL :  » );
display.drawString(0, 20, « http:// &raquo; + String(adr_ip)); // on affiche l’URL du serveur WEB
display.display();
server.on(« / », page_html); // page par défaut, on associe la fonction à traiter
server.onNotFound(page_html_non_trouve); // page non trouvée, on associe la fonction à traiter
server.begin(); // démarre le serveur HTTP
pinMode(2, OUTPUT); // GPIO2–D4, attention on ne peut pas utiliser le port série
digitalWrite(2, HIGH); // éteint la LED interne
display.setFont(ArialMT_Plain_16); // définit la police et la taille
}

void loop()
{
server.handleClient(); // attend une requête HTTP
}

Au fil des articles, nous utiliserons des fonctionnalités HTML en fonctions des différents test du NodeMCU.

Catégories :NodeMCU Étiquettes : , , ,
  1. Aucun commentaire pour l’instant.
  1. No trackbacks yet.

Votre commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l’aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google

Vous commentez à l’aide de votre compte Google. Déconnexion /  Changer )

Image Twitter

Vous commentez à l’aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l’aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s

%d blogueurs aiment cette page :