meteoFront/frontend.ino

162 lines
4.0 KiB
Arduino
Raw Normal View History

2018-05-07 23:01:41 +03:00
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#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"
#include <ESP8266HTTPClient.h>
2018-05-07 23:01:41 +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-30 12:45:40 +03:00
SSD1306Brzo display(0x3C, 5, 4);
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);
// wifiConnect();
MDNS.begin("esp8266-frontend");
2018-05-07 23:01:41 +03:00
//==NTP INIT==
timeClient.begin();
timeClient.setTimeOffset(timeOffset*3600);
2018-09-17 23:54:23 +03:00
netTasks();
2018-05-07 23:01:41 +03:00
}
void loop(){
2018-10-30 12:45:40 +03:00
mainScreen();
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-10-15 00:05:21 +03:00
else {
delay(750);
}
2018-05-07 23:01:41 +03:00
}
void netTasks() {
HTTPClient http;
2018-09-17 23:54:23 +03:00
WiFi.forceSleepWake();
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;
2018-10-30 12:45:40 +03:00
inTemp="i:"+http.getString()+"C";
http.end();
http.begin(httpAddr+"/outTemp");
if (http.GET() < 0)
return;
2018-10-30 12:45:40 +03:00
outTemp="o:"+http.getString()+"C";
http.end();
2018-05-07 23:01:41 +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
http.begin(httpAddr+"/pressure");
if (http.GET() < 0)
return;
2018-10-30 12:45:40 +03:00
pressure="p:"+http.getString()+"mBar";
http.end();
2018-09-17 23:54:23 +03:00
updateNtp();
WiFi.disconnect();
2018-09-17 23:54:23 +03:00
}
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);
2018-05-29 16:29:09 +03:00
switch (state) {
case 0:
display.drawString(64, 22, "Connected!");
2018-05-29 16:29:09 +03:00
break;
case 1:
display.drawString(64, 22, "Connecting...");
2018-05-29 16:29:09 +03:00
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");
2018-05-29 16:29:09 +03:00
break;
}
display.display();
}
2018-05-07 23:01:41 +03:00
void updateNtp() {
2018-10-30 12:45:40 +03:00
while (!timeClient.update())
Serial.println(timeClient.getHours());
2018-05-07 23:01:41 +03:00
}
bool nightMode() {
2018-10-30 12:45:40 +03:00
if ((timeClient.getHours() > offTime)||(timeClient.getHours() < onTime)) {
2018-05-07 23:01:41 +03:00
return true;
}
else
return false;
}
2018-10-30 12:45:40 +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();
} else {
Serial.print("Connected to " + String(ssid) + "; IP address: ");
Serial.println(WiFi.localIP());
displayStatus(0);
}
}