#include <WiFi.h>
#include <LiquidCrystal_I2C.h>
#define NTP_SERVER "pool.ntp.org"
#define UTC_OFFSET 3600
#define UTC_OFFSET_DST 3600 // posun o 1hod
struct tm cas;
LiquidCrystal_I2C lcd(0x27, 16, 2);
WiFiServer server(80);
String header;
String redState = "off";
String greenState = "off";
String blueState = "off";
unsigned long currentTime = millis();
unsigned long previousTime = 0;
const long timeoutTime = 2000;
const int redPin = 18; // Nastavte pin, na ktorom je pripojená LED
const int greenPin = 4; // Nastavte pin, na ktorom je pripojená LED
const int bluePin = 5;
int long currentTime2 = 0;
void
setup() {
Serial.begin(9600);
lcd.init();
lcd.backlight();
WiFi.begin("soc2019", "socka2019");
while (WiFi.status() != WL_CONNECTED) {
delay(250);
Serial.print(".");
}
Serial.println("WiFi úspešne pripojené!");
Serial.print("IP adresa: ");
Serial.println(WiFi.localIP());
configTime(UTC_OFFSET, UTC_OFFSET_DST, NTP_SERVER);
server.begin();
pinMode(redPin, OUTPUT); // Nastavte LED pin ako výstup
pinMode(greenPin, OUTPUT); // Nastavte LED pin ako výstup
pinMode(bluePin, OUTPUT); // Nastavte LED pin ako výstup
lcd.print("Color: ");
}
void loop() {
if (millis() >= currentTime2) {
if (!getLocalTime(&cas)) {
Serial.println("PROBLEM SO ZISKANIM UDAJOV ZO SERVERU!");
return;
}
lcd.setCursor(0,1);
lcd.print(&cas, "%H:%M:%S");
currentTime2 += 1000;
}
WiFiClient client = server.available(); // aktualizovanie prijatých dát
if (client) // ak sa pripojil klient
{
currentTime = millis();
previousTime = currentTime;
Serial.println("Nový klient");
String currentLine = ""; // premená pre prijaté dáta
while (client.connected() && currentTime - previousTime <= timeoutTime) {
currentTime = millis();
if (client.available()) // test, či sú prijaté dáke dáta
{
char c = client.read(); // načítanie bajtu z buffera
Serial.write(c);
header += c;
if (c == '\n') // po ENTER je request
{
if (currentLine.length() == 0) // ak sa načítal prázdny riadok, odošli potvrdenie o pripojení
{
client.println("HTTP/1.1 200 OK");
client.println("Content-type:text/html");
client.println("Connection: close");
client.println("");
// Nastavenie LED podľa požiadavky
if (header.indexOf("GET /red") >= 0) {
digitalWrite(redPin, HIGH); // Rozsvietiť červenú LED
digitalWrite(bluePin, LOW); // Vypnúť modrú
digitalWrite(greenPin, LOW); // Vypnúť zelenú
lcd.setCursor(7, 0);
lcd.print("RED ");
}
if (header.indexOf("GET /green") >= 0) {
digitalWrite(greenPin, HIGH); // Rozsvietiť zelenú LED
digitalWrite(bluePin, LOW); // Vypnúť modrú
digitalWrite(redPin, LOW); // Vypnúť červenú
lcd.setCursor(7, 0);
lcd.print("GREEN");
}
if (header.indexOf("GET /blue") >= 0) {
digitalWrite(bluePin, HIGH); // Rozsvietiť modrú LED
digitalWrite(redPin, LOW); // Vypnúť červenú
digitalWrite(greenPin, LOW); // Vypnúť zelenú
lcd.setCursor(7, 0);
lcd.print("BLUE ");
}
if (header.indexOf("GET /refresh") >= 0) {
if (!getLocalTime(&cas)) {
Serial.println("PROBLEM SO ZISKANIM UDAJOV ZO SERVERU!");
return;
}
}
// HTML stránka s CSS pre pekný dizajn
client.println("<!DOCTYPE html><html>");
client.println("<head>");
client.println("<style>");
client.println("body { font-family: Arial, sans-serif; display: grid; justify-content: center; align-items: center; height: 30vh; margin: 0; background-color: #f4f4f9; }");
client.println("h1 { text-align: center; color: #333; }");
client.println("p { text-align: center; }");
client.println(".button { font-size: 20px; padding: 15px 30px; margin: 10px; cursor: pointer; border: none; border-radius: 5px; color: #fff; }");
client.println(".red { background-color: #f44336; }");
client.println(".green { background-color: #4CAF50; }");
client.println(".blue { background-color: #2196F3; }");
client.println(".refresh { background-color: #909090; }");
client.println("</style>");
client.println("</head><body>");
client.println("<h1>ESP32 Web Server LED Control</h1>");
// Tlačidlá pre každú farbu
client.println("<p><a href=\"/red\"><button class=\"button red\">Red</button></a></p>");
client.println("<p><a href=\"/green\"><button class=\"button green\">Green</button></a></p>");
client.println("<p><a href=\"/blue\"><button class=\"button blue\">Blue</button></a></p>");
client.println("<p>");
client.println(&cas, "%H:%M:%S");
client.println("</p>");
client.println("<p><a href=\"/refresh\"><button class=\"button refresh\">Refresh</button></a></p>");
client.println("</body></html>");
client.println("");
break;
} else {
currentLine = "";
}
} else if (c != '\r') {
currentLine += c; // add it to the end of the currentLine
}
}
}
header = "";
client.stop();
Serial.println("Klient je odpojený.");
Serial.println("");
}
}