#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://meteo-front:1880"; int alarms[10]={660,1260}; int alarmDuration(6); int alarmStop(0); WiFiUDP ntpUDP; NTPClient timeClient(ntpUDP); SSD1306Brzo display(0x3C, 5, 4); void demo(); void setup(){ //==DISPLAY INIT== display.init(); display.flipScreenVertically(); display.setContrast(255); // display.invertDisplay(); display.clear(); display.fillRect(0,0,128,64); display.display(); delay(3000); if (!digitalRead(0)) //button demo(120000); Serial.begin(115200); //==WIFI CONNECT== WiFi.mode(WIFI_STA); //==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(); // demo(12000); } else { delay(500); } checkAlarm(); } void checkAlarm() { for (int i(0);i<10;i++) { if ((timeClient.getHours()*60+timeClient.getMinutes() >= alarms[i])&&(timeClient.getHours()*60+timeClient.getMinutes() - alarms[i] < alarmDuration)&&(alarms[i] != 0)) { if (alarmStop != alarms[i]) { tone(15,1000); delay(100); noTone(15); delay(100); tone(15,1000); delay(100); noTone(15); delay(1000); } if (!digitalRead(0)) //button alarmStop = alarms[i]; if (timeClient.getHours()*60+timeClient.getMinutes() - alarms[i] > alarmDuration)//stop current alarm alarmStop = -1; } } } void netTasks() { HTTPClient http; WiFi.forceSleepWake(); if (WiFi.status() != WL_CONNECTED) { wifiConnect(false); } http.begin(httpAddr+"/inTemp"); if (http.GET() < 0) 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(){ bool run(true); display.setFont(ArialMT_Plain_10); display.setTextAlignment(TEXT_ALIGN_LEFT); int x(0),y(0); bool xd(false);//false - right, true - left while (run) { display.clear(); if (WiFi.status() != WL_CONNECTED) { display.fillRect(x,y,30,50); if (x > 128-30) xd = true; if (x < 0) xd = false; if (xd) { x--; } else { x++; } display.drawString(1, 52, ssid); } if (WiFi.status() == WL_CONNECTED) { run = false; } 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); displayStatus(); } void demo(int duration) { short xp(0),yp(0),xd(1),yd(1); unsigned int startTime = millis(); bool run(true); while (run) { if ((xp > 128) || (xp < 0)) { xd = xd * -1; } if ((yp > 64) || (yp < 0)) { yd = yd * -1; } xp+=xd; yp+=yd; delay(10); display.clear(); display.fillCircle(xp,yp,10); display.display(); if (millis() - startTime > duration) run = false; } }