WeMos ESP8266 WebServer

WeMos ESP8266 WebServer ti consente di realizzare un semplice web server con la wemos o l’esp8266 per ottenere una o più pagine come quella seguente.

WeMos ESP8266 WebServer Chrome Web Page

 

Realizzare un webserver è certamente un progetto tanto richiesto quanto complesso ed in passato hai letto dei miei articoli che trattavano delle timide realizzazioni scritte da me come:

Tutorial: Arduino, Ethernet e pagine multiple su SD Card

Tutorial arduino ethernet sdcard

o altre in cui utilizzando la potenza della Arduino Yun sfruttavi il Web Server lightHttp su Linino o OpenWRT.

Oggi con al WeMos e/o la ESP8266 puoi realizzare un WeMos ESP8266 WebServer utilizzando la libreria ESP8266WebServer.h scaricabile dal library manager o su gitHub

Sketch di esempio per WeMos ESP8266 WebServer

Lo sketch parte da uno degli esempi rilasciati con la libreria che ho opportunamente modificato per realizzare questo esempio:

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>

/***** Web Pages ************************************************************************/

String HeaderPage = "<!DOCTYPE html><html><head><style> header { background: linear-gradient(to right, #1e5799 0%,#7db9e8 100%); color: #fff; padding:10px; text-align: center; vertical-align: middle; } body{ padding:15px; color: #5e5e5e; font-family: Helvetica,Arial,sans-serif; font-variant: small-caps; font-size:1em; text-align: center; } footer { background: linear-gradient(to left, #1e5799 0%,#7db9e8 100%); color: #fff; padding:10px; text-align: right; vertical-align: bottom; } h2 {  padding:10px; text-align: center; vertical-align: middle; font-size:2em; } </style></head><body><header>:: Mauro Alfieri WeMos NeoPixel ::</header>";
String FooterPage = "<footer>powerd by mauroalfieri.it</br>CC licence</footer></body></html>";
String rootPageBody = "<h2>Hello World</h2>";
String rootWebPage;

/****************************************************************************************/

const char *wifi_ssid = "SSID 2.4G";
const char *wifi_password = "passwordWiFI";

ESP8266WebServer server(80);
WiFiClient espClient;

void setup() {
  Serial.begin(115200);
  Serial.println();

  setup_wifi();
  composeWebPage();
  startWebServer();
}

void loop() { server.handleClient(); }

/***** Functions ***********************************************************************/

void setup_wifi() {

  delay(10);
  Serial.print("Connecting to ");
  Serial.println(wifi_ssid);
  WiFi.begin(wifi_ssid, wifi_password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  randomSeed(micros());

  Serial.println("");
  Serial.print("WiFi connected at IP address: ");
  Serial.println(WiFi.localIP());
}

void handleRoot() { server.send(200, "text/html", rootWebPage); }

void composeWebPage() {
  rootWebPage = HeaderPage;
  rootWebPage += rootPageBody;
  rootWebPage += FooterPage;
}

void startWebServer() {
  server.on("/", handleRoot);
  server.begin();
  Serial.println("SERVER BEGIN!!");
}

le linee 01-03: includi le librerie che ti servono per la connessione WiFi e la configurazione della porta 80 in ascolto come web server;

linee 07-18: sono nella realtà, copiate nell’IDE arduino, solo 4 e servono a impostare la parte HTML relativa alla pagina che visualizzeremo; ( in un prossimo articolo ci dedicheremo alla comprensione della pagina )

linee 22-23: definisci le credenziali con cui puoi accedere alla tua rete WiFi, ricordati che le informazioni che ho scritto sono finte e devi sostituirle con i tuoi parametri:

linea 25: crea l’oggetto server in ascolto sulla porta 80;

linea 26: crea l’oggetto WiFiClient con cui ti colleghi alla rete WiFI;

linee 29-30: imposta la comunicazione Seriale;

linea 32: richiama la setup_wifi() con cui esegui il collegamento alla rete WiFi;

linea 33: richiama la composeWebPage() all’interno della quale comporremo le pagine che serviremo al client connesso;

linea 34: avvia il webserver richiamando la funzione startWebServer() che nelle prossime liee analizzerai;

linea 37: definisci la funzione loop() il cui unico scopo, e comando, è eseguire l’handle delle pagine del server;

linea 41: inizia con la creazione della funzione “setup_wifi()“;

linee 44-45: scrivi sul monitor seriale le informazioni che ti indicano di essere arrivati a questa funzione;

linea 46: esegui la connessione alla rete WiFI;

linee 48-51: fino a quando la connessione non avviene, lo stato è diverso da WL_CONNECTED e continui a scrivere sul monitor seriale dei puntini ad indicare l’attesa;

linea 53: genera un numero casuale partendo dai microsecondi;

linee: 55-57: scrivi sul monitor seriale l’Ip ricevuto dalla connessione WiFi, questo IP è quello su cui potrai ritrovare la pagina della WeMos;

linea 60: crea la funzione handleRoot() che rarà invocata dal server tutte le volte che l’url non presenterà pagine o parametri particolari, diciamo la root ( radice ) appunto del webserver. Tale funzione restituisce la stringa rootWebPage composta nella funzione successiva;

linee 62-66: definisci la funzione composeWebPage() il cui scopo, in questo esempio è creare la concatenazione di stringhe HaderPage + rootPageBody + FooterPage;

linea 68: definisci la funzione startWebServer() che è invocata dalla setup() per inizializzare tutte le comunicazioni tra client e web server;

linea 69: imposta il richiamo della funzione handleRoot, vista alla linea 60, quando il server viene invocato senza parametri;

linea 70: avvia il server web usando il metodo begin() 

linea 71: scrivi sul monitor seriale “SERVER BEGIN!!” quando tutto è pronto per la connessione.

Funzionamento del WeMos ESP8266 WebServer

Dopo aver trasferito alla WeMos puoi aprire il monitor seriale e dovresti vedere una schermata simile alla seguente:

WeMos WebServer connected

in cui le informazioni importanti sono l’avvenuta connessione e l’IP ricevuto dal server a cui dovrai collegarti per vedere la pagina che hai disegnato;

Ecco come appare la pagina sul browser del computer:

WeMos ESP8266 WebServer Chrome Web Page

ed ecco la stessa pagina dal browser del telefono:

WeMos WebServer iPhone Web Page

 

Cortesemente, prima di inserire i commenti leggi il regolamento

Permanent link to this article: http://www.mauroalfieri.it/elettronica/wemos-esp8266-webserver.html

8 comments

1 ping

Skip to comment form

    • Andrea on 19 aprile 2018 at 16:52
    • Reply

    Ciao vorrei sapere se è possibile fare il tutto senza ‘uso delle librerie. Cio vorrei configurare il mio webserver solamente attraverso l’uso della seriale tra arduino e l’esp8266,o meglio,fare il tutto con i soli comandi AT…

    1. Ciao Andrea,
      con i comandi AT puoi fare delle configurazioni sui moduli, è certamente più complesso.

    • Vito on 6 giugno 2018 at 20:58
    • Reply

    Ciao Mauro, innanzitutto complimenti per il lavoro che svolgi, ammiro chi ama diffondere ciò che sa.
    Sono alle prese per la prima volta con l’ESP8266, e in generale con il mondo internet; sono ingegnere, lavoro nel settore spazio e satelliti, ma di reti so ben poco. Ho necessità di controllare alcuni dispositivi di casa (impianti di irrigazione, luci e eventuale allarme) quando sono fuori, e l’dea è quella di connetterli al router tramite degli ESP. Usando degli ESP8266-01, i pin sono ben pochi, quindi l’idea sarebbe quella di usare degli Arduino che comunicano con gli ESP su seriale (creando dei pacchetti definiti di comandi e telemetrie), questi ultimi connessi ad un altro ESP collegato al router di casa.

    Però ho ancora dei dubbi: ha senso inserire un ESP su cui convogliare i dati degli altri? Agirebbero rispettivamente come server e client? Non mi è chiara la differenza in termini di funzionalità (mi viene da pensare a master e slave per determinati protocolli hardware).

    Grazie mille anticipatamente.

    1. Ciao Vito,
      hai ragione non è il massimo avere un esp8266 che faccia da accentratore o concentratore, puoi usare il router o un access point a cui fai collegare gli ESP8266 direttamente.
      Io non amo le connessioni WiFi sopratutto quando sono troppe perché dovrai considerare il numero massimo di connessioni che il tuo router deve sostenere a cui ci saranno, probabilmente, già collegati diversi device come smartphone, computer ecc…
      Tenderei a ridurre ad una connessione per stanza massimo ed avere i sensori connessi con altri protocolli radio ( RF,LoRa,ecc..) o meglio direttamente via cavo a ciascun punto wifi di raccolta sensori/attuatori.

      Puoi anche non usare il modello ESP8266-01 ma un 12F o 12E o superiore che dispone di più connessioni (pin) e di alcuni protocolli come l’I2C o SPI.

    • Giovanni on 18 luglio 2018 at 21:23
    • Reply

    Ciao Mauro,
    ti faccio i miei complimenti per il programma. Vorrei chiederti se hai qualche esempio che dove l’esp8266 si comporta prima come un softaccess point dove mi chiede le credenziali di accesso del mio wifi ed il token e stesso all’interno dello script passa i dati a blink per far funzionare app. Questo perchè in fase di installazione dell’elemento domotico non conosco le credenziali del wifi e nemmeno il token di blink.
    Potresti aiutarmi?
    Ti ringrazio mille
    Giovanni Raiano

    1. Ciao Giovanni,
      qualche anno fa ho scrittu un articolo sulla libreria WiFiManager di Tzapu che potresti consultare per comprendere se risolve il tuo problema.

    • luigi iacuvitti on 9 novembre 2018 at 11:58
    • Reply

    Ciao Mauro,
    ho visto la tua creazione della pagina web e lo replicata però utilizzando un nodemcu e libreria wifi.
    Ho pulito la pagina web immetendo nel body solo una variabile.
    Nel ciclo loop il nodemcu va a rilevare lo stato di un sensore (aperto o chiuso) ed a ogni cambio di stato aggiorna la variabile. Con il comando “composeWebPage();” vado ad aggiornare la pagina . Non ho trovato altro modo per aggiornare la pagina. Mi consigli altro?
    Però la pagina html risulta congestionata e quindi fa fatica ad aggiornarsi.
    Se provo un GET Html da altro hardware ( App Tasker da Android) la pagina risulta inacessibile.
    Chiaramente se tolgo il loop tutto funziona regolare.
    Hai qualche soluzione?
    Ti ringrazio se saprai aiutarmi.

    1. Ciao Luigi,
      il normale funzionamento di un server è di rispondere alle richieste del client e solo in quel momento generare la pagina per dare la risposta.
      Un server non crea continuamente una pagina senza una valida richiesta a meno che non intervenga un processo di caching, me si tratta di cose più complesse ed escludo sia necessario nella tua applicazione.

      Ti consiglio di far in modo che la richiesta di composeWebPage(); sia eseguita solo in presenza di un a richiesta client come vedi alle linee 61 e 62 dello sketch.

  1. […] « WeMos ESP8266 WebServer […]

Lascia un commento

Your email address will not be published.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.