#include #include #include #include #include #include "SSD1306Brzo.h" #include "wifi.h" #include String inTemp,outTemp,pressure,humid; const unsigned short int onTime=6, offTime=23, beepDelay=60, timeOffset=3; short int lastBeep; const String httpAddr="http://192.168.100.100:1880"; WiFiUDP ntpUDP; NTPClient timeClient(ntpUDP); SSD1306Brzo display(0x3C, 5, 4); void setup(){ Serial.begin(115200); //==DISPLAY INIT== display.init(); display.flipScreenVertically(); display.setContrast(255); //==WIFI CONNECT== WiFi.mode(WIFI_STA); // wifiConnect(); MDNS.begin("esp8266-frontend"); //==NTP INIT== timeClient.begin(); timeClient.setTimeOffset(timeOffset*3600); netTasks(); } void loop(){ mainScreen(); if (((timeClient.getHours()*60 + timeClient.getMinutes()) % beepDelay == 0)&&(timeClient.getSeconds() < 1)&&(!nightMode())){ tone(15,1000); delay(100); noTone(15); tone(15,1000); delay(100); noTone(15); lastBeep = timeClient.getHours()*60; netTasks(); } else { delay(500); } } void netTasks() { HTTPClient http; WiFi.forceSleepWake(); if (WiFi.status() != WL_CONNECTED) { wifiConnect(false); } http.begin(httpAddr+"/inTemp"); if (http.GET() < 0) //IDK why the fuck i cant getString without this check return; inTemp="i:"+http.getString()+"C"; http.end(); http.begin(httpAddr+"/outTemp"); if (http.GET() < 0) return; outTemp="o:"+http.getString()+"C"; http.end(); http.begin(httpAddr+"/humid"); if (http.GET() < 0) return; humid="h:"+http.getString()+"%"; http.end(); http.begin(httpAddr+"/pressure"); if (http.GET() < 0) return; pressure="p:"+http.getString()+"mBar"; http.end(); updateNtp(); WiFi.disconnect(); } void mainScreen() { display.clear(); if (!nightMode()) { int x = (timeClient.getHours()*60+timeClient.getMinutes())/11; //Time display.setFont(ArialMT_Plain_24); display.setTextAlignment(TEXT_ALIGN_CENTER); display.drawString(64, 22, timeClient.getFormattedTime()); //progress bar display.drawLine(0,22,x,22); // external temp //top left display.setFont(ArialMT_Plain_10); display.setTextAlignment(TEXT_ALIGN_LEFT); display.drawString(0, 0, outTemp); //pressure //top right display.setFont(ArialMT_Plain_10); display.setTextAlignment(TEXT_ALIGN_RIGHT); display.drawString(128, 0, pressure); //inside temp //bottom left display.setFont(ArialMT_Plain_10); display.setTextAlignment(TEXT_ALIGN_LEFT); display.drawString(0, 53, inTemp); //humid //bottom right display.setFont(ArialMT_Plain_10); display.setTextAlignment(TEXT_ALIGN_RIGHT); display.drawString(128, 53, humid); } display.display(); } void displayStatus(int state){ display.clear(); display.setTextAlignment(TEXT_ALIGN_CENTER); switch (state) { case 0: display.drawString(64, 22, "Connected!"); break; case 1: display.drawString(64, 22, "Connecting..."); break; case 2: display.drawString(64, 22, "Not connected!"); display.setFont(ArialMT_Plain_10); display.setTextAlignment(TEXT_ALIGN_LEFT); display.drawString(0, 53, "we will die in 10s! :0"); break; } display.display(); } void updateNtp() { while (!timeClient.update()) Serial.println(timeClient.getHours()); } bool nightMode() { if ((timeClient.getHours() > offTime)||(timeClient.getHours() < onTime)) { return true; } else return false; } void wifiConnect(bool boot) { int beginMillis = millis(); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED && millis() - beginMillis < 30000) { delay(250); Serial.print("."); } if (WiFi.status() != WL_CONNECTED) { delay(10000); ESP.reset(); } else { Serial.print("Connected to " + String(ssid) + "; IP address: "); Serial.println(WiFi.localIP()); } }