ESP8266 - HTTP server s více stránkami v SPIFFS

Zápisník experimentátora

Hierarchy: ESP8266

V předchozím příkladu jsme vytvořili HTTP server se třemi stránkami. Pokud si prohlédnete zdrojový kód serveru, najdete tam adresář html, ve kterém jsou zdrojové texty HTML stránek. V tomto adresáři jsem navrhoval design každé stránky. Po navržení designu jsem musel zdrojový kód každé stránky zkopírovat do zdrojového kódu v C ++. Taková činnost je pracná a neefektivní. V tomto článku se naučíme, jak můžeme vynechat kopírování do zdrojového kódu v c ++ a nahradit ho souborovým systémem SPIFFS.

Použití souborového systému SPIFFS vyžaduje instalaci pluginu, pomocí kterého nahrajete obsah adresáře se soubory do SPIFFS. Podrobnosti naleznete v článku, který jsem na toto téma napsal. HTML soubory z předchozího příkladu se v tomto programu nacházejí v adresáři data.

Použité součástky

Toto je jednoduchý projekt, proto nám bude stačit některá deska s mikrokontrolérem ESP8266, kterou lze přímo připojit do USB. Abyste se vyhnuli případnému zkratu, můžete desku zastrčit do breadboardu.

  • ESP8266 {linkESP8266}
  • Breadboard {linkBreadBoard}

Příklad

Použití SPIFFS velmi zjednušilo předchozí program pro ESP8266. Mohli jsme se zbavit všech hlavičkových souborů se zdrojovými kódy HTML stránek a mohli jsme odstranit i všechny funkce, které jednotlivé stránky odesílali do prohlížeče. To vše se dalo zjednodušit do čtyř řádků. SPIFFS.begin inicializuje souborový systém a funkce server.serveStatic zajišťuje odeslání stránky do prohlížeče. Nemusíte se ani starat o nastavení content-type, který prohlížeči říká, jaká data mu odesíláte. Ty nejběžnější typy souborů jsou automaticky asociovány.

#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();
}

Příště

Ještě si naznačme, čemuž se budeme věnovat příště. Pokud si prohlédnete síťovou komunikaci, uvidíte, že do prohlížeče dodalo obsah ESP8266, část obsahu se stáhl z CDN serveru a že se prohlížeč pokusil stáhnout soubor favicon.ico z ESP8266. Žádný takový soubor v SPIFFS ale nemáme. Proto se příště podíváme na vytvoření tohoto souboru a budeme i ošetřovat chyby na neexistujících stránkách.

Zdrojový kód

Zdrojový kód se nachází na serveru GitHub.


21.05.2019


Menu