ESP8266 - HTTP server s jednou stránkou

Zápisník experimentátora

Hierarchy: ESP8266

V tomto článku si naprogramujeme HTTP server pomocou mikrokontroléra ESP8266. Bude to jednoduchý HTTP server, ktorý poskytuje jednu stránku. V príklade si ukážeme, ako takýto server naprogramovať. Sústredíme sa na to, aby bol zdrojový kód ľahko čitateľný. Budeme ignorovať väčšinu internetových príkladov, ktoré používajú neprehľadný kód, alebo ignorujú možnosti moderných C++ kompilátorov.

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

Príklad obsahuje dva súbory. V prvom súbore si nastavíme prihlasovacie meno a heslo do WiFi. Druhý súbor obsahuje zdrojový kód webservera. Výsledkom je stránka v prehliadači, ktorá bude vyzerať takto.

arduino_secret.h

Do tohoto súboru si doplníte svoje meno a heslo k WiFi. Ak chcete mať istotu, že svoje meno a heslo nebudete zapisovať priamo do zdrojového kódu, použijete návod podľa článku Vloženie definície makra do programu v Arduine.

#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 vyzerá zdrojový kód pre webserver. V premennej htmlPage je zdrojový kód HTML stránky. Na Internete nájdete veľa príkladov na to, ako to zapisovať pomocou komplikovaných reťazcov. Takto to zapíšete správne a bez chýb, pretože využijete moderné vlastnosti kompilátora, ktoré umožňujú vkladať do zdrojového kódu reťazce tak, ako keby ste ich písali do samostatného súboru.

Do prehliadača odošlete HTML stránku pomocou funkcie handleRoot. Dôležité je ale serveru povedať, s akou URL je táto stránka spojená. Na to slúži príkaz server.on("/", handleRoot);. Program pri štarte vypíše svoju IP adresu cez sériový port. Na tejto adrese si môžete pozrieť výslednú 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 sa nachádza na serveri GitHub.


10.03.2019


Menu