just WIP
This commit is contained in:
parent
38bc729b95
commit
56d7018812
2
.vscode/arduino.json
vendored
2
.vscode/arduino.json
vendored
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"board": "esp8266:esp8266:generic",
|
"board": "esp8266:esp8266:generic",
|
||||||
"configuration": "CpuFrequency=80,FlashFreq=40,FlashMode=dio,UploadSpeed=115200,FlashSize=1M512,ResetMethod=ck,Debug=Disabled,DebugLevel=None____",
|
"configuration": "CpuFrequency=80,FlashFreq=40,FlashMode=dio,UploadSpeed=115200,FlashSize=2M,ResetMethod=ck,Debug=Disabled,DebugLevel=None____",
|
||||||
"port": "/dev/ttyUSB0",
|
"port": "/dev/ttyUSB0",
|
||||||
"sketch": "frontend.ino",
|
"sketch": "frontend.ino",
|
||||||
"output": "Output"
|
"output": "Output"
|
||||||
|
5
.vscode/settings.json
vendored
5
.vscode/settings.json
vendored
@ -1,3 +1,6 @@
|
|||||||
{
|
{
|
||||||
"C_Cpp.intelliSenseEngineFallback": "Enabled"
|
"C_Cpp.intelliSenseEngineFallback": "Enabled",
|
||||||
|
"files.associations": {
|
||||||
|
"*.inc": "cpp"
|
||||||
|
}
|
||||||
}
|
}
|
238
frontend.ino
238
frontend.ino
@ -1,23 +1,61 @@
|
|||||||
|
//TODO
|
||||||
|
//AT LEAST MAKE IT WORK (show ui and get data + ntp) - compiling - ... - WORKS!!11
|
||||||
|
|
||||||
|
//debug -> release
|
||||||
|
//remove useless serial debug - DONE
|
||||||
|
//show wifi info on oled - DONE
|
||||||
|
//reset on not connected - DONE
|
||||||
|
//check connectivity during work and do actions - DONE
|
||||||
|
//beep hourly - DONE
|
||||||
|
//github - oh yeahhh
|
||||||
|
|
||||||
|
//load config
|
||||||
|
//webconfig (?) - in progress
|
||||||
|
//mqtt update interval
|
||||||
|
|
||||||
|
//second screen
|
||||||
|
|
||||||
|
//reconfig wifi if not found (start webserver and AP)
|
||||||
|
|
||||||
|
//GRAPH
|
||||||
|
/*
|
||||||
|
get json from server
|
||||||
|
~12 values
|
||||||
|
hourly values + hourly display
|
||||||
|
if pressure lowers then weather gonna be bad
|
||||||
|
if pressure uppers then weather gonna be good
|
||||||
|
*/
|
||||||
|
|
||||||
|
//CONFIG
|
||||||
|
/*
|
||||||
|
beep time
|
||||||
|
on time
|
||||||
|
off time
|
||||||
|
mqtt update interval
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
#include <ESP8266WiFi.h>
|
#include <ESP8266WiFi.h>
|
||||||
|
// #include <ESP8266WiFiGeneric.h>
|
||||||
#include <WiFiClient.h>
|
#include <WiFiClient.h>
|
||||||
// #include <ESP8266WebServer.h>
|
// #include <ESP8266WebServer.h>
|
||||||
#include <ESP8266mDNS.h>
|
// #include <ESP8266mDNS.h>
|
||||||
#include <NTPClient.h>
|
#include <NTPClient.h>
|
||||||
#include <WiFiUdp.h>
|
#include <WiFiUdp.h>
|
||||||
#include "SSD1306Brzo.h"
|
#include "SSD1306Brzo.h"
|
||||||
#include <ArduinoJson.h>
|
// #include <ArduinoJson.h>
|
||||||
// #include <FS.h>
|
// #include <FS.h>
|
||||||
#include "wifi.h"
|
#include "wifi.h"
|
||||||
#include "Adafruit_MQTT.h"
|
#include "Adafruit_MQTT.h"
|
||||||
#include "Adafruit_MQTT_Client.h"
|
#include "Adafruit_MQTT_Client.h"
|
||||||
|
|
||||||
double inTemp,outTemp,pressure,humid;
|
double inTemp,outTemp,pressure,humid;
|
||||||
unsigned short int onTime = 5, offTime = 23, beepDelay = 60, lastBeep, lastWifi;
|
unsigned short int lastNtp, lastBeep, onTime=6, offTime=23, beepDelay=60;
|
||||||
bool mqttAvail;
|
bool mqttAvail;
|
||||||
|
|
||||||
WiFiUDP ntpUDP;
|
WiFiUDP ntpUDP;
|
||||||
NTPClient timeClient(ntpUDP);
|
NTPClient timeClient(ntpUDP);
|
||||||
SSD1306Brzo display(0x3C, 5, 4); //oled display w/ address 0x3C with SDA on GPIO4 and SCL on GPIO5 //address == offset
|
SSD1306Brzo display(0x3C, 4, 5); //oled display w/ address 0x3C with SDA on GPIO4 and SCL on GPIO5 //address == offset
|
||||||
|
|
||||||
WiFiClient client;
|
WiFiClient client;
|
||||||
// ESP8266WebServer server(80);
|
// ESP8266WebServer server(80);
|
||||||
@ -41,7 +79,7 @@ void wifiConnect() {
|
|||||||
delay(10000);
|
delay(10000);
|
||||||
ESP.reset();
|
ESP.reset();
|
||||||
} else {
|
} else {
|
||||||
MDNS.begin("esp8266-frontend");
|
// MDNS.begin("esp8266-frontend");
|
||||||
Serial.print("Connected to " + String(ssid) + "; IP address: ");
|
Serial.print("Connected to " + String(ssid) + "; IP address: ");
|
||||||
Serial.println(WiFi.localIP());
|
Serial.println(WiFi.localIP());
|
||||||
displayStatus(0);
|
displayStatus(0);
|
||||||
@ -56,13 +94,6 @@ void setup(){
|
|||||||
//==WIFI CONNECT==
|
//==WIFI CONNECT==
|
||||||
WiFi.mode(WIFI_STA);
|
WiFi.mode(WIFI_STA);
|
||||||
wifiConnect();
|
wifiConnect();
|
||||||
//==READ CONFIG==
|
|
||||||
// if (!SPIFFS.begin())
|
|
||||||
// SPIFFS.format();
|
|
||||||
|
|
||||||
// if (!readConfig())
|
|
||||||
// defConfig();
|
|
||||||
|
|
||||||
//==NTP INIT==
|
//==NTP INIT==
|
||||||
timeClient.begin();
|
timeClient.begin();
|
||||||
timeClient.setTimeOffset(10800);
|
timeClient.setTimeOffset(10800);
|
||||||
@ -75,139 +106,41 @@ void setup(){
|
|||||||
mqtt.subscribe(&outFeed);
|
mqtt.subscribe(&outFeed);
|
||||||
mqtt.subscribe(&inFeed);
|
mqtt.subscribe(&inFeed);
|
||||||
mqtt.subscribe(&humidFeed);
|
mqtt.subscribe(&humidFeed);
|
||||||
// server.on("/edit", editConfig);
|
netTasks();
|
||||||
// server.begin();
|
|
||||||
updateNtp();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void loop(){
|
void loop(){
|
||||||
if (WiFi.status() != WL_CONNECTED) { //check wifi status
|
|
||||||
wifiConnect();
|
|
||||||
}
|
|
||||||
// server.handleClient();
|
|
||||||
if (timeClient.getHours()*60+timeClient.getMinutes() - lastWifi >= 60){ // due to powersaving
|
|
||||||
lastWifi = timeClient.getHours()*60+timeClient.getMinutes();
|
|
||||||
MQTT_connect();//check connection and get packets for 0.5s
|
|
||||||
mqtt.processPackets(750);
|
|
||||||
updateNtp();//update time
|
|
||||||
}
|
|
||||||
else delay(900);
|
|
||||||
mainScreen();//it could be cool and smooth if we could update screen independently, in some kind of separate thread or smthn similar
|
|
||||||
|
|
||||||
if ((timeClient.getHours()*60 + timeClient.getMinutes() - lastBeep >= beepDelay)&&(!nightMode())){ //beep every $lastBeep
|
WiFi.disconnect();
|
||||||
|
mainScreen();//it could be cool and smooth if we could update screen independently, in some kind of separate thread or smthn similar
|
||||||
|
WiFi.forceSleepBegin();
|
||||||
|
//network required tasks
|
||||||
|
if (((timeClient.getHours()*60 + timeClient.getMinutes() + timeClient.getSeconds()) % beepDelay == 0)&&(!nightMode())){ //beep and start tasks
|
||||||
|
tone(15,1000);
|
||||||
|
delay(100);
|
||||||
|
noTone(15);
|
||||||
tone(15,1000);
|
tone(15,1000);
|
||||||
delay(100);
|
delay(100);
|
||||||
noTone(15);
|
noTone(15);
|
||||||
lastBeep = timeClient.getHours()*60;
|
lastBeep = timeClient.getHours()*60;
|
||||||
|
// secondDisplay();
|
||||||
|
netTasks();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//second screen
|
|
||||||
//GRAPH
|
|
||||||
/*
|
|
||||||
get json from server
|
|
||||||
~12 values
|
|
||||||
hourly values + hourly display
|
|
||||||
if pressure lowers then weather gonna be bad
|
|
||||||
if pressure uppers then weather gonna be good
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//====================IN PROGRESS===================
|
//====================IN PROGRESS===================
|
||||||
// void editConfig(){
|
void netTasks() { //show other display before
|
||||||
// if (server.args() > 0 ) {
|
WiFi.forceSleepWake();
|
||||||
// for ( uint8_t i = 0; i < server.args(); i++ ){
|
if (WiFi.status() != WL_CONNECTED) { //check wifi status
|
||||||
// String Argument_Name = server.argName(i);
|
wifiConnect();
|
||||||
// String client_response = server.arg(i);
|
}
|
||||||
|
// server.handleClient();
|
||||||
// if (Argument_Name == "beepDelay"){
|
MQTT_connect();//check connection and get packets for 0.5s
|
||||||
// beepDelay = client_response.toInt();
|
mqtt.processPackets(8000);
|
||||||
// }
|
updateNtp();//update time
|
||||||
// if (Argument_Name == "onTime"){
|
}
|
||||||
// onTime = client_response.toInt();
|
|
||||||
// }
|
|
||||||
// if (Argument_Name == "offTime"){
|
|
||||||
// offTime = client_response.toInt();
|
|
||||||
// }
|
|
||||||
// updateConfig();
|
|
||||||
// server.send(200, "text/plain", "updatedConfig");
|
|
||||||
// }
|
|
||||||
// } else {
|
|
||||||
// server.send(200, "text/plain", "to update config, goto " + String(WiFi.localIP()) + "/edit?parameter=value");
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// bool updateConfig() {
|
|
||||||
// StaticJsonBuffer<200> jsonBuffer;
|
|
||||||
// JsonObject& json = jsonBuffer.createObject();
|
|
||||||
// json["onTime"] = onTime;
|
|
||||||
// json["offTime"] = offTime;
|
|
||||||
// json["beepDelay"] = beepDelay;
|
|
||||||
// File configFile = SPIFFS.open("/config.json", "w");
|
|
||||||
// if (!configFile) {
|
|
||||||
// Serial.println("Failed to open config file for writing");
|
|
||||||
// return false;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// json.printTo(configFile);
|
|
||||||
// return true;
|
|
||||||
|
|
||||||
// }
|
|
||||||
|
|
||||||
// bool readConfig() {
|
|
||||||
// File configFile = SPIFFS.open("/config.json", "r");
|
|
||||||
// if (!configFile) {
|
|
||||||
// Serial.println("Failed to open config file");
|
|
||||||
|
|
||||||
// return false;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// size_t size = configFile.size();
|
|
||||||
// if (size > 1024) {
|
|
||||||
// Serial.println("Config file size is too large");
|
|
||||||
// return false;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// // Allocate a buffer to store contents of the file.
|
|
||||||
// std::unique_ptr<char[]> buf(new char[size]);
|
|
||||||
|
|
||||||
// // We don't use String here because ArduinoJson library requires the input buffer to be mutable. If you don't use ArduinoJson, you may as well use configFile.readString instead.
|
|
||||||
// configFile.readBytes(buf.get(), size);
|
|
||||||
|
|
||||||
// StaticJsonBuffer<200> jsonBuffer;
|
|
||||||
// JsonObject& json = jsonBuffer.parseObject(buf.get());
|
|
||||||
|
|
||||||
// if (!json.success()) {
|
|
||||||
// Serial.println("Failed to parse config file");
|
|
||||||
// return false;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// offTime = int(json["offTime"]);
|
|
||||||
// onTime = int(json["onTime"]);
|
|
||||||
// beepDelay = int(json["beepDelay"]);
|
|
||||||
// return true;
|
|
||||||
|
|
||||||
// }
|
|
||||||
// bool defConfig() {
|
|
||||||
// StaticJsonBuffer<200> jsonBuffer;
|
|
||||||
// JsonObject& json = jsonBuffer.createObject();
|
|
||||||
// json["onTime"] = "6";
|
|
||||||
// json["offTime"] = "23";
|
|
||||||
// json["beepDelay"] = "60";
|
|
||||||
// File configFile = SPIFFS.open("/config.json", "w");
|
|
||||||
// if (!configFile) {
|
|
||||||
// Serial.println("Failed to open config file for writing");
|
|
||||||
// return false;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// json.printTo(configFile);
|
|
||||||
// return true;
|
|
||||||
// }
|
|
||||||
|
|
||||||
//====================paused===================
|
|
||||||
|
|
||||||
|
|
||||||
// void secondDisplay() {
|
// void secondDisplay() {
|
||||||
// display.clear();
|
// display.clear();
|
||||||
@ -228,7 +161,34 @@ if pressure uppers then weather gonna be good
|
|||||||
|
|
||||||
// }
|
// }
|
||||||
|
|
||||||
|
void coolBeep() {
|
||||||
|
tone(15,1000);
|
||||||
|
delay(200);
|
||||||
|
noTone(15);
|
||||||
|
tone(15,1200);
|
||||||
|
delay(200);
|
||||||
|
noTone(15);
|
||||||
|
tone(15,1000);
|
||||||
|
delay(200);
|
||||||
|
noTone(15);
|
||||||
|
tone(15,1200);
|
||||||
|
delay(250);
|
||||||
|
noTone(15);
|
||||||
|
tone(15,1400);
|
||||||
|
delay(350);
|
||||||
|
noTone(15);
|
||||||
|
tone(15,1500);
|
||||||
|
delay(350);
|
||||||
|
noTone(15);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//====================paused===================
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//===================WELL DONE=======================
|
//===================WELL DONE=======================
|
||||||
|
|
||||||
void mainScreen() {
|
void mainScreen() {
|
||||||
display.clear();
|
display.clear();
|
||||||
|
|
||||||
@ -266,12 +226,8 @@ void mainScreen() {
|
|||||||
}
|
}
|
||||||
display.display();
|
display.display();
|
||||||
}
|
}
|
||||||
|
|
||||||
void displayStatus(int state){
|
void displayStatus(int state){
|
||||||
display.clear();
|
display.clear();
|
||||||
display.setFont(ArialMT_Plain_16);
|
|
||||||
display.setTextAlignment(TEXT_ALIGN_CENTER);
|
|
||||||
|
|
||||||
switch (state) {
|
switch (state) {
|
||||||
case 0:
|
case 0:
|
||||||
display.drawString(64, 22, "Connected!");
|
display.drawString(64, 22, "Connected!");
|
||||||
@ -320,13 +276,11 @@ void humidCall(double x){
|
|||||||
humid = x;
|
humid = x;
|
||||||
}
|
}
|
||||||
void updateNtp() {
|
void updateNtp() {
|
||||||
// if (lastNtp != timeClient.getHours()) {
|
if (lastNtp != timeClient.getHours()) {
|
||||||
// if (timeClient.update())
|
if (timeClient.update())
|
||||||
while (!timeClient.update()) {
|
|
||||||
delay(100);
|
lastNtp = timeClient.getHours();
|
||||||
}
|
}
|
||||||
// lastNtp = timeClient.getHours();
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
bool nightMode() {
|
bool nightMode() {
|
||||||
if ((timeClient.getHours() > offTime)||(timeClient.getHours() < onTime)) { //turn off screen between loaded time
|
if ((timeClient.getHours() > offTime)||(timeClient.getHours() < onTime)) { //turn off screen between loaded time
|
||||||
|
Loading…
Reference in New Issue
Block a user