#include <WiFi.h>
#include <LiquidCrystal_I2C.h>
#define NTP_SERVER "pool.ntp.org"
#define UTC_OFFSET 3600
#define UTC_OFFSET_DST 3600
#define blue 18
#define green 23
#define red 19
struct tm cas;
const int cervena = 0;
const int zelena = 1;
const int modra = 2;
const int reset = 3;
int farba = reset;
// Server running on port 80
WiFiServer server(80);
LiquidCrystal_I2C lcd(0x27, 16, 2);
String header;
unsigned long currentTime = millis();
unsigned long previousTime = 0;
const long timeoutTime = 2000;
void setup() {
Serial.begin(9600);
lcd.init();
lcd.backlight();
pinMode(blue, OUTPUT);
pinMode(green, OUTPUT);
pinMode(red, OUTPUT);
WiFi.begin("soc2019", "socka2019");
while (WiFi.status() != WL_CONNECTED) {
delay(250);
Serial.print(".");
}
Serial.println("\nWiFi úspešne pripojená!");
Serial.print("IP adresa: ");
Serial.println(WiFi.localIP());
server.begin();
configTime(UTC_OFFSET, UTC_OFFSET_DST, NTP_SERVER);
}
void loop() {
WiFiClient client = server.available();
if (client) {
Serial.println("Novy klient");
currentTime = millis();
previousTime = currentTime;
String currentLine = "";
while (client.connected() && (currentTime - previousTime <= timeoutTime)) {
currentTime = millis();
if (client.available()) {
char c = client.read();
Serial.write(c);
header += c;
if (c == '\n') {
if (currentLine.length() == 0) {
client.println("HTTP/1.1 200 OK");
client.println("Content-type:text/html");
client.println("Connection: close");
client.println("");
if (header.indexOf("GET /2/cervena") >= 0) {
digitalWrite(red, HIGH);
digitalWrite(green, LOW);
digitalWrite(blue, LOW);
farba = cervena;
lcd.setCursor(0, 0);
lcd.print("Cervena ");
} else if (header.indexOf("GET /2/zelena") >= 0) {
digitalWrite(red, LOW);
digitalWrite(green, HIGH);
digitalWrite(blue, LOW);
farba = zelena;
lcd.setCursor(0, 0);
lcd.print("Zelena ");
} else if (header.indexOf("GET /2/modra") >= 0) {
digitalWrite(red, LOW);
digitalWrite(green, LOW);
digitalWrite(blue, HIGH);
farba = modra;
lcd.setCursor(0, 0);
lcd.print("Modra ");
} else if (header.indexOf("GET /2/reset") >= 0) {
farba = reset;
digitalWrite(red, LOW);
digitalWrite(green, LOW);
digitalWrite(blue, LOW);
vypisCas();
}
// HTML Response
client.println("<!DOCTYPE html><html>");
client.println("<head><title>ESP32 Web Server</title>");
client.println("<style>");
client.println("body { font-family: Arial; text-align: center; margin: 20px; }");
client.println(".button { padding: 10px 20px; text-decoration: none; color: white; border-radius: 5px; }");
client.println(".button-zelena { background-color: green; }");
client.println(".button-cervena { background-color: red; }");
client.println(".button-modra { background-color: blue; }");
client.println(".button-reset { background-color: gray; }");
client.println("</style></head>");
client.println("<body>");
client.println("<h1>ESP32 Web Server</h1>");
client.print("<p>Farba: ");
if (farba == cervena) {
client.println("<span style='color:red;'>Cervena</span></p>");
} else if (farba == zelena) {
client.println("<span style='color:green;'>Zelena</span></p>");
} else if (farba == modra) {
client.println("<span style='color:blue;'>Modra</span></p>");
} else {
client.println("<span style='color:gray;'>RESET</span></p>");
}
client.println("<p><a href=\"/2/cervena\" class=\"button button-cervena\">Cervena</a></p>");
client.println("<p><a href=\"/2/zelena\" class=\"button button-zelena\">Zelena</a></p>");
client.println("<p><a href=\"/2/modra\" class=\"button button-modra\">Modra</a></p>");
client.println("<p><a href=\"/2/reset\" class=\"button button-reset\">Reset</a></p>");
client.println("</body></html>");
client.println("");
break;
} else {
currentLine = "";
}
} else if (c != '\r') {
currentLine += c;
}
}
}
header = "";
client.stop();
Serial.println("Klient je odpojeny.");
}
}
void vypisCas() {
if (!getLocalTime(&cas)) {
Serial.println("PROBLEM SO ZISKANIM UDAJOV ZO SERVERU!");
lcd.setCursor(0, 1);
lcd.print("Cas nedostupny");
return;
}
lcd.setCursor(0, 0);
lcd.print("RESET ");
lcd.setCursor(0, 1);
lcd.printf("Cas: %02d:%02d:%02d", cas.tm_hour, cas.tm_min, cas.tm_sec);
}