Zpět na články

ESP32 Web Server – vytvoření webového serveru v Arduino IDE

ESP32 umožňuje velmi snadno vytvořit webový server přímo na mikrokontroléru a ovládat čip po internetu.

ESP32 Web Server – vytvoření webového serveru v Arduino IDE

ESP32 je výkonný mikrokontrolér s integrovaným Wi-Fi, díky kterému může fungovat například jako jednoduchý webový server. V tomto návodu si ukážeme, jak vytvořit webovou stránku běžící přímo na ESP32, ze které můžete ovládat připojené komponenty – například LED diody nebo relé.

Po nahrání programu se k ESP32 připojíte přes webový prohlížeč pomocí jeho IP adresy v lokální síti. Na webové stránce se zobrazí tlačítka, která umožní zapínat nebo vypínat výstupy na mikrokontroléru.

Tento projekt je ideální základ pro IoT projekty, domácí automatizaci nebo vzdálené ovládání zařízení.

Co je cílem

Webový server běžící na ESP32 dokáže:

  • ovládat dvě LED diody připojené na GPIO piny
  • zobrazit webovou stránku přístupnou z telefonu, počítače nebo tabletu
  • reagovat na HTTP požadavky z prohlížeče
  • změnit stav výstupů okamžitě po kliknutí na tlačítko

V ukázce se používají piny GPIO 26 a GPIO 27, ale lze použít téměř jakékoliv jiné digitální piny.

ESP32 Blog image

Potřebné součástky

Pro vytvoření tohoto projektu budete potřebovat několik základních komponent:

  • vývojovou desku ESP32
  • dvě LED diody
  • dva rezistory přibližně 330 Ω
  • nepájivé pole (breadboard)
  • propojovací vodiče

LED diody se připojují k výstupním pinům ESP32 a slouží jako jednoduchý příklad zařízení, které budeme ovládat přes web.

Zapojení

Zapojení je velmi jednoduché. Každá LED dioda je připojena k jednomu GPIO pinu přes rezistor.

První LED je připojena k GPIO 26, druhá LED k GPIO 27. Druhý konec LED vede přes rezistor do země (GND).

Před zapojením je dobré zkontrolovat pinout vaší konkrétní ESP32 desky, protože některé modely mohou mít jiné označení pinů.

ESP32 Blog image

Program pro ESP32 Web Server

Následující kód vytvoří jednoduchý webový server, který umožní ovládat dvě LED diody přes webový prohlížeč.

web-server.cpp
1#include <WiFi.h> 2 3// přihlašovací údaje k WiFi 4const char* ssid = "YOUR_SSID"; 5const char* password = "YOUR_PASSWORD"; 6 7// web server na portu 80 8WiFiServer server(80); 9 10// proměnná pro uložení HTTP požadavku 11String header; 12 13// výstupní piny 14const int output26 = 26; 15const int output27 = 27; 16 17// stav výstupů 18String output26State = "off"; 19String output27State = "off"; 20 21void setup() { 22 Serial.begin(115200); 23 24 pinMode(output26, OUTPUT); 25 pinMode(output27, OUTPUT); 26 27 digitalWrite(output26, LOW); 28 digitalWrite(output27, LOW); 29 30 Serial.print("Connecting to WiFi"); 31 32 WiFi.begin(ssid, password); 33 34 while (WiFi.status() != WL_CONNECTED) { 35 delay(500); 36 Serial.print("."); 37 } 38 39 Serial.println(""); 40 Serial.println("WiFi connected."); 41 42 server.begin(); 43 44 Serial.println("IP address:"); 45 Serial.println(WiFi.localIP()); 46} 47 48void loop() { 49 50 WiFiClient client = server.available(); 51 52 if (client) { 53 Serial.println("New Client."); 54 String currentLine = ""; 55 56 while (client.connected()) { 57 if (client.available()) { 58 59 char c = client.read(); 60 Serial.write(c); 61 header += c; 62 63 if (c == '\n') { 64 65 if (currentLine.length() == 0) { 66 67 if (header.indexOf("GET /26/on") >= 0) { 68 output26State = "on"; 69 digitalWrite(output26, HIGH); 70 } 71 72 if (header.indexOf("GET /26/off") >= 0) { 73 output26State = "off"; 74 digitalWrite(output26, LOW); 75 } 76 77 if (header.indexOf("GET /27/on") >= 0) { 78 output27State = "on"; 79 digitalWrite(output27, HIGH); 80 } 81 82 if (header.indexOf("GET /27/off") >= 0) { 83 output27State = "off"; 84 digitalWrite(output27, LOW); 85 } 86 87 client.println("HTTP/1.1 200 OK"); 88 client.println("Content-type:text/html"); 89 client.println(); 90 91 client.println("<!DOCTYPE html><html>"); 92 client.println("<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">"); 93 client.println("<style>body{font-family:Helvetica;text-align:center;} .button{padding:16px 40px;font-size:30px;margin:2px;background:#4CAF50;color:white;border:none;} .button2{background:#555555;}</style></head>"); 94 95 client.println("<h1>ESP32 Web Server</h1>"); 96 97 client.println("<p>GPIO 26 - State " + output26State + "</p>"); 98 if (output26State=="off") { 99 client.println("<a href=\"/26/on\"><button class=\"button\">ON</button></a>"); 100 } else { 101 client.println("<a href=\"/26/off\"><button class=\"button button2\">OFF</button></a>"); 102 } 103 104 client.println("<p>GPIO 27 - State " + output27State + "</p>"); 105 if (output27State=="off") { 106 client.println("<a href=\"/27/on\"><button class=\"button\">ON</button></a>"); 107 } else { 108 client.println("<a href=\"/27/off\"><button class=\"button button2\">OFF</button></a>"); 109 } 110 111 client.println("</html>"); 112 client.println(); 113 114 break; 115 } else { 116 currentLine = ""; 117 } 118 } else if (c != '\r') { 119 currentLine += c; 120 } 121 } 122 } 123 124 header = ""; 125 client.stop(); 126 Serial.println("Client disconnected."); 127 } 128}

Nakupte svoje ESP32 ještě dnes!

Doprava Zásilkovnou za 89 Kč
Platba dobírkou
Vrácení do 30 dnů
Omezené zásoby - skladem

ESP32-S3 DevKit USB-C

Kompletní vývojová deska s USB-C

240MHz dvoujádrový
WiFi 802.11 b/g/n
Bluetooth 4.2 + BLE
4MB Flash paměť
520KB SRAM
38 GPIO pinů
209za kus

Množstevní slevy:

1
Celkem
209
Objednat

Bezpečná platba při převzetí zásilky nebo online platba přes Comgate, a.s.