ESP8266 - HTTP server, favicon a ošetrenie chýb

Zápisník experimentátora

Hierarchy: ESP8266

V predchádzajúcom článku sme zistili, že náš HTTP server nevie dobre spracovať hypertexty, ktoré smerujú na neexistujúcu stránku. Zistili sme, že prehliadač si sám ku každej stránke vyžiada aj súbor favicon.ico. Preto sa dnes naučíme, ako sa spracovávajú chyby a ako vytvoríme malú ikonu, ktorú prehliadač zobrazuje na záložke, na ktorej sa zobrazuje obsah stránky.

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}

Spracovanie chyby

Aby sme mohli pohodlne kliknúť na hypertext, ktorý vedie na neexistujúcu stránku, upravil som zdrojový text stránok a pridal som výrazný hypertext PageError. Po kliknutí na hypertext sa prehliadač pokúsi získať z ESP8266 stránku /pageerror.

favicon.ico

Ikonu som si požičal zo stránky arduino.cc. Je to malý obrázok loga Arduina, pôvodne vo formáte PNG, ktorý má premenovanú príponu na ICO.

SPIFFS

Nezabudnite súbory nahrať do SPIFFS pomocou pluginu. Postup nájdete v článku o používaní súborového systému SPIFFS.

Príklad

Voči predchádzajúcemu príkladu som urobil iba dve zmeny.

  • server.serveStatic("/favicon.ico", SPIFFS, "/favicon.ico"); - Tento riadok zabezpečuje, že zo SPIFFS si prehliadač stiahne súbor favicon.ico a zobrazí ju ako miniatúru na záložke.
  • server.onNotFound([]()... - Tento riadok odošle pri každej požiadavke na neexistujúcu stránku jednoduché chybové hlásenie.
#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 sa nachádza na serveri GitHub.


16.04.2019


Menu