{"id":757,"date":"2026-01-22T11:56:59","date_gmt":"2026-01-22T09:56:59","guid":{"rendered":"https:\/\/avlos.gr\/wpress\/?p=757"},"modified":"2026-04-11T05:36:13","modified_gmt":"2026-04-11T03:36:13","slug":"esp32-web-server","status":"publish","type":"post","link":"https:\/\/avlos.gr\/wpress\/esp32-web-server\/","title":{"rendered":"ESP32 Web Server &#8211; \u039c\u03b5\u03c4\u03b5\u03c9\u03c1\u03bf\u03bb\u03bf\u03b3\u03b9\u03ba\u03cc\u03c2 \u03c3\u03c4\u03b1\u03b8\u03bc\u03cc\u03c2"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">\u03a3\u03c4\u03bf \u03ac\u03c1\u03b8\u03c1\u03bf \u03b1\u03c5\u03c4\u03cc \u03b8\u03b1 \u03b4\u03bf\u03cd\u03bc\u03b5 \u03c0\u03c9\u03c2 \u03bd\u03b1 \u03c6\u03c4\u03b9\u03ac\u03be\u03bf\u03c5\u03bc\u03b5 \u03ad\u03bd\u03b1\u03bd Web Server \u03bc\u03b5 \u03c4\u03bf\u03bd ESP32. \u0391\u03c5\u03c4\u03cc\u03c2 Web Server \u03b8\u03b1 \u03bc\u03b1\u03c2 \u03b4\u03af\u03bd\u03b5\u03b9 \u03c0\u03bb\u03b7\u03c1\u03bf\u03c6\u03bf\u03c1\u03af\u03b5\u03c2 \u03b3\u03b9\u03b1 \u03c4\u03bf \u03c0\u03b5\u03c1\u03b9\u03b2\u03ac\u03bb\u03bb\u03bf\u03bd \u03c4\u03bf\u03c5 \u03cc\u03c0\u03c9\u03c2 \u03b3\u03b9\u03b1 \u03c4\u03b7\u03bd \u03b8\u03b5\u03c1\u03bc\u03bf\u03ba\u03c1\u03b1\u03c3\u03af\u03b1, \u03c4\u03b7\u03bd \u03c5\u03b3\u03c1\u03b1\u03c3\u03af\u03b1 \u03ba\u03b1\u03b9 \u03c4\u03b7\u03bd \u03b1\u03c4\u03bc\u03bf\u03c3\u03c6\u03b1\u03b9\u03c1\u03b9\u03ba\u03ae \u03c0\u03af\u03b5\u03c3\u03b7. \u0395\u03c0\u03af\u03c3\u03b7\u03c2 \u03b8\u03b1 \u03ad\u03c7\u03bf\u03c5\u03bc\u03b5 \u03c4\u03b7 \u03b4\u03c5\u03bd\u03b1\u03c4\u03cc\u03c4\u03b7\u03c4\u03b1 \u03bd\u03b1 \u03c4\u03bf\u03c5 \u03b4\u03af\u03bd\u03bf\u03c5\u03bc\u03b5 \u03ba\u03b1\u03b9 \u03bd\u03b1 \u03b5\u03ba\u03c4\u03b5\u03bb\u03b5\u03af \u03b5\u03bd\u03c4\u03bf\u03bb\u03ad\u03c2, \u03c0\u03bf\u03c5 \u03c3\u03c4\u03b7\u03bd \u03c0\u03b5\u03c1\u03af\u03c0\u03c4\u03c9\u03c3\u03ae \u03bc\u03b1\u03c2 \u03b5\u03af\u03bd\u03b1\u03b9 \u03bd\u03b1 \u03b1\u03bd\u03ac\u03b2\u03b5\u03b9 \u03ba\u03b1\u03b9 \u03bd\u03b1 \u03c3\u03b2\u03ae\u03bd\u03b5\u03b9 \u03ba\u03ac\u03c0\u03bf\u03b9\u03b1 Led.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0393\u03b9\u03b1 \u03c4\u03b7\u03bd \u03c5\u03bb\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7 \u03c4\u03bf\u03c5 \u03bb\u03bf\u03b3\u03b9\u03c3\u03bc\u03b9\u03ba\u03bf\u03cd \u03c7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03ae\u03b8\u03b7\u03ba\u03b5 \u03c4\u03bf Visual Studio \u03bc\u03b5 \u03c4\u03b7\u03bd \u03c0\u03c1\u03bf\u03c3\u03b8\u03ae\u03ba\u03b7 \u03c4\u03bf\u03c5 PlatformIO. \u0398\u03b1 \u03b4\u03bf\u03cd\u03bc\u03b5 \u03c3\u03c4\u03b7 \u03c3\u03c5\u03bd\u03ad\u03c7\u03b5\u03b9\u03b1 \u03c4\u03b1 \u03c5\u03bb\u03b9\u03ba\u03ac \u03c0\u03bf\u03c5 \u03c7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03ae\u03b8\u03b7\u03ba\u03b1\u03bd, \u03c0\u03c9\u03c2 \u03b1\u03c5\u03c4\u03ac \u03c3\u03c5\u03bd\u03b4\u03ad\u03b8\u03b7\u03ba\u03b1\u03bd \u03bc\u03b5\u03c4\u03b1\u03be\u03cd \u03c4\u03bf\u03c5\u03c2 \u03ba\u03b1\u03b9 \u03c4\u03ad\u03bb\u03bf\u03c2 \u03c4\u03bf \u03c0\u03c1\u03bf\u03b3\u03c1\u03b1\u03bc\u03bc\u03b1\u03c4\u03b9\u03c3\u03c4\u03b9\u03ba\u03cc \u03ba\u03bf\u03bc\u03bc\u03ac\u03c4\u03b9 \u03c0\u03bf\u03c5 \u03c4\u03b1 \u03ad\u03ba\u03b1\u03bd\u03b5 \u03cc\u03bb\u03b1 \u03b1\u03c5\u03c4\u03ac \u03bd\u03b1 \u03bb\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03ae\u03c3\u03bf\u03c5\u03bd \u03c3\u03b1\u03bd \u03bc\u03b9\u03b1 \u03b5\u03bd\u03b9\u03b1\u03af\u03b1 \u03ba\u03b1\u03c4\u03b1\u03c3\u03ba\u03b5\u03c5\u03ae.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u039f\u03b9 \u03b4\u03b5\u03be\u03b9\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2 \u03c0\u03bf\u03c5 \u03c7\u03c1\u03b5\u03b9\u03ac\u03b6\u03b5\u03c4\u03b1\u03b9 \u03bd\u03b1 \u03ad\u03c7\u03b5\u03b9 \u03ba\u03ac\u03c0\u03bf\u03b9\u03bf\u03c2 \u03b3\u03b9\u03b1 \u03bd\u03b1 \u03c5\u03bb\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03b5\u03b9 \u03b1\u03c5\u03c4\u03ae \u03c4\u03b7\u03bd \u03ba\u03b1\u03c4\u03b1\u03c3\u03ba\u03b5\u03c5\u03ae \u03b5\u03af\u03bd\u03b1\u03b9 \u03bd\u03b1 \u03bc\u03c0\u03bf\u03c1\u03b5\u03af \u03bd\u03b1 \u03be\u03b5\u03c7\u03c9\u03c1\u03af\u03b6\u03b5\u03b9 \u03c4\u03b1 \u03c5\u03bb\u03b9\u03ba\u03ac \u03c0\u03bf\u03c5 \u03c7\u03c1\u03b5\u03b9\u03ac\u03b6\u03bf\u03bd\u03c4\u03b1\u03b9 \u03b3\u03b9\u03b1 \u03c4\u03b7\u03bd \u03ba\u03b1\u03c4\u03b1\u03c3\u03ba\u03b5\u03c5\u03ae \u03ba\u03b1\u03b9 \u03bd\u03b1 \u03bc\u03c0\u03bf\u03c1\u03b5\u03af \u03bd\u03b1 \u03ba\u03ac\u03bd\u03b5\u03b9 \u03b1\u03c0\u03bb\u03ad\u03c2 \u03ba\u03bf\u03bb\u03bb\u03ae\u03c3\u03b5\u03b9\u03c2 \u03c3\u03b5 \u03bc\u03af\u03b1 \u03c0\u03bb\u03b1\u03ba\u03ad\u03c4\u03b1. \u0395\u03c0\u03af\u03c3\u03b7\u03c2 \u03c7\u03c1\u03b5\u03b9\u03ac\u03b6\u03b5\u03c4\u03b1\u03b9 \u03bc\u03b9\u03b1 \u03b5\u03be\u03bf\u03b9\u03ba\u03b5\u03af\u03c9\u03c3\u03b7 \u03bc\u03b5 \u03c4\u03bf Visual Studio \u03ba\u03b1\u03b9 \u03bc\u03b5 \u03c4\u03b7 \u03b3\u03bb\u03ce\u03c3\u03c3\u03b1 C \u03b3\u03b9\u03b1 \u03bd\u03b1 \u03c0\u03c1\u03bf\u03c7\u03c9\u03c1\u03ae\u03c3\u03b5\u03b9 \u03c3\u03c4\u03bf\u03bd \u03c0\u03c1\u03bf\u03b3\u03c1\u03b1\u03bc\u03bc\u03b1\u03c4\u03b9\u03c3\u03bc\u03cc \u03c4\u03b7\u03c2 \u03c3\u03c5\u03c3\u03ba\u03b5\u03c5\u03ae\u03c2.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u039f\u03b9 \u03c6\u03c9\u03c4\u03bf\u03b3\u03c1\u03b1\u03c6\u03af\u03b5\u03c2 \u03c4\u03b7\u03c2 \u03ba\u03b1\u03c4\u03b1\u03c3\u03ba\u03b5\u03c5\u03ae\u03c2 \u03c0\u03b9\u03c3\u03c4\u03b5\u03cd\u03c9 \u03cc\u03c4\u03b9 \u03b8\u03b1 \u03c3\u03b1\u03c2 \u03b2\u03bf\u03b7\u03b8\u03ae\u03c3\u03bf\u03c5\u03bd.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"412\" height=\"534\" src=\"https:\/\/avlos.gr\/wpress\/wp-content\/uploads\/2026\/01\/ESP32_WebServer_2.jpg\" alt=\"ESP32 \u03a0\u03af\u03bd\u03b1\u03ba\u03b1\u03c2 \u0395\u03bb\u03ad\u03b3\u03c7\u03bf\u03c5\" class=\"wp-image-760\" style=\"width:311px;height:auto\" srcset=\"https:\/\/avlos.gr\/wpress\/wp-content\/uploads\/2026\/01\/ESP32_WebServer_2.jpg 412w, https:\/\/avlos.gr\/wpress\/wp-content\/uploads\/2026\/01\/ESP32_WebServer_2-231x300.jpg 231w\" sizes=\"auto, (max-width: 412px) 100vw, 412px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><br><strong>\u039b\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03af\u03b1 \u03ba\u03b1\u03c4\u03b1\u03c3\u03ba\u03b5\u03c5\u03ae\u03c2<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u03a3\u03c4\u03b7 \u03b4\u03b9\u03b1\u03b4\u03b9\u03ba\u03b1\u03c3\u03af\u03b1 setup \u03b7 \u03ba\u03b1\u03c4\u03b1\u03c3\u03ba\u03b5\u03c5\u03ae \u03b5\u03bc\u03c6\u03b1\u03bd\u03af\u03b6\u03b5\u03b9 \u03c3\u03c4\u03bf Serial Monitor \u03c4\u03b7\u03bd ip \u03b4\u03b9\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7 \u03bc\u03b5 \u03c4\u03b7\u03bd \u03bf\u03c0\u03bf\u03af\u03b1 \u03c3\u03c5\u03bd\u03b4\u03ad\u03b8\u03b7\u03ba\u03b5 \u03c3\u03c4\u03bf \u03c4\u03bf\u03c0\u03b9\u03ba\u03cc wifi. \u0394\u03af\u03bd\u03bf\u03bd\u03c4\u03b1\u03c2 \u03c4\u03b7 \u03b4\u03b9\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7 \u03b1\u03c5\u03c4\u03ae \u03c3\u03c4\u03bf\u03bd browser \u03c4\u03bf\u03c5 \u03c5\u03c0\u03bf\u03bb\u03bf\u03b3\u03b9\u03c3\u03c4\u03ae \u03ae \u03c4\u03bf\u03c5 \u03ba\u03b9\u03bd\u03b7\u03c4\u03bf\u03cd \u03c3\u03bf\u03c5 \u03c0\u03b1\u03af\u03c1\u03bd\u03b5\u03b9\u03c2 \u03c4\u03b7\u03bd \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1 \u03c0\u03bf\u03c5 \u03b5\u03bc\u03c6\u03b1\u03bd\u03af\u03b6\u03b5\u03c4\u03b1\u03b9 \u03c3\u03c4\u03b7 \u03c6\u03c9\u03c4\u03bf\u03b3\u03c1\u03b1\u03c6\u03af\u03b1. \u0392\u03bb\u03ad\u03c0\u03b5\u03b9\u03c2 \u03bc\u03b5 \u03c4\u03b7 \u03c3\u03b5\u03b9\u03c1\u03ac \u03b7\u03bc\u03b5\u03c1\u03bf\u03bc\u03b7\u03bd\u03af\u03b1, \u03ce\u03c1\u03b1, \u03b8\u03b5\u03c1\u03bc\u03bf\u03ba\u03c1\u03b1\u03c3\u03af\u03b1, \u03c5\u03b3\u03c1\u03b1\u03c3\u03af\u03b1, \u03c0\u03af\u03b5\u03c3\u03b7 \u03ba\u03b1\u03b9 \u03c4\u03b7\u03bd \u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7 \u03c4\u03c9\u03bd LED. \u0391\u03c0\u03cc \u03c4\u03b1 \u03c4\u03c1\u03af\u03b1 \u03ba\u03bf\u03c5\u03bc\u03c0\u03b9\u03ac \u03c0\u03bf\u03c5 \u03b1\u03ba\u03bf\u03bb\u03bf\u03c5\u03b8\u03bf\u03cd\u03bd \u03bc\u03c0\u03bf\u03c1\u03b5\u03af\u03c2 \u03bd\u03b1 \u03b1\u03bd\u03ac\u03c8\u03b5\u03b9\u03c2 \u03ba\u03b1\u03b9 \u03bd\u03b1 \u03c3\u03b2\u03ae\u03c3\u03b5\u03b9\u03c2 \u03cc\u03c0\u03b9\u03bf LED \u03b8\u03b5\u03bb\u03ae\u03c3\u03b5\u03b9\u03c2. \u039c\u03c0\u03bf\u03c1\u03b5\u03af\u03c2 \u03c4\u03b1\u03c5\u03c4\u03cc\u03c7\u03c1\u03bf\u03bd\u03b1 \u03bd\u03b1 \u03bb\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03b5\u03af\u03c2 \u03b1\u03c0\u03cc \u03c0\u03bf\u03bb\u03bb\u03ac \u03c3\u03b7\u03bc\u03b5\u03af\u03b1, \u03c5\u03c0\u03bf\u03bb\u03bf\u03b3\u03b9\u03c3\u03c4\u03ad\u03c2 \u03ae \u03ba\u03b9\u03bd\u03b7\u03c4\u03ac. \u0397 \u03b5\u03bd\u03b7\u03bc\u03ad\u03c1\u03c9\u03c3\u03b7 \u03c4\u03b7\u03c2 \u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7\u03c2 \u03c4\u03c9\u03bd \u03b1\u03b9\u03c3\u03b8\u03b7\u03c4\u03ae\u03c1\u03c9\u03bd \u03ba\u03b1\u03b9 \u03c4\u03c9\u03bd LED \u03b3\u03af\u03bd\u03b5\u03c4\u03b1\u03b9 \u03b1\u03c5\u03c4\u03cc\u03bc\u03b1\u03c4\u03b1 \u03ba\u03ac\u03b8\u03b5 30 sec.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u03a4\u03bf\u03c0\u03b9\u03ba\u03ac \u03bc\u03b5 \u03ba\u03ac\u03b8\u03b5 \u03c3\u03cd\u03bd\u03c4\u03bf\u03bc\u03bf \u03c0\u03ac\u03c4\u03b7\u03bc\u03b1 \u03c3\u03c4\u03bf \u03ba\u03bf\u03c5\u03bc\u03c0\u03af-\u03b4\u03b9\u03b1\u03ba\u03cc\u03c0\u03c4\u03b7 ON-OFF \u03b5\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03b9\u03b5\u03af\u03c4\u03b5 \u03c4\u03bf LCD \u03ba\u03b1\u03b9 \u03c0\u03b1\u03af\u03c1\u03bd\u03b5\u03b9\u03c2 \u03c4\u03b9\u03c2 \u03bc\u03b5\u03c4\u03c1\u03ae\u03c3\u03b5\u03b9\u03c2 \u03c4\u03b7\u03c2 \u03b5\u03c0\u03cc\u03bc\u03b5\u03bd\u03b7\u03c2 \u03ba\u03ac\u03c1\u03c4\u03b1\u03c2 \u03c0\u03bf\u03c5 \u03c6\u03b1\u03af\u03bd\u03b5\u03c4\u03b1\u03b9 \u03c3\u03c4\u03bf\u03bd browser.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u039c\u03b5 \u03c0\u03b1\u03c1\u03b1\u03c4\u03b5\u03c4\u03b1\u03bc\u03ad\u03bd\u03bf \u03c0\u03ac\u03c4\u03b7\u03bc\u03b1 \u03c3\u03c4\u03bf \u03ba\u03bf\u03c5\u03bc\u03c0\u03af \u03b1\u03c0\u03b5\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03b9\u03b5\u03af\u03c4\u03b1\u03b9 \u03c4\u03bf LCD \u03ae \u03ac\u03bb\u03bb\u03c9\u03c2 \u03b1\u03c0\u03b5\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03b9\u03b5\u03af\u03c4\u03b1\u03b9 \u03b1\u03c5\u03c4\u03cc\u03bc\u03b1\u03c4\u03b1 \u03c3\u03b5 30 sec<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u03a4\u03bf \u03ba\u03bf\u03c5\u03bc\u03c0\u03af \u2013 \u03b4\u03b9\u03b1\u03ba\u03cc\u03c0\u03c4\u03b7\u03c2 \u03b5\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03b9\u03b5\u03af \u03ad\u03bd\u03b1 interrupt \u03c3\u03c4\u03bf\u03bd ESP32, \u03b4\u03af\u03bd\u03b5\u03b9 \u03c4\u03b9\u03bc\u03ad\u03c2 \u03c3\u03b5 \u03ba\u03ac\u03c0\u03bf\u03b9\u03b5\u03c2 \u03bc\u03b5\u03c4\u03b1\u03b2\u03bb\u03b7\u03c4\u03ad\u03c2 \u03ba\u03b1\u03b9 \u03c4\u03b5\u03bb\u03b5\u03b9\u03ce\u03bd\u03b5\u03b9. \u039f\u03b9 \u03c1\u03bf\u03c5\u03c4\u03af\u03bd\u03b5\u03c2 interrupt \u03bf\u03c6\u03b5\u03af\u03bb\u03bf\u03c5\u03bd \u03bd\u03b1 \u03b5\u03af\u03bd\u03b1\u03b9 \u03c0\u03bf\u03bb\u03cd \u03c3\u03cd\u03bd\u03c4\u03bf\u03bc\u03b5\u03c2. \u03a3\u03c4\u03b7 \u03c3\u03c5\u03bd\u03ad\u03c7\u03b5\u03b9\u03b1 \u03c3\u03c4\u03bf \u03b2\u03c1\u03cc\u03c7\u03bf \u03b5\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1\u03c2 loop() \u03b5\u03be\u03b5\u03c4\u03ac\u03b6\u03bf\u03bd\u03c4\u03b1\u03b9 \u03bf\u03b9 \u03c4\u03b9\u03bc\u03ad\u03c2 \u03b1\u03c0\u03cc \u03b1\u03c5\u03c4\u03ad\u03c2 \u03c4\u03b9\u03c2 \u03bc\u03b5\u03c4\u03b1\u03b2\u03bb\u03b7\u03c4\u03ad\u03c2 \u03b3\u03b9\u03b1 \u03bd\u03b1 \u03b1\u03c0\u03bf\u03c6\u03b1\u03c3\u03af\u03c3\u03b5\u03b9 \u03b7 \u03b5\u03c6\u03b1\u03c1\u03bc\u03bf\u03b3\u03ae \u03b1\u03bd \u03c4\u03bf \u03c0\u03ac\u03c4\u03b7\u03bc\u03b1 \u03ae\u03c4\u03b1\u03bd \u03c3\u03cd\u03bd\u03c4\u03bf\u03bc\u03bf \u03ae \u03c0\u03b1\u03c1\u03b1\u03c4\u03b5\u03c4\u03b1\u03bc\u03ad\u03bd\u03bf \u03ae \u03b1\u03bd \u03ad\u03c6\u03c4\u03b1\u03c3\u03b5 \u03c3\u03b5 \u03c4\u03ad\u03bb\u03bf\u03c2 \u03c7\u03c1\u03cc\u03bd\u03bf\u03c5 \u03b3\u03b9\u03b1 \u03bd\u03b1 \u03b1\u03c0\u03b5\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03b5\u03b9 \u03c4\u03bf LCD.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><br><strong>\u03a5\u03bb\u03b9\u03ba\u03ac<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u03a4\u03b1 \u03c5\u03bb\u03b9\u03ba\u03ac \u03c0\u03bf\u03c5 \u03c7\u03c1\u03b5\u03b9\u03ac\u03c3\u03c4\u03b7\u03ba\u03b1\u03bd \u03b5\u03af\u03bd\u03b1\u03b9<\/p>\n\n\n\n<div class=\"wp-block-group is-vertical is-layout-flex wp-container-core-group-is-layout-4fc3f8e1 wp-block-group-is-layout-flex\">\n<p class=\"wp-block-paragraph\">\u03ad\u03bd\u03b1 ESP\u201132 Dev Kit C V4<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u03c4\u03c1\u03af\u03b1 Led, \u03ba\u03cc\u03ba\u03ba\u03b9\u03bd\u03bf,, \u03c0\u03c1\u03ac\u03c3\u03b9\u03bd\u03bf, \u03ba\u03af\u03c4\u03c1\u03b9\u03bd\u03bf<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u03c4\u03c1\u03b5\u03b9\u03c2 \u03b1\u03bd\u03c4\u03b9\u03c3\u03c4\u03ac\u03c3\u03b5\u03b9\u03c2 220\u03a9 \u03b3\u03b9\u03b1 \u03c4\u03b7 \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03b7 \u03c4\u03c9\u03bd Led<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u03ad\u03bd\u03b1 LCD Serial Interface Module \u03bc\u03b5 I2C interface. \u03a4\u03bf LCD \u03b5\u03af\u03bd\u03b1\u03b9 16 \u03c7\u03b1\u03c1\u03b1\u03ba\u03c4\u03ae\u03c1\u03c9\u03bd \u03b4\u03cd\u03bf \u03b3\u03c1\u03b1\u03bc\u03bc\u03ce\u03bd<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u03ad\u03bd\u03b1 <strong>DS3231<\/strong> RTC is accessed \u03bc\u03b5 I2C interface<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u03ad\u03bd\u03b1 DHT22 Digital Humidity &amp; Temperature Sensor Module<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u03ad\u03bd\u03b1 BMP280 Atmospheric Pressure Sensor Module \u03bc\u03b5 I2C interface<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u03ad\u03bd\u03b1\u03c2 \u03b4\u03b9\u03b1\u03ba\u03cc\u03c0\u03c4\u03b7\u03c2 Push Button<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u03ba\u03b1\u03b9 \u03bc\u03af\u03b1 \u03b1\u03bd\u03c4\u03af\u03c3\u03c4\u03b1\u03c3\u03b7 1k\u03a9 \u03b3\u03b9\u03b1 \u03c4\u03b7 \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03b7 \u03c4\u03bf\u03c5 \u03b4\u03b9\u03b1\u03ba\u03cc\u03c0\u03c4\u03b7<\/p>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><br><strong>\u03a3\u03c5\u03bd\u03b4\u03ad\u03c3\u03b5\u03b9\u03c2<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u039f\u03b9 \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03b5\u03b9\u03c2 \u03c4\u03c9\u03bd Led \u03ba\u03b1\u03b9 \u03c4\u03bf\u03c5 \u03b4\u03b9\u03b1\u03ba\u03cc\u03c0\u03c4\u03b7 \u03b3\u03af\u03bd\u03bf\u03bd\u03c4\u03b1\u03b9 \u03c3\u03c4\u03b1 GPIO 2,3,33 \u03ba\u03b1\u03b9 27 \u03cc\u03c0\u03c9\u03c2 \u03c6\u03b1\u03af\u03bd\u03bf\u03bd\u03c4\u03b1\u03b9 \u03c3\u03c4\u03b7 \u03c3\u03c5\u03bd\u03ad\u03c7\u03b5\u03b9\u03b1. \u039f \u03b4\u03b9\u03b1\u03ba\u03cc\u03c0\u03c4\u03b7\u03c2 \u03c3\u03b5 \u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7 ON \u03c3\u03c5\u03bd\u03b4\u03ad\u03b5\u03b9 \u03c4\u03bf GPIO27 \u03bc\u03b5 \u03c4\u03bf GND \u03bc\u03ad\u03c3\u03c9 \u03c4\u03b7\u03c2 \u03b1\u03bd\u03c4\u03af\u03c3\u03c4\u03b1\u03c3\u03b7\u03c2 1k\u03a9.<\/p>\n\n\n\n<div class=\"wp-block-group is-vertical is-layout-flex wp-container-core-group-is-layout-4fc3f8e1 wp-block-group-is-layout-flex\">\n<p class=\"wp-block-paragraph\">LED 1 \u2192 <strong>GPIO 2<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">LED 2 \u2192 <strong>GPIO 4<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">LED 3 \u2192 <strong>GPIO 33<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0394\u03b9\u03b1\u03ba\u03cc\u03c0\u03c4\u03b7\u03c2 ON-OFF \u2192 <strong>GPIO 27<\/strong><\/p>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u03a4\u03b1 \u03c3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03b1<strong> LCD, DS3231<\/strong> \u03ba\u03b1\u03b9 <strong>BMP280 <\/strong>\u03c3\u03c5\u03bd\u03b4\u03ad\u03bf\u03bd\u03c4\u03b1\u03b9 \u03c3\u03b5 \u03ba\u03bf\u03b9\u03bd\u03cc <strong>I2C <\/strong>bus \u03bc\u03b9\u03b1\u03c2 \u03ba\u03b1\u03b9 \u03ad\u03c7\u03bf\u03c5\u03bd \u03b4\u03b9\u03b1\u03c6\u03bf\u03c1\u03b5\u03c4\u03b9\u03ba\u03ad\u03c2 \u03b4\u03b9\u03b5\u03c5\u03b8\u03cd\u03bd\u03c3\u03b5\u03b9\u03c2. \u0393\u03b9\u03b1 \u03c4\u03b7 \u03b4\u03b7\u03bc\u03b9\u03bf\u03c5\u03c1\u03b3\u03af\u03b1 \u03c4\u03bf\u03c5 I2C bus \u03c7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03b5\u03af\u03c4\u03b1\u03b9 \u03c4\u03bf GPIO21 \u03b3\u03b9\u03b1 SDA \u03ba\u03b1\u03b9 \u03c4\u03bf GPIO22 SCL, \u03ad\u03c4\u03c3\u03b9 \u03ad\u03c7\u03bf\u03c5\u03bc\u03b5 \u03c4\u03b9\u03c2 \u03c0\u03b1\u03c1\u03b1\u03ba\u03ac\u03c4\u03c9 \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03b5\u03b9\u03c2.<\/p>\n\n\n\n<div class=\"wp-block-group is-vertical is-layout-flex wp-container-core-group-is-layout-4fc3f8e1 wp-block-group-is-layout-flex\">\n<p class=\"wp-block-paragraph\"><strong>SDA &#8211;<\/strong><strong>&gt;<\/strong><strong> GPIO 21<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>SCL \u2192 GPIO 22<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>GND \u2192 GND<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>VCC \u2192 3.3V<\/strong> <strong>\u03a0\u03c1\u03bf\u03c3\u03bf\u03c7\u03ae \u03c7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03bf\u03cd\u03bc\u03b5 \u03c4\u03b1 3,3 <\/strong><strong>V <\/strong><strong>\u03b3\u03b9\u03b1 <\/strong><strong>VCC <\/strong><strong>\u03c3\u03c4\u03bf\u03c5\u03c2 \u03b1\u03b9\u03c3\u03b8\u03b7\u03c4\u03ae\u03c1\u03b5\u03c2 \u03ba\u03b1\u03b9 \u03c3\u03c4\u03bf <\/strong><strong>LCD<\/strong><\/p>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><br><strong>\u03a3\u03c5\u03c3\u03ba\u03b5\u03c5\u03ad\u03c2 \u03c3\u03c4\u03bf \u03af\u03b4\u03b9\u03bf bus<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u03a3\u03c5\u03c3\u03ba\u03b5\u03c5\u03ae<\/th><th>\u03a0\u03c1\u03c9\u03c4\u03cc\u03ba\u03bf\u03bb\u03bb\u03bf<\/th><th>\u0394\u03b9\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7<\/th><\/tr><\/thead><tbody><tr><td>LCD I2C<\/td><td>I2C<\/td><td>\u03c3\u03c5\u03bd\u03ae\u03b8\u03c9\u03c2 <code>0x27<\/code> \u03ae <code>0x3F<\/code><\/td><\/tr><tr><td>DS3231<\/td><td>I2C<\/td><td><code>0x68<\/code><\/td><\/tr><tr><td>BMP280<\/td><td>I2C<\/td><td><code>0x76<\/code> \u03ae <code>0x77<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><br><strong>\u039f \u03b1\u03b9\u03c3\u03b8\u03b7\u03c4\u03ae\u03c1\u03b1\u03c2 DHT22 (\u0398\u03b5\u03c1\u03bc\u03bf\u03ba\u03c1\u03b1\u03c3\u03af\u03b1 \/ \u03a5\u03b3\u03c1\u03b1\u03c3\u03af\u03b1)<\/strong> \u03a7\u03c1\u03b5\u03b9\u03ac\u03b6\u03b5\u03c4\u03b1\u03b9 <strong>1 \u03c8\u03b7\u03c6\u03b9\u03b1\u03ba\u03cc pin<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u03a7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03bf\u03cd\u03bc\u03b5 \u03c4\u03bf <strong>pin<\/strong> <strong>GPIO 25<\/strong> <br><strong>DATA \u2192 GPIO 25<\/strong> (\u03c0\u03bf\u03c5 \u03b5\u03af\u03bd\u03b1\u03b9 \u03b3\u03b5\u03bd\u03b9\u03ba\u03ae\u03c2 \u03c7\u03c1\u03ae\u03c3\u03b7\u03c2) <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0388\u03c4\u03c3\u03b9 \u03ad\u03c7\u03bf\u03c5\u03bc\u03b5 \u03c4\u03b7 \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03b7<\/p>\n\n\n\n<div class=\"wp-block-group is-vertical is-layout-flex wp-container-core-group-is-layout-4fc3f8e1 wp-block-group-is-layout-flex\">\n<p class=\"wp-block-paragraph\">VCC -&gt; <strong>3.3V<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">DATA \u2192 <strong>GPIO 25<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">GND \u2192 <strong>GND<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pull-up <strong>4.7k\u03a9 \u2013 10k\u03a9<\/strong> \u03b1\u03c0\u03cc DATA \u2192 VCC (\u03c0\u03bf\u03bb\u03bb\u03ac modules \u03c4\u03b7\u03bd \u03ad\u03c7\u03bf\u03c5\u03bd \u03ae\u03b4\u03b7 \u03b1\u03c5\u03c4\u03ae \u03c4\u03b7\u03bd  \u03b1\u03bd\u03c4\u03af\u03c3\u03c4\u03b1\u03c3\u03b7)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><br>\u039f \u03a4\u03b5\u03bb\u03b9\u03ba\u03cc\u03c2 \u03a0\u03af\u03bd\u03b1\u03ba\u03b1\u03c2 \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03b5\u03c9\u03bd \u03b5\u03af\u03bd\u03b1\u03b9<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u03a5\u03bb\u03b9\u03ba\u03cc<\/th><th>GPIO<\/th><\/tr><\/thead><tbody><tr><td>LED 1<\/td><td>GPIO 2<\/td><\/tr><tr><td>LED 2<\/td><td>GPIO 4<\/td><\/tr><tr><td>LED 3<\/td><td>GPIO 33<\/td><\/tr><tr><td>\u0394\u03b9\u03b1\u03ba\u03cc\u03c0\u03c4\u03b7\u03c2<\/td><td>GPIO 27<\/td><\/tr><tr><td>I2C SDA<\/td><td>GPIO 21<\/td><\/tr><tr><td>I2C SCL<\/td><td>GPIO 22<\/td><\/tr><tr><td>DHT22 DATA<\/td><td>GPIO 25<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u03a3\u03c4\u03b7\u03bd \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1 \u03b2\u03bb\u03ad\u03c0\u03bf\u03c5\u03bc\u03b5 \u03c4\u03b7 \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03b7 \u03c4\u03c9\u03bd \u03b5\u03be\u03b1\u03c1\u03c4\u03b7\u03bc\u03ac\u03c4\u03c9\u03bd \u03c3\u03c4\u03bf ESP32 module<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"482\" height=\"631\" src=\"https:\/\/avlos.gr\/wpress\/wp-content\/uploads\/2026\/01\/ESP32_Station.jpg\" alt=\"ESP32 Station\" class=\"wp-image-754\" style=\"aspect-ratio:0.763873775843308;width:341px;height:auto\" srcset=\"https:\/\/avlos.gr\/wpress\/wp-content\/uploads\/2026\/01\/ESP32_Station.jpg 482w, https:\/\/avlos.gr\/wpress\/wp-content\/uploads\/2026\/01\/ESP32_Station-229x300.jpg 229w\" sizes=\"auto, (max-width: 482px) 100vw, 482px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">\u039b\u03bf\u03b3\u03b9\u03c3\u03bc\u03b9\u03ba\u03cc<br><strong>\u039d\u03ad\u03bf project<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><br>\u0391\u03bd \u03b4\u03b5\u03bd \u03ad\u03c7\u03b5\u03c4\u03b5 \u03b5\u03b3\u03ba\u03b1\u03c4\u03b5\u03c3\u03c4\u03b7\u03bc\u03ad\u03bd\u03bf \u03c4\u03bf Visual Studio, \u03bc\u03c0\u03bf\u03c1\u03b5\u03af\u03c4\u03b5 \u03bd\u03b1 \u03c4\u03bf \u03ba\u03b1\u03c4\u03b5\u03b2\u03ac\u03c3\u03b5\u03c4\u03b5 \u03b1\u03c0\u03cc \u03b5\u03b4\u03ce <a href=\"https:\/\/visualstudio.microsoft.com\/vs\/\">https:\/\/visualstudio.microsoft.com\/vs\/<\/a> . \u0391\u03c6\u03bf\u03cd \u03ba\u03ac\u03bd\u03b5\u03c4\u03b5 \u03c4\u03b7\u03bd \u03b5\u03b3\u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7 \u03c0\u03b7\u03b3\u03b1\u03af\u03bd\u03b5\u03c4\u03b5 \u03c3\u03c4\u03b1 Extensions \u03ba\u03b1\u03b9 \u03b5\u03b3\u03ba\u03b1\u03c4\u03b1\u03c3\u03c4\u03ae\u03c3\u03c4\u03b5 \u03c4\u03bf PlatformIO.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u039c\u03b5 \u03c4\u03b7 \u03c7\u03c1\u03ae\u03c3\u03b7 \u03c4\u03bf\u03c5 Visual Studio \u03bc\u03c0\u03b1\u03af\u03bd\u03b5\u03c4\u03b5 \u03c3\u03c4\u03bf PlatformIO \u03ba\u03b1\u03b9 \u03b4\u03b7\u03bc\u03b9\u03bf\u03c5\u03c1\u03b3\u03b5\u03af\u03c4\u03b5 \u03ad\u03bd\u03b1 \u03bd\u03ad\u03bf project. \u0398\u03b1 \u03c3\u03b1\u03c2 \u03b6\u03b7\u03c4\u03b7\u03b8\u03b5\u03af \u03c4\u03bf \u03c0\u03b5\u03c1\u03b9\u03b2\u03ac\u03bb\u03bb\u03bf\u03bd \u03b1\u03bd\u03ac\u03c0\u03c4\u03c5\u03be\u03b7\u03c2, \u03b3\u03c1\u03ac\u03c6\u03b5\u03c4\u03b5 \u03c4\u03bf ESP32. \u039a\u03b1\u03c4\u03ac \u03c4\u03b7 \u03b4\u03b7\u03bc\u03b9\u03bf\u03c5\u03c1\u03b3\u03af\u03b1 \u03c4\u03bf\u03c5 \u03bd\u03ad\u03bf\u03c5 project \u03b8\u03b1 \u03c0\u03b1\u03c1\u03b1\u03c4\u03b7\u03c1\u03ae\u03c3\u03b5\u03c4\u03b5 \u03bc\u03b9\u03b1 \u03ba\u03b1\u03b8\u03c5\u03c3\u03c4\u03ad\u03c1\u03b7\u03c3\u03b7, \u03b1\u03c5\u03c4\u03ae \u03bf\u03c6\u03b5\u03af\u03bb\u03b5\u03c4\u03b1\u03b9 \u03c3\u03c4\u03bf \u03b3\u03b5\u03b3\u03bf\u03bd\u03cc\u03c2 \u03cc\u03c4\u03b9 \u03c3\u03c4\u03bf PlatformIO \u03b4\u03b7\u03bc\u03b9\u03bf\u03c5\u03c1\u03b3\u03b5\u03af\u03c4\u03b1\u03b9 \u03b1\u03c0\u03cc \u03c4\u03b7\u03bd \u03b1\u03c1\u03c7\u03ae \u03c4\u03bf \u03c0\u03b5\u03c1\u03b9\u03b2\u03ac\u03bb\u03bb\u03bf\u03bd \u03b1\u03bd\u03ac\u03c0\u03c4\u03c5\u03be\u03b7\u03c2 \u03ba\u03b1\u03b9 \u03ad\u03c4\u03c3\u03b9 \u03b3\u03af\u03bd\u03bf\u03bd\u03c4\u03b1\u03b9 \u03c0\u03bf\u03bb\u03bb\u03ac down loads.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u03a3\u03c4\u03bf \u03b1\u03c1\u03c7\u03b5\u03af\u03bf platformio.ini \u03b8\u03b1 \u03b2\u03c1\u03b5\u03af\u03c4\u03b5 \u03c4\u03bf \u03c0\u03b5\u03c1\u03b9\u03b2\u03ac\u03bb\u03bb\u03bf\u03bd \u03b1\u03bd\u03ac\u03c0\u03c4\u03c5\u03be\u03b7\u03c2 \u03c0\u03bf\u03c5 \u03b4\u03b7\u03bc\u03b9\u03bf\u03cd\u03c1\u03b3\u03b7\u03c3\u03b5 \u03c4\u03bf PlatformIO. \u0395\u03ba\u03b5\u03af \u03b5\u03c3\u03b5\u03af\u03c2 \u03b8\u03b1 \u03c0\u03c1\u03bf\u03c3\u03b8\u03ad\u03c3\u03b5\u03c4\u03b5 \u03c4\u03b9\u03c2 \u03b2\u03b9\u03b2\u03bb\u03b9\u03bf\u03b8\u03ae\u03ba\u03b5\u03c2 \u03c0\u03bf\u03c5 \u03b8\u03b1 \u03c7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03b7\u03b8\u03bf\u03cd\u03bd \u03b3\u03b9\u03b1 \u03c4\u03b7\u03bd \u03b1\u03bd\u03ac\u03c0\u03c4\u03c5\u03be\u03b7 \u03c4\u03b7\u03c2 \u03b5\u03c6\u03b1\u03c1\u03bc\u03bf\u03b3\u03ae\u03c2. \u03a4\u03bf \u03c0\u03b5\u03c1\u03b9\u03b5\u03c7\u03cc\u03bc\u03b5\u03bd\u03bf \u03b1\u03c5\u03c4\u03bf\u03cd \u03c4\u03bf\u03c5 \u03b1\u03c1\u03c7\u03b5\u03af\u03bf\u03c5 \u03b3\u03b9\u03b1 \u03c4\u03b7\u03bd \u03b5\u03c6\u03b1\u03c1\u03bc\u03bf\u03b3\u03ae \u03bc\u03b1\u03c2 \u03b8\u03b1 \u03b5\u03af\u03bd\u03b1\u03b9 \u03cc\u03c0\u03c9\u03c2 \u03c4\u03bf \u03c0\u03b1\u03c1\u03b1\u03ba\u03ac\u03c4\u03c9.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;env:esp32dev]\nplatform = espressif32\nboard = esp32dev\nframework = arduino\nmonitor_speed = 115200\n\nlib_deps =\n&nbsp; &nbsp; adafruit\/RTClib\n&nbsp; &nbsp; adafruit\/DHT sensor library\n&nbsp; &nbsp; adafruit\/Adafruit Unified Sensor\n&nbsp; &nbsp; adafruit\/Adafruit BMP280 Library\n&nbsp; &nbsp; bblanchon\/ArduinoJson\n&nbsp; &nbsp; marcoschwartz\/LiquidCrystal_I2C\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>\u039a\u03ce\u03b4\u03b9\u03ba\u03b1\u03c2 \u03b5\u03c6\u03b1\u03c1\u03bc\u03bf\u03b3\u03ae\u03c2<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u039c\u03bf\u03bb\u03bf\u03bd\u03cc\u03c4\u03b9 \u03b3\u03b9\u03b1 \u03c4\u03bf \u03b3\u03c1\u03ac\u03c8\u03b9\u03bc\u03bf \u03b5\u03c6\u03b1\u03c1\u03bc\u03bf\u03b3\u03ce\u03bd \u03b3\u03b9\u03b1 \u03bc\u03b9\u03ba\u03c1\u03bf \u03b5\u03bb\u03b5\u03b3\u03ba\u03c4\u03ad\u03c2 \u03c7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03bf\u03cd\u03c3\u03b1 \u03bc\u03ad\u03c7\u03c1\u03b9 \u03c0\u03c1\u03b9\u03bd \u03b1\u03c0\u03cc \u03bb\u03af\u03b3\u03bf \u03ba\u03b1\u03b9\u03c1\u03cc \u03c4\u03bf Ardiuno IDE, \u03c4\u03bf \u03bf\u03c0\u03bf\u03af\u03bf \u03b5\u03af\u03bd\u03b1\u03b9 \u03ba\u03b1\u03b9 \u03c4\u03bf \u03c0\u03c1\u03ce\u03c4\u03bf \u03bf\u03bb\u03bf\u03ba\u03bb\u03b7\u03c1\u03c9\u03bc\u03ad\u03bd\u03bf \u03c0\u03b5\u03c1\u03b9\u03b2\u03ac\u03bb\u03bb\u03bf\u03bd \u03c0\u03bf\u03c5 \u03b5\u03bc\u03c6\u03b1\u03bd\u03af\u03c3\u03c4\u03b7\u03ba\u03b5 \u03b3\u03b9\u03b1 \u03c0\u03c1\u03bf\u03b3\u03c1\u03b1\u03bc\u03bc\u03b1\u03c4\u03b9\u03c3\u03bc\u03cc \u03c3\u03b5 \u03bc\u03b9\u03ba\u03c1\u03bf\u03b5\u03bb\u03b5\u03ba\u03c4\u03ad\u03c2, \u03b7 \u03c4\u03b5\u03bb\u03b5\u03c5\u03c4\u03b1\u03af\u03b1 \u03c4\u03bf\u03c5 \u03ad\u03ba\u03b4\u03bf\u03c3\u03ae \u03b7 2.3.7 \u03ad\u03c7\u03b5\u03b9 \u03ad\u03bd\u03b1\u03bd \u03c0\u03c1\u03bf\u03b2\u03bb\u03b7\u03bc\u03b1\u03c4\u03b9\u03ba\u03cc down loader \u03ba\u03b1\u03b9 \u03b4\u03b5\u03bd \u03bc\u03bf\u03c5 \u03b5\u03c0\u03ad\u03c4\u03c1\u03b5\u03c0\u03b5 \u03bd\u03b1 \u03b5\u03b3\u03ba\u03b1\u03c4\u03b1\u03c3\u03c4\u03ae\u03c3\u03c9 \u03c0\u03bb\u03b1\u03ba\u03ad\u03c4\u03b5\u03c2 \u03b3\u03b9\u03b1 \u03c4\u03bf\u03bd ESP32. \u0391\u03c5\u03c4\u03cc \u03bc\u03b5 \u03bf\u03b4\u03ae\u03b3\u03b7\u03c3\u03b5 \u03bd\u03b1 \u03be\u03b5\u03ba\u03b9\u03bd\u03ae\u03c3\u03c9 \u03bc\u03b5 \u03c4\u03bf Visual Studio, \u03c0\u03bf\u03c5 \u03bc\u03bf\u03c5 \u03ae\u03c4\u03b1\u03bd \u03ba\u03b1\u03b9 \u03b3\u03bd\u03c9\u03c3\u03c4\u03cc \u03b1\u03c0\u03cc \u03ac\u03bb\u03bb\u03b5\u03c2 \u03b5\u03c6\u03b1\u03c1\u03bc\u03bf\u03b3\u03ad\u03c2. \u0391\u03c0\u03cc \u03c4\u03b1 Extensions \u03b5\u03b3\u03ba\u03b1\u03c4\u03ad\u03c3\u03c4\u03b7\u03c3\u03b1 \u03c4\u03bf PlatformIO , \u03c4\u03bf \u03bf\u03c0\u03bf\u03af\u03bf \u03b5\u03af\u03bd\u03b1\u03b9 \u03c0\u03b9\u03bf \u03b5\u03c0\u03b1\u03b3\u03b3\u03b5\u03bb\u03bc\u03b1\u03c4\u03b9\u03ba\u03cc \u03b3\u03b9\u03b1 \u03c4\u03b7 \u03b4\u03b7\u03bc\u03b9\u03bf\u03c5\u03c1\u03b3\u03af\u03b1 \u03c4\u03ad\u03c4\u03bf\u03b9\u03c9\u03bd \u03b5\u03c6\u03b1\u03c1\u03bc\u03bf\u03b3\u03ce\u03bd \u03bc\u03b5 \u03bc\u03b9\u03ba\u03c1\u03bf \u03b5\u03bb\u03b5\u03b3\u03ba\u03c4\u03ad\u03c2.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u03a4\u03b1 \u03b4\u03cd\u03bf \u03b2\u03b1\u03c3\u03b9\u03ba\u03ac \u03b1\u03c1\u03c7\u03b5\u03af\u03b1 \u03c0\u03bf\u03c5 \u03b8\u03b1 \u03c7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03b5\u03c4\u03b5 \u03b5\u03af\u03bd\u03b1\u03b9 \u03c4\u03bf platformio.ini, \u03c0\u03bf\u03c5 \u03b1\u03bd\u03b1\u03c6\u03ad\u03c1\u03b8\u03b7\u03ba\u03b5 \u03c0\u03b1\u03c1\u03b1\u03c0\u03ac\u03bd\u03c9 \u03ba\u03b1\u03b9 \u03c4\u03bf main.cpp. \u03a3\u03c4\u03bf \u03b1\u03c1\u03c7\u03b5\u03af\u03bf main.cpp \u03b3\u03c1\u03ac\u03c6\u03b5\u03c4\u03b5 \u03c4\u03bf\u03bd \u03ba\u03ce\u03b4\u03b9\u03ba\u03b1 \u03c3\u03b1\u03c2 \u03c3\u03b5 \u03b3\u03bb\u03ce\u03c3\u03c3\u03b1 C \u03c3\u03c7\u03b5\u03b4\u03cc\u03bd \u03bc\u03b5 \u03c4\u03b7\u03bd \u03af\u03b4\u03b9\u03b1 \u03b4\u03bf\u03bc\u03ae \u03c0\u03bf\u03c5 \u03b3\u03c1\u03ac\u03c6\u03b5\u03c4\u03b1\u03b9 \u03ba\u03b1\u03b9 \u03c3\u03c4\u03bf Arduino IDE.  \u039c\u03b5 \u03c4\u03b7 \u03b4\u03b7\u03bc\u03b9\u03bf\u03c5\u03c1\u03b3\u03af\u03b1 \u03c4\u03bf\u03c5 \u03b1\u03c1\u03c7\u03b5\u03af\u03bf\u03c5 main.cpp \u03c4\u03bf PlatformIO \u03b4\u03b7\u03bc\u03b9\u03bf\u03c5\u03c1\u03b3\u03b5\u03af \u03c4\u03b7 \u03b4\u03bf\u03bc\u03ae \u03cc\u03c0\u03bf\u03c5 \u03b8\u03b1 \u03c4\u03bf\u03c0\u03bf\u03b8\u03b5\u03c4\u03ae\u03c3\u03b5\u03b9\u03c2 \u03c4\u03b1 \u03c4\u03bc\u03ae\u03bc\u03b1\u03c4\u03b1 \u03c4\u03bf\u03c5 \u03ba\u03ce\u03b4\u03b9\u03ba\u03b1.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><br><strong>\u0392\u03b9\u03b2\u03bb\u03b9\u03bf\u03b8\u03ae\u03ba\u03b5\u03c2 \u03c0\u03bf\u03c5 \u03b8\u03b1 \u03c7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03b7\u03b8\u03bf\u03cd\u03bd<\/strong><\/h2>\n\n\n\n<div class=\"wp-block-group is-vertical is-layout-flex wp-container-core-group-is-layout-4fc3f8e1 wp-block-group-is-layout-flex\">\n<p class=\"wp-block-paragraph\">#include &lt;Arduino.h&gt;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">#include &lt;WiFi.h&gt;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">#include &lt;WebServer.h&gt;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">#include &lt;Wire.h&gt;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">#include &lt;RTClib.h&gt;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">#include &lt;DHT.h&gt;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">#include &lt;Adafruit_BMP280.h&gt;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">#include &lt;time.h&gt;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">#include &lt;LiquidCrystal_I2C.h&gt;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">#include &lt;ArduinoJson.h&gt;<\/p>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><br><strong>\u039f\u03b9 \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03b5\u03b9\u03c2 \u03c0\u03bf\u03c5 \u03ba\u03ac\u03bd\u03b1\u03c4\u03b5 \u03c3\u03c4\u03b7\u03bd \u03c0\u03bb\u03b1\u03ba\u03ad\u03c4\u03b1<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u03a3\u03c4\u03b7 \u03c3\u03c5\u03bd\u03ad\u03c7\u03b5\u03b9\u03b1 \u03bf\u03c1\u03af\u03b6\u03b5\u03c4\u03b1\u03b9 \u03c3\u03c4\u03bf \u03c0\u03c1\u03cc\u03b3\u03c1\u03b1\u03bc\u03bc\u03b1 \u03c4\u03b9\u03c2 \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03b5\u03b9\u03c2 \u03c0\u03bf\u03c5 \u03ba\u03ac\u03bd\u03b1\u03c4\u03b5 \u03c3\u03c4\u03b7\u03bd \u03c0\u03bb\u03b1\u03ba\u03ad\u03c4\u03b1<\/p>\n\n\n\n<div class=\"wp-block-group is-vertical is-layout-flex wp-container-core-group-is-layout-4fc3f8e1 wp-block-group-is-layout-flex\">\n<p class=\"wp-block-paragraph\"><strong>\/\/ LEDs<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">#define LED1 2<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">#define LED2 4<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">#define LED3 33<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\/\/ Push button<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">#define BUTTON_PIN 27<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">#define LONG_PRESS_TIME 1000 &nbsp; \/\/ ms<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">#define DEBOUNCE_TIME &nbsp; 200 &nbsp; &nbsp;\/\/ ms<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\/\/ DHT22<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">#define DHTPIN 25<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">#define DHTTYPE DHT22<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\/\/ I2C<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">#define SDA_PIN 21<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">#define SCL_PIN 22<\/p>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><br><strong>\u0397 \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03b7 \u03bc\u03b5 \u03c4\u03bf WiFi \u03c4\u03bf\u03c5 \u03b4\u03b9\u03ba\u03c4\u03cd\u03bf\u03c5 \u03c3\u03b1\u03c2<\/strong><\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>const char* ssid = \"my ssid\";\nconst char* password = \"my password\";\n\nWebServer server(80);\nRTC_DS3231 rtc;\nDHT dht(DHTPIN, DHTTYPE);\nAdafruit_BMP280 bmp;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><br><strong>Global \u03bc\u03b5\u03c4\u03b1\u03b2\u03bb\u03b7\u03c4\u03ad\u03c2<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>unsigned long lcdTimeout = 0;\nbool lcdOn = false;\nint displayMode = 0; \/\/ 0=RTC, 1=DHT22, 2=BMP280\n\nvolatile bool buttonEvent = false;\nvolatile unsigned long pressStartTime = 0;\nvolatile unsigned long lastInterruptTime = 0;\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><br><strong>\u0394\u03b7\u03bb\u03ce\u03c3\u03b5\u03b9\u03c2 \u03c4\u03c9\u03bd \u03c3\u03c5\u03bd\u03b1\u03c1\u03c4\u03ae\u03c3\u03b5\u03c9\u03bd (declarations)<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>int myFunction(int, int);\t\u03c4\u03c5\u03c0\u03b9\u03ba\u03ae \u03b4\u03ae\u03bb\u03c9\u03c3\u03b7 \u03c0\u03bf\u03c5 \u03c4\u03b7 \u03b2\u03ac\u03b6\u03b5\u03b9 \u03c4\u03bf \u03c3\u03cd\u03c3\u03c4\u03b7\u03bc\u03b1 \u03b3\u03b9\u03b1 \u03bd\u03b1 \u03b4\u03b7\u03bc\u03b9\u03bf\u03c5\u03c1\u03b3\u03ae\u03c3\u03b5\u03b9 \u03c4\u03b7 \u03b4\u03bf\u03bc\u03ae \u03c0\u03c1\u03bf\u03b3\u03c1\u03b1\u03bc\u03bc\u03b1\u03c4\u03b9\u03c3\u03bc\u03bf\u03cd\nvoid setupRTCfromNTP();\n\/\/void handleButton();\nString getRTC();\nString getDHT();\nString getBMP();\nvoid handleRoot();\nvoid toggleLED(int );\nvoid IRAM_ATTR handleButtonInterrupt();\nvoid updateLCD();\nvoid handleData();\nString getDateGR();\nString getTimeGR();\nString getTemp();\nString getHum();\n\n<strong>\u03a0\u03b1\u03c1\u03ac\u03b3\u03c1\u03b1\u03c6\u03bf\u03c2 setup<\/strong><\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>\u03a4\u03bf \u03c0\u03b5\u03c1\u03b9\u03b5\u03c7\u03cc\u03bc\u03b5\u03bd\u03bf \u03b1\u03c5\u03c4\u03ae\u03c2 \u03c4\u03b7\u03c2 \u03c0\u03b1\u03c1\u03b1\u03b3\u03c1\u03ac\u03c6\u03bf\u03c5 \u03b5\u03ba\u03c4\u03b5\u03bb\u03b5\u03af\u03c4\u03b1\u03b9 \u03bc\u03af\u03b1 \u03bc\u03cc\u03bd\u03bf \u03c6\u03bf\u03c1\u03ac \u03ba\u03b1\u03c4\u03ac \u03c4\u03b7\u03bd \u03b5\u03ba\u03ba\u03af\u03bd\u03b7\u03c3\u03b7 \u03c4\u03bf\u03c5 \u03c3\u03c5\u03c3\u03c4\u03ae\u03bc\u03b1\u03c4\u03bf\u03c2.\n\nvoid setup() {\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><br><strong>\u03a0\u03b1\u03c1\u03ac\u03b3\u03c1\u03b1\u03c6\u03bf\u03c2 loop<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u03a4\u03bf \u03c0\u03b5\u03c1\u03b9\u03b5\u03c7\u03cc\u03bc\u03b5\u03bd\u03bf \u03b1\u03c5\u03c4\u03ae\u03c2 \u03c4\u03b7\u03c2 \u03c0\u03b1\u03c1\u03b1\u03b3\u03c1\u03ac\u03c6\u03bf\u03c5 \u03b5\u03ba\u03c4\u03b5\u03bb\u03b5\u03af\u03c4\u03b1\u03b9 \u03c3\u03c5\u03bd\u03b5\u03c7\u03ce\u03c2 \u03ba\u03b1\u03b9 \u03c5\u03bb\u03bf\u03c0\u03bf\u03b9\u03b5\u03af \u03c4\u03b7 \u03bb\u03bf\u03b3\u03b9\u03ba\u03ae \u03c4\u03b7\u03c2 \u03b5\u03c6\u03b1\u03c1\u03bc\u03bf\u03b3\u03ae\u03c2.\n\u03a3\u03c4\u03bf\u03bd \u03ba\u03ce\u03b4\u03b9\u03ba\u03b1 \u03c4\u03b7\u03c2 \u03b5\u03c6\u03b1\u03c1\u03bc\u03bf\u03b3\u03ae\u03c2 \u03b8\u03b1 \u03b2\u03c1\u03b5\u03af\u03c4\u03b5 \u03c0\u03bb\u03ae\u03c1\u03b5\u03c2 \u03c4\u03bf \u03c0\u03b5\u03c1\u03b9\u03b5\u03c7\u03cc\u03bc\u03b5\u03bd\u03bf \u03c4\u03b7\u03c2 loop() \n\nvoid loop() {\n\n}\n\n<strong>\u039f\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2 \u03c3\u03c5\u03bd\u03b1\u03c1\u03c4\u03ae\u03c3\u03b5\u03c9\u03bd<\/strong><\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>\u0395\u03b4\u03ce \u03b5\u03af\u03bd\u03b1\u03b9 \u03bf \u03c7\u03ce\u03c1\u03bf\u03c2 \u03c0\u03bf\u03c5 \u03c4\u03bf\u03c0\u03bf\u03b8\u03b5\u03c4\u03bf\u03cd\u03bd\u03c4\u03b1\u03b9 \u03bf\u03b9 \u03c3\u03c5\u03bd\u03b1\u03c1\u03c4\u03ae\u03c3\u03b5\u03b9\u03c2 \u03c0\u03bf\u03c5 \u03c5\u03bb\u03bf\u03c0\u03bf\u03b9\u03bf\u03cd\u03bd \u03c4\u03b7\u03bd \u03b5\u03c6\u03b1\u03c1\u03bc\u03bf\u03b3\u03ae\n\/\/ put function definitions here:\n\u03b5\u03b4\u03ce \u03b2\u03bb\u03ad\u03c0\u03bf\u03c5\u03bc\u03b5 \u03bc\u03b9\u03b1 \u03c4\u03c5\u03c0\u03b9\u03ba\u03ae \u03c3\u03c5\u03bd\u03ac\u03c1\u03c4\u03b7\u03c3\u03b7 \u03c0\u03bf\u03c5 \u03c4\u03b7 \u03c3\u03c5\u03bd\u03b1\u03bd\u03c4\u03ae\u03c3\u03b1\u03bc\u03b5 \u03ba\u03b1\u03b9 \u03c3\u03c4\u03b9\u03c2 \u03b4\u03b7\u03bb\u03ce\u03c3\u03b5\u03b9\u03c2 \u03c3\u03c5\u03bd\u03b1\u03c1\u03c4\u03ae\u03c3\u03b5\u03c9\u03bd. \u03a4\u03b7\u03bd \u03b2\u03ac\u03b6\u03b5\u03b9 \u03c4\u03bf PlatformIO \u03c3\u03c4\u03b7 \u03c6\u03ac\u03c3\u03b7 \u03b4\u03b7\u03bc\u03b9\u03bf\u03c5\u03c1\u03b3\u03af\u03b1\u03c2 \u03c4\u03bf\u03c5 project  \u03b3\u03b9\u03b1 \u03bd\u03b1 \u03bc\u03b1\u03c2 \u03b4\u03b5\u03af\u03be\u03b5\u03b9 \u03c4\u03b7 \u03b4\u03bf\u03bc\u03ae \u03c0\u03bf\u03c5 \u03b8\u03b1 \u03b1\u03ba\u03bf\u03bb\u03bf\u03c5\u03b8\u03ae\u03c3\u03bf\u03c5\u03bc\u03b5 \u03c3\u03c4\u03b7\u03bd \u03c3\u03cd\u03bd\u03c4\u03b1\u03be\u03b7 \u03c4\u03bf\u03c5 \u03ba\u03ce\u03b4\u03b9\u03ba\u03b1 \u03bc\u03b1\u03c2.\n\nint myFunction(int x, int y) {\t\t\n&nbsp; return x + y;\n}\n\n\u03a3\u03c4\u03bf\u03bd \u03ba\u03ce\u03b4\u03b9\u03ba\u03b1 \u03c4\u03b7\u03c2 \u03b5\u03c6\u03b1\u03c1\u03bc\u03bf\u03b3\u03ae\u03c2 \u03b8\u03b1 \u03b2\u03c1\u03b5\u03af\u03c4\u03b5 \u03c0\u03bb\u03ae\u03c1\u03b5\u03b9\u03c2 \u03cc\u03bb\u03b5\u03c2 \u03c4\u03b9\u03c2 \u03c3\u03c5\u03bd\u03b1\u03c1\u03c4\u03ae\u03c3\u03b5\u03b9\u03c2 \u03c0\u03bf\u03c5 \u03c5\u03bb\u03bf\u03c0\u03bf\u03b9\u03bf\u03cd\u03bd \u03c4\u03b7\u03bd \u03b4\u03b9\u03ba\u03ae \u03bc\u03b1\u03c2 \u03b5\u03c6\u03b1\u03c1\u03bc\u03bf\u03b3\u03ae.\n\n<strong>\u0395\u03c0\u03b9\u03c3\u03b7\u03bc\u03ac\u03bd\u03c3\u03b5\u03b9\u03c2<\/strong><\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">1. \u0397 \u03b7\u03bc\u03b5\u03c1\u03bf\u03bc\u03b7\u03bd\u03af\u03b1 \u03ba\u03b1\u03b9 \u03ce\u03c1\u03b1 \u03b4\u03af\u03bd\u03bf\u03bd\u03c4\u03b1\u03b9 \u03c3\u03c4\u03bf Real Time Clock \u03b1\u03c0\u03cc NTP (Network Time Protocol) server&nbsp;\u03bc\u03b5 \u03c4\u03b7 \u03c3\u03c5\u03bd\u03ac\u03c1\u03c4\u03b7\u03c3\u03b7 setupRTCfromNTP() \u03c3\u03c4\u03b7 \u03c6\u03ac\u03c3\u03b7 \u03c4\u03bf setup() \u03c4\u03b7\u03c2 \u03b5\u03c6\u03b1\u03c1\u03bc\u03bf\u03b3\u03ae\u03c2<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">2. \u039f \u03c0\u03af\u03bd\u03b1\u03ba\u03b1\u03c2 routine table \u03c4\u03bf\u03c5 ERP32 server \u03c0\u03bf\u03c5 \u03c5\u03bb\u03bf\u03c0\u03bf\u03b9\u03bf\u03cd\u03bc\u03b5 \u03b4\u03af\u03bd\u03b5\u03c4\u03b1\u03b9 \u03c3\u03c4\u03b7 \u03c6\u03ac\u03c3\u03b7 \u03c4\u03bf\u03c5 setup() \u03c4\u03b7\u03c2 \u03b5\u03c6\u03b1\u03c1\u03bc\u03bf\u03b3\u03ae\u03c2, \u03c0\u03c1\u03b9\u03bd \u03be\u03b5\u03ba\u03b9\u03bd\u03ae\u03c3\u03bf\u03c5\u03bc\u03b5 \u03c4\u03bf server \u03ba\u03b1\u03b9 \u03b5\u03af\u03bd\u03b1\u03b9<\/p>\n\n\n\n<div class=\"wp-block-group is-vertical is-layout-flex wp-container-core-group-is-layout-4fc3f8e1 wp-block-group-is-layout-flex\">\n<p class=\"wp-block-paragraph\">&nbsp; &nbsp; server.on(&#8220;\/&#8221;, handleRoot);<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp; &nbsp; server.on(&#8220;\/led1&#8221;, [](){ toggleLED(LED1); });<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp; &nbsp; server.on(&#8220;\/led2&#8221;, [](){ toggleLED(LED2); });<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp; &nbsp; server.on(&#8220;\/led3&#8221;, [](){ toggleLED(LED3); });<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp; &nbsp; server.on(&#8220;\/data&#8221;, handleData);<\/p>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\">3. \u0397 \u03c3\u03c5\u03bd\u03ac\u03c1\u03c4\u03b7\u03c3\u03b7 void handleRoot() \u03c5\u03bb\u03bf\u03c0\u03bf\u03b9\u03b5\u03af \u03c4\u03b7 \u03b4\u03b7\u03bc\u03b9\u03bf\u03c5\u03c1\u03b3\u03af\u03b1 \u03c4\u03b7\u03c2 \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1\u03c2 \u03c3\u03c4\u03bf\u03bd browser \u03ba\u03b1\u03b9 \u03b7 \u03b5\u03bd\u03b7\u03bc\u03ad\u03c1\u03c9\u03c3\u03b7 \u03c4\u03b7\u03c2 \u03b3\u03af\u03bd\u03b5\u03c4\u03b1\u03b9 \u03bc\u03b5 \u03c4\u03b5\u03c7\u03bd\u03b9\u03ba\u03ae <strong>AJAX (\u03c7\u03c9\u03c1\u03af\u03c2 reload), <\/strong><strong>\u03c7\u03c9\u03c1\u03af\u03c2 \u03b4\u03b7\u03bb\u03b1\u03b4\u03ae \u03bd\u03b1 \u03be\u03b1\u03bd\u03b1\u03c6\u03bf\u03c1\u03c4\u03ce\u03bd\u03b5\u03c4\u03b1\u03b9,  \u03b1\u03c0\u03cc \u03c4\u03bf <\/strong><strong>script<\/strong><strong>updateData() <\/strong><strong>\u03ba\u03ac\u03b8\u03b5 30 <\/strong><strong>sec.<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u039f \u03ba\u03ce\u03b4\u03b9\u03ba\u03b1\u03c2 \u03c4\u03b7\u03c2 \u03b5\u03c6\u03b1\u03c1\u03bc\u03bf\u03b3\u03ae\u03c2<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u0395\u03b4\u03ce \u03b2\u03c1\u03af\u03c3\u03ba\u03b5\u03c4\u03b1\u03b9 \u03c4\u03bf \u03c0\u03bb\u03ae\u03c1\u03b5\u03c2 \u03c0\u03b5\u03c1\u03b9\u03b5\u03c7\u03cc\u03bc\u03b5\u03bd\u03bf \u03c4\u03bf\u03c5 \u03b1\u03c1\u03c7\u03b5\u03af\u03bf main.cpp<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;Arduino.h&gt;\n#include &lt;WiFi.h&gt;\n#include &lt;WebServer.h&gt;\n#include &lt;Wire.h&gt;\n#include &lt;RTClib.h&gt;\n#include &lt;DHT.h&gt;\n#include &lt;Adafruit_BMP280.h&gt;\n#include &lt;time.h&gt;\n#include &lt;LiquidCrystal_I2C.h&gt;\n#include &lt;ArduinoJson.h&gt;\n\n\n\/\/ LEDs\n#define LED1 2\n#define LED2 4\n#define LED3 33\n\n\/\/ Push button\n#define BUTTON_PIN 27\n#define LONG_PRESS_TIME 1000   \/\/ ms\n#define DEBOUNCE_TIME   200    \/\/ ms\n\n\n\/\/ DHT22\n#define DHTPIN 25\n#define DHTTYPE DHT22\n\n\/\/ I2C\n#define SDA_PIN 21\n#define SCL_PIN 22\n\n\/\/ LCD\nLiquidCrystal_I2C lcd(0x27, 16, 2); \/\/ \u03ac\u03bb\u03bb\u03b1\u03be\u03b5 0x27 \u03b1\u03bd \u03c7\u03c1\u03b5\u03b9\u03ac\u03b6\u03b5\u03c4\u03b1\u03b9\n\n\nconst char* ssid = \"your-ssid\";\nconst char* password = \"your-password\";\n\nWebServer server(80);\nRTC_DS3231 rtc;\nDHT dht(DHTPIN, DHTTYPE);\nAdafruit_BMP280 bmp;\n\nunsigned long lcdTimeout = 0;\nbool lcdOn = false;\nint displayMode = 0; \/\/ 0=RTC, 1=DHT22, 2=BMP280\n\nvolatile bool buttonEvent = false;\nvolatile unsigned long pressStartTime = 0;\nvolatile unsigned long lastInterruptTime = 0;\n\n\n\/\/ -----------------------------------------------------\n\n\/\/ put function declarations here:\nint myFunction(int, int);\nvoid setupRTCfromNTP();\n\/\/void handleButton();\nString getRTC();\nString getDHT();\nString getBMP();\nvoid handleRoot();\nvoid toggleLED(int );\nvoid IRAM_ATTR handleButtonInterrupt();\nvoid updateLCD();\nvoid handleData();\nString getDateGR();\nString getTimeGR();\nString getTemp();\nString getHum();\n\n\/\/ ------------------------------------------------------\n\nvoid setup() {\n  \/\/ put your setup code here, to run once:\n  int result = myFunction(2, 3);\n\n   Serial.begin(115200);\n\n    pinMode(LED1, OUTPUT);\n    pinMode(LED2, OUTPUT);\n    pinMode(LED3, OUTPUT);\n    pinMode(BUTTON_PIN, INPUT_PULLUP);\n\n    attachInterrupt(\n        digitalPinToInterrupt(BUTTON_PIN),\n        handleButtonInterrupt,\n        CHANGE   \/\/  press + release\n    );\n\n    Wire.begin(SDA_PIN, SCL_PIN);\n\n    lcd.init();\n    lcd.backlight();\n\n    lcd.setCursor(0,0);\n    lcd.print(\"ESP32 OK\");\n    lcd.setCursor(0,1);\n    lcd.print(\"LCD I2C 1602\");\n\n    rtc.begin();\n    dht.begin();\n    bmp.begin(0x76);\n\n    WiFi.begin(ssid, password);\n    while (WiFi.status() != WL_CONNECTED) delay(500);\n\n    setupRTCfromNTP();\n\n    server.on(\"\/\", handleRoot);\n    server.on(\"\/led1\", &#91;](){ toggleLED(LED1); });\n    server.on(\"\/led2\", &#91;](){ toggleLED(LED2); });\n    server.on(\"\/led3\", &#91;](){ toggleLED(LED3); });\n    server.on(\"\/data\", handleData);\n\n    server.begin();\n    Serial.println(WiFi.localIP());\n    \n\n}\n\n\/\/ ------------------------------------------------------\n\nvoid loop() {\n  \/\/ put your main code here, to run repeatedly:\n\n    if (buttonEvent) {\n        buttonEvent = false;\n\n        unsigned long pressDuration =\n            millis() - pressStartTime;\n\n        if (pressDuration &gt;= LONG_PRESS_TIME) {\n            \/\/  LONG PRESS \u2192 LCD OFF\n            lcdOn = false;\n            lcd.clear();\n            lcd.noBacklight();\n        } else {\n            \/\/  SHORT PRESS \u2192 change screen\n            lcdOn = true;\n            lcdTimeout = millis() + 30000;\n            displayMode = (displayMode + 1) % 3;\n            updateLCD();\n        }\n    }\n\n    server.handleClient();\n    \/\/handleButton();\n\n    if (lcdOn &amp;&amp; millis() &gt; lcdTimeout) {\n        lcdOn = false;\n        lcd.clear();\n        lcd.noBacklight();\n    }\n    \n}\n\n\/\/ -------------------------------------------------------\n\n\/\/ put function definitions here:\nint myFunction(int x, int y) {\n  return x + y;\n}\n\n\nvoid setupRTCfromNTP() {\n    configTime(0, 0, \"pool.ntp.org\", \"time.nist.gov\");\n    struct tm timeinfo;\n\n    if (getLocalTime(&amp;timeinfo)) {\n        rtc.adjust(DateTime(\n            timeinfo.tm_year + 1900,\n            timeinfo.tm_mon + 1,\n            timeinfo.tm_mday,\n            timeinfo.tm_hour,\n            timeinfo.tm_min,\n            timeinfo.tm_sec\n        ));\n        Serial.println(\"RTC synchronized from NTP\");\n    } else {\n        Serial.println(\"Failed to get NTP time\");\n    }\n}\n\n\/*\nvoid handleButton() {\n    static bool lastState = HIGH;\n    bool state = digitalRead(BUTTON_PIN);\n\n    if (lastState == HIGH &amp;&amp; state == LOW) {\n        lcdOn = true;\n        lcdTimeout = millis() + 30000;\n        displayMode = (displayMode + 1) % 3;\n    }\n    lastState = state;\n}\n*\/\n\nString getRTC() {\n    DateTime now = rtc.now();\n    return now.timestamp(DateTime::TIMESTAMP_FULL);\n}\n\nString getDHT() {\n    float t = dht.readTemperature();\n    float h = dht.readHumidity();\n    return \"Temp: \" + String(t) + \" \u00b0C&lt;br&gt;Hum: \" + String(h) + \" %\";\n}\n\nString getTemp() {\nfloat t = dht.readTemperature();\nreturn \"Temp: \" + String(t);\n}\n\n\nString getHum() {\nfloat h = dht.readHumidity();\nreturn \"Hum:  \" + String(h) + \" %\";\n}\n\n\n\nString getBMP() {\n    return  String(bmp.readPressure() \/ 100.0) + \" hPa\";\n}\n\nvoid handleRoot() {\n\n  String page = R\"rawliteral(\n&lt;!DOCTYPE html&gt;\n&lt;html lang=\"el\"&gt;\n&lt;head&gt;\n&lt;meta charset=\"UTF-8\"&gt;\n&lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"&gt;\n&lt;title&gt;ESP32 Dashboard&lt;\/title&gt;\n\n&lt;style&gt;\nbody {\n  font-family: Arial, sans-serif;\n  background: #f2f2f2;\n  margin: 0;\n  padding: 5px;\n  text-align: center;\n}\nh2 { margin-top: 5px; margin-bottom: 5px; }\nh2 { font-size: 20px; }\nh3 { font-size: 16px; margin: 6px 0; }\nh4 { font-size: 14px; margin: 4px 0; }\n\n\n.card {\n  background: #ffffff;\n  padding: 8px;\n  margin: 6px auto;\n  border-radius: 12px;\n  max-width: 420px;\n  box-shadow: 0 2px 6px rgba(0,0,0,0.2);\n}\n\n.status {\n  font-weight: bold;\n  font-size: 18px;\n}\n\nbutton {\n  width: 90%;\n  padding: 8px;\n  margin: 4px 0;\n  font-size: 14px;\n  border-radius: 8px;\n  border: none;\n  background: #1976d2;\n  color: white;\n}\nbutton:active {\n  background: #0d47a1;\n}\n&lt;\/style&gt;\n&lt;\/head&gt;\n\n&lt;body&gt;\n\n&lt;h2&gt;ESP32 \u03a0\u03af\u03bd\u03b1\u03ba\u03b1\u03c2 \u0395\u03bb\u03ad\u03b3\u03c7\u03bf\u03c5&lt;\/h2&gt;\n\n&lt;div class=\"card\"&gt;\n  &lt;h4&gt;\u0397\u03bc\u03b5\u03c1\u03bf\u03bc\u03b7\u03bd\u03af\u03b1&lt;\/h4&gt;\n  &lt;div id=\"date\"&gt;--&lt;\/div&gt;\n  &lt;h4&gt;\u038f\u03c1\u03b1&lt;\/h4&gt;\n  &lt;div id=\"time\"&gt;--&lt;\/div&gt;\n&lt;\/div&gt;\n\n&lt;div class=\"card\"&gt;\n  &lt;h4&gt;\u0398\u03b5\u03c1\u03bc\u03bf\u03ba\u03c1\u03b1\u03c3\u03af\u03b1&lt;\/h4&gt;\n  &lt;div id=\"dht-temp\"&gt; -- \u00b0C&lt;\/div&gt;\n   &lt;h4&gt;\u03a5\u03b3\u03c1\u03b1\u03c3\u03af\u03b1&lt;\/h4&gt;\n  &lt;div id=\"dht-hum\"&gt; -- %&lt;\/div&gt;\n&lt;\/div&gt;\n\n\n&lt;div class=\"card\"&gt;\n  &lt;h4&gt;\u03a0\u03af\u03b5\u03c3\u03b7&lt;\/h4&gt;\n  &lt;div id=\"bmp\"&gt;--&lt;\/div&gt;\n&lt;\/div&gt;\n\n&lt;div class=\"card\"&gt;\n  &lt;h3&gt;\u039a\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7 LED&lt;\/h3&gt;\n  LED 1: &lt;span id=\"l1\" class=\"status\"&gt;--&lt;\/span&gt;&lt;br&gt;\n  LED 2: &lt;span id=\"l2\" class=\"status\"&gt;--&lt;\/span&gt;&lt;br&gt;\n  LED 3: &lt;span id=\"l3\" class=\"status\"&gt;--&lt;\/span&gt;\n&lt;\/div&gt;\n\n&lt;div class=\"card\"&gt;\n  &lt;h3&gt;\u0388\u03bb\u03b5\u03b3\u03c7\u03bf\u03c2 LED&lt;\/h3&gt;\n  &lt;button onclick=\"toggleLed(1)\"&gt;LED 1 ON \/ OFF&lt;\/button&gt;\n  &lt;button onclick=\"toggleLed(2)\"&gt;LED 2 ON \/ OFF&lt;\/button&gt;\n  &lt;button onclick=\"toggleLed(3)\"&gt;LED 3 ON \/ OFF&lt;\/button&gt;\n&lt;\/div&gt;\n\n&lt;script&gt;\nasync function updateData() {\n  try {\n    const response = await fetch('\/data');\n    const d = await response.json();\n\n    document.getElementById('date').innerText = d.date;\n    document.getElementById('time').innerText = d.time;\n\n    document.getElementById('dht-temp').textContent =\n    d.dht.temp.toFixed(1);\n\n    document.getElementById('dht-hum').textContent =\n    d.dht.hum.toFixed(1);\n\n\n    document.getElementById('bmp').innerText =\n    d.bmp.toFixed(1) + \" hPa\";\n\n    setLed('l1', d.led1);\n    setLed('l2', d.led2);\n    setLed('l3', d.led3);\n\n  } catch (e) {\n    console.log(\"AJAX error:\", e);\n  }\n}\n\nfunction setLed(id, state) {\n  const el = document.getElementById(id);\n  el.innerText = state ? \"ON\" : \"OFF\";\n  el.style.color = state ? \"green\" : \"red\";\n}\n\nfunction toggleLed(n) {\n  fetch('\/led' + n).then(() =&gt; updateData());\n}\n\nupdateData();\nsetInterval(updateData, 30000);\n&lt;\/script&gt;\n\n&lt;\/body&gt;\n&lt;\/html&gt;\n)rawliteral\";\n\n  server.send(200, \"text\/html\", page);\n}\n\n\n\n\n\nvoid toggleLED(int pin) {\n    digitalWrite(pin, !digitalRead(pin));\n    server.sendHeader(\"Location\", \"\/\");\n    server.send(303);\n}\n\nvoid IRAM_ATTR handleButtonInterrupt() {\n    unsigned long now = millis();\n\n    if (now - lastInterruptTime &lt; DEBOUNCE_TIME) return;\n\n    if (digitalRead(BUTTON_PIN) == LOW) {\n        pressStartTime = now;          \/\/ button pressed\n    } else {\n        buttonEvent = true;            \/\/ button released\n    }\n\n    lastInterruptTime = now;\n}\n\nvoid updateLCD() {\n    lcd.clear();\n    lcd.backlight();\n\n    if (displayMode == 0) {\n        DateTime now = rtc.now();\n        lcd.print(now.day()); \n        lcd.print(\"\/\");\n\n        lcd.print(now.month()); \n        lcd.print(\"\/\");\n       \n        lcd.print(now.year()); \n        \n        lcd.setCursor(0,1);\n        lcd.print(getTimeGR());\n\n    } else if (displayMode == 1) {\n        \/\/lcd.print(\"DHT22:\");\n        lcd.print(getTemp());\n        lcd.setCursor(0,1);\n        \/\/lcd.print(getDHT());\n        lcd.print(getHum());\n    } else {\n        lcd.print(\"Pressure:\");\n        lcd.setCursor(0,1);\n        lcd.print(getBMP());\n    }\n}\n\nvoid handleData() {\n    JsonDocument doc;\n    \n    doc&#91;\"date\"] = getDateGR();\n    doc&#91;\"time\"] = getTimeGR();\n\n    doc&#91;\"dht\"]&#91;\"temp\"] = dht.readTemperature();\n    doc&#91;\"dht\"]&#91;\"hum\"]  = dht.readHumidity();\n    doc&#91;\"bmp\"] = bmp.readPressure() \/ 100.0;\n\n    doc&#91;\"led1\"] = digitalRead(LED1);\n    doc&#91;\"led2\"] = digitalRead(LED2);\n    doc&#91;\"led3\"] = digitalRead(LED3);\n\n    String json;\n    serializeJson(doc, json);\n\n    server.send(200, \"application\/json\", json);\n}\n\nString getDateGR() {\n    const char* daysGR&#91;] = {\n        \"\u039a\u03c5\u03c1\u03b9\u03b1\u03ba\u03ae\", \"\u0394\u03b5\u03c5\u03c4\u03ad\u03c1\u03b1\", \"\u03a4\u03c1\u03af\u03c4\u03b7\",\n        \"\u03a4\u03b5\u03c4\u03ac\u03c1\u03c4\u03b7\", \"\u03a0\u03ad\u03bc\u03c0\u03c4\u03b7\", \"\u03a0\u03b1\u03c1\u03b1\u03c3\u03ba\u03b5\u03c5\u03ae\", \"\u03a3\u03ac\u03b2\u03b2\u03b1\u03c4\u03bf\"\n    };\n\n    DateTime now = rtc.now();\n\n    char buf&#91;32];\n    sprintf(buf, \"%s %02d\/%02d\/%04d\",\n        daysGR&#91;now.dayOfTheWeek()],\n        now.day(),\n        now.month(),\n        now.year()\n    );\n\n    return String(buf);\n}\n\nString getTimeGR() {\n    DateTime now = rtc.now();\n\n    char buf&#91;10];\n    sprintf(buf, \"%02d:%02d:%02d\",\n        now.hour(),\n        now.minute(),\n        now.second()\n    );\n\n    return String(buf);\n}\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u03a3\u03c4\u03bf \u03ac\u03c1\u03b8\u03c1\u03bf \u03b1\u03c5\u03c4\u03cc \u03b8\u03b1 \u03b4\u03bf\u03cd\u03bc\u03b5 \u03c0\u03c9\u03c2 \u03bd\u03b1 \u03c6\u03c4\u03b9\u03ac\u03be\u03bf\u03c5\u03bc\u03b5 \u03ad\u03bd\u03b1\u03bd Web Server \u03bc\u03b5 \u03c4\u03bf\u03bd ESP32. \u0391\u03c5\u03c4\u03cc\u03c2 Web Server \u03b8\u03b1 \u03bc\u03b1\u03c2 \u03b4\u03af\u03bd\u03b5\u03b9 \u03c0\u03bb\u03b7\u03c1\u03bf\u03c6\u03bf\u03c1\u03af\u03b5\u03c2 \u03b3\u03b9\u03b1 \u03c4\u03bf \u03c0\u03b5\u03c1\u03b9\u03b2\u03ac\u03bb\u03bb\u03bf\u03bd \u03c4\u03bf\u03c5 \u03cc\u03c0\u03c9\u03c2 \u03b3\u03b9\u03b1 \u03c4\u03b7\u03bd \u03b8\u03b5\u03c1\u03bc\u03bf\u03ba\u03c1\u03b1\u03c3\u03af\u03b1, \u03c4\u03b7\u03bd \u03c5\u03b3\u03c1\u03b1\u03c3\u03af\u03b1 \u03ba\u03b1\u03b9 \u03c4\u03b7\u03bd \u03b1\u03c4\u03bc\u03bf\u03c3\u03c6\u03b1\u03b9\u03c1\u03b9\u03ba\u03ae \u03c0\u03af\u03b5\u03c3\u03b7. \u0395\u03c0\u03af\u03c3\u03b7\u03c2 \u03b8\u03b1 \u03ad\u03c7\u03bf\u03c5\u03bc\u03b5 \u03c4\u03b7 \u03b4\u03c5\u03bd\u03b1\u03c4\u03cc\u03c4\u03b7\u03c4\u03b1&hellip; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10,197],"tags":[],"class_list":["post-757","post","type-post","status-publish","format-standard","hentry","category-10","category-diadiktio"],"_links":{"self":[{"href":"https:\/\/avlos.gr\/wpress\/wp-json\/wp\/v2\/posts\/757","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/avlos.gr\/wpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/avlos.gr\/wpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/avlos.gr\/wpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/avlos.gr\/wpress\/wp-json\/wp\/v2\/comments?post=757"}],"version-history":[{"count":15,"href":"https:\/\/avlos.gr\/wpress\/wp-json\/wp\/v2\/posts\/757\/revisions"}],"predecessor-version":[{"id":838,"href":"https:\/\/avlos.gr\/wpress\/wp-json\/wp\/v2\/posts\/757\/revisions\/838"}],"wp:attachment":[{"href":"https:\/\/avlos.gr\/wpress\/wp-json\/wp\/v2\/media?parent=757"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/avlos.gr\/wpress\/wp-json\/wp\/v2\/categories?post=757"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/avlos.gr\/wpress\/wp-json\/wp\/v2\/tags?post=757"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}