ESP8266 - HTTP server s jednou stránkou

Zápisník experimentátora

Hierarchy: ESP8266

V tomto článku si naprogramujeme HTTP server pomocí mikrokontroléru ESP8266. Bude to jednoduchý HTTP server, který poskytuje jednu stránku. V příkladu si ukážeme, jak takový server naprogramovat. Soustředíme se na to, aby byl zdrojový kód snadno čitelný. Budeme ignorovat většinu internetových příkladů, které používají nepřehledný kód, nebo ignorují možnosti moderních C++ kompilátorů.

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

Příklad obsahuje dva soubory. V prvním souboru si nastavíme přihlašovací jméno a heslo do WiFi. Druhý soubor obsahuje zdrojový kód webserveru. Výsledkem je stránka v prohlížeči, která bude vypadat takto.

arduino_secret.h

Do tohoto souboru si doplníte své jméno a heslo k WiFi. Pokud chcete mít jistotu, že své jméno a heslo nebudete zapisovat přímo do zdrojového kódu, použijete návod podle článku Vložení definice makra do programu v Arduinu.

#if defined(_SSID)
  const char* ssid     = _SSID;
  const char* password = _PWD;
#else
  const char* ssid     = "your-ssid";
  const char* password = "your-password";
#endif

simple_http_server_onepage

Takto vypadá zdrojový kód pro webserver. V proměnné htmlPage je zdrojový kód HTML stránky. Na Internetu najdete mnoho příkladů na to, jak to zapisovat pomocí komplikovaných řetězců. Takto to zapíšete správně a bez chyb, protože využijete moderní vlastnosti kompilátoru, které umožňují vkládat do zdrojového kódu řetězce tak, jako kdyby jste je psali do samostatného souboru.

Do prohlížeče odešlete HTML stránku pomocí funkce handleRoot. Důležité je ale serveru říci, s jakou URL je tato stránka spojena. K tomu slouží příkaz server.on("/", handleRoot);. Program při startu vypíše svou IP adresu přes sériový port. Na této adrese si můžete prohlédnout výslednou stránku.

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

ESP8266WebServer server(80);

const char htmlPage[] PROGMEM = R"=====(
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=UTF-8">
<title>Hello from HTTP Server ESP8266</title>
<style>
p { text-indent: 30px; margin: 0px; }
</style>
</head>
<body>
    <h1>ESP8266 HTTP Server</h1>
    <p>Hello from ESP8266 HTTP Server.</p>
    <p>Copyright (C) 2019 <a href="https://www.arduinoslovakia.eu">Arduino Slovakia</a>.</p>
</body>
</html>
)=====";

void handleRoot() {
  Serial.println("GET /");
  server.send(200, "text/html", htmlPage);
}

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

  server.on("/", handleRoot);

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

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

Zdrojový kód

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


21.05.2019


Menu