2018-05-07 23:01:41 +03:00
|
|
|
#include <ESP8266WiFi.h>
|
|
|
|
#include <WiFiClient.h>
|
2018-10-15 00:00:51 +03:00
|
|
|
#include <ESP8266mDNS.h>
|
2018-05-07 23:01:41 +03:00
|
|
|
#include <NTPClient.h>
|
|
|
|
#include <WiFiUdp.h>
|
|
|
|
#include "SSD1306Brzo.h"
|
2018-05-09 12:06:48 +03:00
|
|
|
#include "wifi.h"
|
2018-10-15 00:00:51 +03:00
|
|
|
#include <ESP8266HTTPClient.h>
|
2018-05-07 23:01:41 +03:00
|
|
|
|
2018-10-15 00:00:51 +03:00
|
|
|
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.101:1880";
|
2018-05-07 23:01:41 +03:00
|
|
|
|
|
|
|
WiFiUDP ntpUDP;
|
|
|
|
NTPClient timeClient(ntpUDP);
|
2018-10-15 00:00:51 +03:00
|
|
|
SSD1306Brzo display(0x3C, 5, 4); //oled display w/ address 0x3C with SDA on GPIO4 and SCL on GPIO5 //address == offset
|
2018-05-07 23:01:41 +03:00
|
|
|
|
|
|
|
void wifiConnect() {
|
|
|
|
int beginMillis = millis();
|
|
|
|
WiFi.begin(ssid, password);
|
|
|
|
while (WiFi.status() != WL_CONNECTED && millis() - beginMillis < 30000) {
|
|
|
|
delay(250);
|
|
|
|
displayStatus(1);
|
|
|
|
Serial.print(".");
|
|
|
|
}
|
|
|
|
if (WiFi.status() != WL_CONNECTED) {
|
|
|
|
displayStatus(2);
|
|
|
|
delay(10000);
|
|
|
|
ESP.reset();
|
2018-05-09 12:06:48 +03:00
|
|
|
} else {
|
|
|
|
Serial.print("Connected to " + String(ssid) + "; IP address: ");
|
|
|
|
Serial.println(WiFi.localIP());
|
|
|
|
displayStatus(0);
|
|
|
|
}
|
2018-05-07 23:01:41 +03:00
|
|
|
}
|
|
|
|
void setup(){
|
|
|
|
Serial.begin(115200);
|
|
|
|
//==DISPLAY INIT==
|
|
|
|
display.init();
|
|
|
|
display.flipScreenVertically();
|
|
|
|
display.setContrast(255);
|
|
|
|
//==WIFI CONNECT==
|
|
|
|
WiFi.mode(WIFI_STA);
|
2018-10-15 00:00:51 +03:00
|
|
|
// wifiConnect();
|
|
|
|
MDNS.begin("esp8266-frontend");
|
2018-05-07 23:01:41 +03:00
|
|
|
//==NTP INIT==
|
|
|
|
timeClient.begin();
|
2018-10-15 00:00:51 +03:00
|
|
|
timeClient.setTimeOffset(timeOffset*3600);
|
2018-09-17 23:54:23 +03:00
|
|
|
netTasks();
|
2018-05-07 23:01:41 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
void loop(){
|
2018-09-17 23:54:23 +03:00
|
|
|
mainScreen();//it could be cool and smooth if we could update screen independently, in some kind of separate thread or smthn similar
|
2018-10-15 00:00:51 +03:00
|
|
|
if (((timeClient.getHours()*60 + timeClient.getMinutes()) % beepDelay == 0)&&(timeClient.getSeconds() < 1)&&(!nightMode())){
|
2018-09-17 23:54:23 +03:00
|
|
|
tone(15,1000);
|
|
|
|
delay(100);
|
|
|
|
noTone(15);
|
2018-05-07 23:01:41 +03:00
|
|
|
tone(15,1000);
|
|
|
|
delay(100);
|
|
|
|
noTone(15);
|
2018-05-09 12:06:48 +03:00
|
|
|
lastBeep = timeClient.getHours()*60;
|
2018-09-17 23:54:23 +03:00
|
|
|
netTasks();
|
|
|
|
}
|
2018-05-07 23:01:41 +03:00
|
|
|
}
|
|
|
|
//====================IN PROGRESS===================
|
2018-10-15 00:00:51 +03:00
|
|
|
void netTasks() {
|
|
|
|
HTTPClient http;
|
2018-09-17 23:54:23 +03:00
|
|
|
WiFi.forceSleepWake();
|
2018-10-15 00:00:51 +03:00
|
|
|
wifiConnect();
|
|
|
|
if (WiFi.status() != WL_CONNECTED) {
|
|
|
|
wifiConnect();
|
|
|
|
}
|
|
|
|
http.begin(httpAddr+"/inTemp");
|
|
|
|
if (http.GET() < 0) //IDK why the fuck i cant getString without this check
|
|
|
|
return;
|
|
|
|
inTemp="i:"+http.getString();
|
|
|
|
http.end();
|
2018-05-08 12:50:12 +03:00
|
|
|
|
2018-10-15 00:00:51 +03:00
|
|
|
http.begin(httpAddr+"/outTemp");
|
|
|
|
if (http.GET() < 0)
|
|
|
|
return;
|
|
|
|
outTemp="o:"+http.getString();
|
|
|
|
http.end();
|
2018-05-07 23:01:41 +03:00
|
|
|
|
2018-10-15 00:00:51 +03:00
|
|
|
http.begin(httpAddr+"/humid");
|
|
|
|
if (http.GET() < 0)
|
|
|
|
return;
|
|
|
|
humid="h:"+http.getString()+"%";
|
|
|
|
http.end();
|
2018-05-07 23:01:41 +03:00
|
|
|
|
2018-10-15 00:00:51 +03:00
|
|
|
http.begin(httpAddr+"/pressure");
|
|
|
|
if (http.GET() < 0)
|
|
|
|
return;
|
|
|
|
pressure="p:"+http.getString();
|
|
|
|
http.end();
|
2018-09-17 23:54:23 +03:00
|
|
|
|
2018-10-15 00:00:51 +03:00
|
|
|
updateNtp();
|
|
|
|
WiFi.disconnect();
|
2018-09-17 23:54:23 +03:00
|
|
|
}
|
2018-05-08 12:50:12 +03:00
|
|
|
void mainScreen() {
|
|
|
|
display.clear();
|
2018-10-15 00:00:51 +03:00
|
|
|
if (!nightMode()) {
|
2018-05-08 12:50:12 +03:00
|
|
|
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);
|
2018-10-15 00:00:51 +03:00
|
|
|
// 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);
|
2018-05-08 12:50:12 +03:00
|
|
|
}
|
|
|
|
display.display();
|
|
|
|
}
|
|
|
|
void displayStatus(int state){
|
|
|
|
display.clear();
|
2018-10-15 00:00:51 +03:00
|
|
|
display.setTextAlignment(TEXT_ALIGN_CENTER);
|
2018-05-29 16:29:09 +03:00
|
|
|
switch (state) {
|
|
|
|
case 0:
|
2018-05-08 12:50:12 +03:00
|
|
|
display.drawString(64, 22, "Connected!");
|
2018-05-29 16:29:09 +03:00
|
|
|
break;
|
|
|
|
case 1:
|
2018-05-08 12:50:12 +03:00
|
|
|
display.drawString(64, 22, "Connecting...");
|
2018-05-29 16:29:09 +03:00
|
|
|
break;
|
|
|
|
case 2:
|
2018-05-08 12:50:12 +03:00
|
|
|
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");
|
2018-05-29 16:29:09 +03:00
|
|
|
break;
|
2018-05-08 12:50:12 +03:00
|
|
|
}
|
|
|
|
display.display();
|
|
|
|
}
|
2018-05-07 23:01:41 +03:00
|
|
|
void updateNtp() {
|
2018-10-15 00:00:51 +03:00
|
|
|
// if (lastNtp != timeClient.getHours()) {
|
|
|
|
while (!timeClient.update())
|
|
|
|
Serial.println(timeClient.getHours());
|
2018-05-07 23:01:41 +03:00
|
|
|
}
|
|
|
|
bool nightMode() {
|
|
|
|
if ((timeClient.getHours() > offTime)||(timeClient.getHours() < onTime)) { //turn off screen between loaded time
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
return false;
|
|
|
|
}
|