// http://192.168.4.1/
#include <WiFi.h>
#include <WiFiAP.h>
WiFiServer server(80);
#include <DNSServer.h>
DNSServer dnsServer;
#include <DHT.h>
DHT dht(13, DHT11);
#define LED_BUILTIN 2
#define WifiName "ESP32 SERVER"
const char webPage[] PROGMEM = R"rawliteral(
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=2.0">
<title> ESP server</title>
<style>
body{
text-align:center;
background:rgb(39, 39, 40);
color: rgb(108, 99, 232);
}
</style>
</head>
<body>
<h2>ESP LED Controller</h2>
<h3>
LED state: %LEDstate%
<button><a href='/on'>ON</a></button> /
<button><a href='/off'>OFF</a></button>
</h3>
<br>
<h2>Temperature: %Temperature%</h2>
<h2>Humidity: %Humidity%</h2>
</body>
</html>
)rawliteral";
String getWebPage() {
String page = FPSTR(webPage); // FPSTR() завантажує рядок з флеш-пам'яті
if(digitalRead(LED_BUILTIN)) page.replace("%LEDstate%", "On");
else page.replace("%LEDstate%", "Off");
page.replace("%Temperature%", String(dht.readTemperature()));
page.replace("%Humidity%", String(dht.readHumidity()));
return page;
}
void handler(String currentLine) {
if (currentLine.indexOf("GET /on") >= 0) {
digitalWrite(LED_BUILTIN, HIGH);
}
else if (currentLine.indexOf("GET /off") >= 0) {
digitalWrite(LED_BUILTIN, LOW);
}
}
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
dht.begin();
Serial.begin(115200);
wifiBegin();
}
void loop() {
dnsServer.processNextRequest();
clientChacker();
}
//////////////////////////////////////////////////////////////////////////////////////////////////////
void wifiBegin(){
Serial.println("\nConfiguring access point...");
if (!WiFi.softAP(WifiName)) {
Serial.println("Soft AP creation failed.");
while (1);
}
IPAddress apIP = WiFi.softAPIP();
dnsServer.start(53, "*", apIP);
Serial.print("AP IP address: "); Serial.println(apIP);
server.begin();
}
void clientChacker() {
WiFiClient client = server.available();
if (client) {
Serial.println("New Client connected.");
String currentLine = "";
while (client.connected()) {
if (client.available()) {
char c = client.read();
Serial.write(c);
if (c == '\n') {
if (currentLine.length() == 0) {
client.println(getWebPage());
break;
} else {
handler(currentLine);
currentLine = "";
}
} else if (c != '\r') {
currentLine += c;
}
}
}
client.stop();
Serial.println("Client disconnected.");
}
}