ESP8266 - HTTP server s viac stránkami v SPIFFS

Zápisník experimentátora

Hierarchy: ESP8266

V predchádzajúcom príklade sme vytvorili HTTP server s tromi stránkami. Ak si pozriete zdrojový kód servera, nájdete tam adresár html, v ktorom sú zdrojové texty HTML stránok. V tomto adresári som navrhoval dizajn každej stránky. Po navrhnutí dizajnu som musel zdrojový kód každej stránky skopírovať do zdrojového kódu v c++. Takáto činnosť je pracná a neefektívna. V tomto článku sa naučíme, ako môžeme vynechať kopírovanie do zdrojového kódu v c++ a nahradiť ho súborovým systémom SPIFFS.

Použitie súborového systému SPIFFS si vyžaduje inštaláciu pluginu, pomocou ktorého nahráte obsah adresára so súbormi do SPIFFS. Podrobnosti nájdete v článku, ktorý som na túto tému napísal. HTML súbory z predchádzajúceho príkladu sa v tomto programe nachádzajú v adresári data.

Použité súčiastky

Toto je jednoduchý projekt, preto nám bude stačiť niektorá doska s mikrokontrolérom ESP8266, ktorú je možné priamo pripojiť do USB. Aby ste sa vyhli prípadnému skratu, môžete dosku zastrčiť do breadboardu.

  • ESP8266 {linkESP8266}
  • Breadboard {linkBreadBoard}

Príklad

Použitie SPIFFS veľmi zjednušilo predchádzajúci program pre ESP8266. Mohli sme sa zbaviť všetkých hlavičkových súborov so zdrojovými kódmi HTML stránok a mohli sme odstrániť aj všetky funkcie, ktoré jednotlivé stránky odosielali do prehliadača. To všetko sa dalo zjednodušiť do štyroch riadkov. SPIFFS.begin inicializuje súborový systém a funkcia server.serveStatic zabezpečuje odoslanie stránky do prehliadača. Nemusíte sa ani starať o nastavenie content-type, ktorý prehliadaču hovorí, aké dáta mu odosielate. Tie najbežnejšie typy súborov sú automaticky rozoznané.

#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <FS.h>
#include "arduino_secret.h"

ESP8266WebServer server(80);

void setup(void){
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  Serial.println("");

  // Wait for connection
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.print("Connected to ");
  Serial.println(ssid);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());

  SPIFFS.begin();

  server.serveStatic("/", SPIFFS, "/page1.html");
  server.serveStatic("/page2", SPIFFS, "/page2.html");
  server.serveStatic("/page3", SPIFFS, "/page3.html");

  server.begin();
  Serial.println("HTTP server started");
}

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

Nabudúce

Ešte si naznačme, čomu sa budeme venovať nabudúce. Ak si pozriete sieťovú komunikáciu, uvidíte, že do prehliadača dodalo obsah ESP8266, časť obsahu sa stiahol z CDN servera a že sa prehliadač pokúsil stiahnuť súbor favicon.ico z ESP8266. Žiadny taký súbor v SPIFFS ale nemáme. Preto sa nabudúce pozrieme na vytvorenie tohto súboru a budeme aj ošetrovať chyby na neexistujúcich stránkach.

Zdrojový kód

Zdrojový kód sa nachádza na serveri GitHub.


12.04.2019


Menu