ESP8266 - HTTP server, favicon a ošetření chyb

Zápisník experimentátora

Hierarchy: ESP8266

V předchozím článku jsme zjistili, že náš HTTP server neumí dobře zpracovat hypertexty, které směřují na neexistující stránku. Zjistili jsme, že prohlížeč si sám ke každé stránce vyžádá i soubor favicon.ico. Proto se dnes naučíme, jak se zpracovávají chyby a jak vytvoříme malou ikonu, kterou prohlížeč zobrazuje na záložce, na níž se zobrazuje obsah stránky.

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}

Zpracování chyby

Abychom mohli pohodlně kliknout na hypertext, který vede na neexistující stránku, upravil jsem zdrojový text stránek a přidal jsem výrazný hypertext PageError. Po kliknutí na hypertext se prohlížeč pokusí získat z ESP8266 stránku /pageerror.

favicon.ico

Ikonu jsem si půjčil ze stránky arduino.cc. Je to malý obrázek loga Arduina, původně ve formátu PNG, který má přejmenovanou příponu na ICO.

SPIFFS

Nezapomeňte soubory nahrát do SPIFFS pomocí pluginu. Postup naleznete v článku o používání souborového systému SPIFFS.

Příklad

Vůči předchozímu příkladu jsem udělal pouze dvě změny.

  • server.serveStatic("/favicon.ico", SPIFFS, "/favicon.ico"); - Tento řádek zajišťuje, že ze SPIFFS si prohlížeč stáhne soubor favicon.ico a zobrazí ji jako miniaturu na záložce.
  • server.onNotFound([]()... - Tento řádek odešle při každém požadavku na neexistující stránku jednoduché chybové hlášení.
#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.serveStatic("/favicon.ico", SPIFFS, "/favicon.ico");

  server.onNotFound([]() {
    server.send(404, "text/plain", "404: Not Found");
  });

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

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

Zdrojový kód

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


20.05.2019


Menu