From 7f62fc479dc2e9567b93359dfbeb1087090cba4c Mon Sep 17 00:00:00 2001 From: nightflyer88 Date: Sun, 20 Jan 2019 00:27:15 +0100 Subject: [PATCH] html optimized: data is loaded with javascript, Wifi mode added --- CG_scale.ino | 817 +++++++++++++--------------------- data/bootstrap.min.css.map.gz | Bin 0 -> 98655 bytes data/index.html | 124 ++++++ data/settings.html | 295 ++++++++++++ settings_ESP8266.h | 16 +- 5 files changed, 750 insertions(+), 502 deletions(-) create mode 100644 data/bootstrap.min.css.map.gz create mode 100755 data/index.html create mode 100755 data/settings.html diff --git a/CG_scale.ino b/CG_scale.ino index 1f61ac4..956365a 100644 --- a/CG_scale.ino +++ b/CG_scale.ino @@ -4,7 +4,7 @@ (c) 2019 by M. Lehmann ------------------------------------------------------------------ */ -#define CGSCALE_VERSION "1.0.55" +#define CGSCALE_VERSION "1.0.58" /* ****************************************************************** @@ -58,12 +58,13 @@ #include #include #include -#include "settings_ESP8266.h" #endif -// settings for AVR +// load settings #if defined(__AVR__) #include "settings_AVR.h" +#elif defined(ESP8266) +#include "settings_ESP8266.h" #endif // HX711 constructor (dout pin, sck pint): @@ -78,8 +79,7 @@ IPAddress apIP(ip[0], ip[1], ip[2], ip[3]); #endif // serial menu -enum -{ +enum { MENU_HOME, MENU_LOADCELLS, MENU_DISTANCE_X1, @@ -99,9 +99,7 @@ enum }; // EEprom parameter addresses -#define EEPROM_SIZE 120 -enum -{ +enum { P_NUMBER_LOADCELLS = 1, P_DISTANCE_X1 = 2, P_DISTANCE_X2 = P_DISTANCE_X1 + sizeof(float), @@ -113,7 +111,16 @@ enum P_REF_WEIGHT = P_ENABLE_BATVOLT + sizeof(float), P_REF_CG = P_REF_WEIGHT + sizeof(float), P_RESISTOR_R1 = P_REF_CG + sizeof(float), - P_RESISTOR_R2 = P_RESISTOR_R1 + sizeof(float) + P_RESISTOR_R2 = P_RESISTOR_R1 + sizeof(float), +#if defined(__AVR__) + EEPROM_SIZE = P_RESISTOR_R2 + sizeof(float) +#elif defined(ESP8266) + P_SSID_STA = P_RESISTOR_R2 + sizeof(float), + P_PASSWORD_STA = P_SSID_STA + MAX_SSID_PW_LENGHT + 1, + P_SSID_AP = P_PASSWORD_STA + MAX_SSID_PW_LENGHT + 1, + P_PASSWORD_AP = P_SSID_AP + MAX_SSID_PW_LENGHT + 1, + EEPROM_SIZE = P_PASSWORD_AP + MAX_SSID_PW_LENGHT + 1 +#endif }; // battery image 12x6 @@ -164,6 +171,12 @@ float resistorR2 = RESISTOR_R2; bool enableBatVolt = ENABLE_VOLTAGE; float refWeight = REF_WEIGHT; float refCG = REF_CG; +#if defined(ESP8266) +char ssid_STA[MAX_SSID_PW_LENGHT + 1] = SSID_STA; +char password_STA[MAX_SSID_PW_LENGHT + 1] = PASSWORD_STA; +char ssid_AP[MAX_SSID_PW_LENGHT + 1] = SSID_AP; +char password_AP[MAX_SSID_PW_LENGHT + 1] = PASSWORD_AP; +#endif // declare variables float weightLoadCell1 = 0; @@ -188,106 +201,42 @@ int errMsgCnt = 0; void(* resetCPU) (void) = 0; -// save values to eeprom -void saveLoadcells() { - EEPROM.put(P_NUMBER_LOADCELLS, nLoadcells); -#if defined(ESP8266) - EEPROM.commit(); -#endif -} - - -void saveDistanceX1() { - EEPROM.put(P_DISTANCE_X1, distanceX1); -#if defined(ESP8266) - EEPROM.commit(); -#endif -} - - -void saveDistanceX2() { - EEPROM.put(P_DISTANCE_X2, distanceX2); -#if defined(ESP8266) - EEPROM.commit(); -#endif -} - - -void saveDistanceX3() { - EEPROM.put(P_DISTANCE_X3, distanceX3); -#if defined(ESP8266) - EEPROM.commit(); -#endif -} - - -void saveRefWeight() { - EEPROM.put(P_REF_WEIGHT, refWeight); -#if defined(ESP8266) - EEPROM.commit(); -#endif -} - - -void saveRefCG() { - EEPROM.put(P_REF_CG, refCG); +// reset to factory defaults +void resetDefault() { + // reset eeprom + for (int i = 0; i < EEPROM_SIZE; i++) { + EEPROM.write(i, 0xFF); + } + Serial.end(); #if defined(ESP8266) EEPROM.commit(); #endif + resetCPU(); } +// save calibration factor void saveCalFactor1() { LoadCell_1.setCalFactor(calFactorLoadcell1); EEPROM.put(P_LOADCELL1_CALIBRATION_FACTOR, calFactorLoadcell1); -#if defined(ESP8266) - EEPROM.commit(); -#endif } void saveCalFactor2() { LoadCell_2.setCalFactor(calFactorLoadcell2); EEPROM.put(P_LOADCELL2_CALIBRATION_FACTOR, calFactorLoadcell2); -#if defined(ESP8266) - EEPROM.commit(); -#endif } void saveCalFactor3() { LoadCell_3.setCalFactor(calFactorLoadcell3); EEPROM.put(P_LOADCELL3_CALIBRATION_FACTOR, calFactorLoadcell3); -#if defined(ESP8266) - EEPROM.commit(); -#endif } -void saveResistorR1() { - EEPROM.put(P_RESISTOR_R1, resistorR1); -#if defined(ESP8266) - EEPROM.commit(); -#endif -} - - -void saveResistorR2() { - EEPROM.put(P_RESISTOR_R2, resistorR2); -#if defined(ESP8266) - EEPROM.commit(); -#endif -} - -void saveEnableBatVolt() { - EEPROM.put(P_ENABLE_BATVOLT, enableBatVolt); -#if defined(ESP8266) - EEPROM.commit(); -#endif -} - -void auto_calibrate() { - Serial.print(F("Autocalibration is running")); +// run auto calibration +bool runAutoCalibrate() { + Serial.print(F("\nAutocalibration is running")); for (int i = 0; i <= 20; i++) { Serial.print(F(".")); delay(100); @@ -316,49 +265,14 @@ void auto_calibrate() { void setup() { + // init serial + Serial.begin(9600); + #if defined(ESP8266) - // init webserver - WiFi.mode(WIFI_AP); - WiFi.softAPConfig(apIP, apIP, IPAddress(255, 255, 255, 0)); - WiFi.softAP(ssid, password); - - server.begin(); - server.on("/", main_page); - server.on("/index.html", main_page); - server.on("/settings", settings_page); - server.on("/settings.png", settingsImg); - server.on("/weight.png", weightImg); - server.on("/cg.png", cgImg); - server.on("/cglr.png", cgLRimg); - server.on("/battery.png", batteryImg); - server.on("/CG_scale_mechanics.png", mechanicsImg); - server.on("/bootstrap.min.css", bootstrap); - server.on("bootstrap.min.css", bootstrap); - server.on("/popper.min.js", popper); - server.on("/bootstrap.min.js", bootstrapmin); - server.on("bootstrap.min.js", bootstrapmin); - SPIFFS.begin(); EEPROM.begin(EEPROM_SIZE); #endif - // init OLED display - oledDisplay.begin(); - oledDisplay.firstPage(); - do { - oledDisplay.drawXBMP(20, 12, 18, 18, CGImage); - oledDisplay.setFont(u8g2_font_helvR12_tr); - oledDisplay.setCursor(45, 28); - oledDisplay.print(F("CG scale")); - - oledDisplay.setFont(u8g2_font_5x7_tr); - oledDisplay.setCursor(35, 55); - oledDisplay.print(F("Version: ")); - oledDisplay.print(CGSCALE_VERSION); - oledDisplay.setCursor(20, 64); - oledDisplay.print(F("(c) 2019 M. Lehmann")); - } while ( oledDisplay.nextPage() ); - // read settings from eeprom if (EEPROM.read(P_NUMBER_LOADCELLS) != 0xFF) { nLoadcells = EEPROM.read(P_NUMBER_LOADCELLS); @@ -408,6 +322,47 @@ void setup() { EEPROM.get(P_RESISTOR_R2, resistorR2); } +#if defined(ESP8266) + if (EEPROM.read(P_SSID_STA) != 0xFF) { + EEPROM.get(P_SSID_STA, ssid_STA); + } + + if (EEPROM.read(P_PASSWORD_STA) != 0xFF) { + EEPROM.get(P_PASSWORD_STA, password_STA); + } + + if (EEPROM.read(P_SSID_AP) != 0xFF) { + EEPROM.get(P_SSID_AP, ssid_AP); + } + + if (EEPROM.read(P_PASSWORD_AP) != 0xFF) { + EEPROM.get(P_PASSWORD_AP, password_AP); + } + + // Start by connecting to a WiFi network + WiFi.mode(WIFI_STA); + WiFi.begin(ssid_STA, password_STA); + + long timeoutWiFi = millis(); +#endif + + // init OLED display + oledDisplay.begin(); + oledDisplay.firstPage(); + do { + oledDisplay.drawXBMP(20, 12, 18, 18, CGImage); + oledDisplay.setFont(u8g2_font_helvR12_tr); + oledDisplay.setCursor(45, 28); + oledDisplay.print(F("CG scale")); + + oledDisplay.setFont(u8g2_font_5x7_tr); + oledDisplay.setCursor(35, 55); + oledDisplay.print(F("Version: ")); + oledDisplay.print(CGSCALE_VERSION); + oledDisplay.setCursor(20, 64); + oledDisplay.print(F("(c) 2019 M. Lehmann")); + } while ( oledDisplay.nextPage() ); + // init Loadcells LoadCell_1.begin(); LoadCell_2.begin(); @@ -464,9 +419,61 @@ void setup() { delay(200); } - // init serial - Serial.begin(9600); +#if defined(ESP8266) + while (WiFi.status() != WL_CONNECTED) { + delay(500); + if (WiFi.status() == WL_NO_SSID_AVAIL) { + break; + } else if (WiFi.status() == WL_CONNECT_FAILED) { + break; + } else if ((millis() - timeoutWiFi) > TIMEOUT_CONNECT) { + break; + } + } + if (WiFi.status() == WL_CONNECTED) { + // if connected, print status + oledDisplay.firstPage(); + do { + oledDisplay.setFont(u8g2_font_5x7_tr); + oledDisplay.setCursor(0, 7); + oledDisplay.print(F("Connected to WiFi:")); + oledDisplay.setCursor(0, 43); + oledDisplay.print(F("IP address:")); + + oledDisplay.setFont(u8g2_font_helvR12_tr); + oledDisplay.setCursor(0, 28); + oledDisplay.print(ssid_STA); + oledDisplay.setCursor(0, 64); + oledDisplay.print(WiFi.localIP()); + } while ( oledDisplay.nextPage() ); + delay(5000); + } else { + // if WiFi not connected, switch to access point mode + WiFi.mode(WIFI_AP); + WiFi.softAPConfig(apIP, apIP, IPAddress(255, 255, 255, 0)); + WiFi.softAP(ssid_AP, password_AP); + } + + // init webserver + server.begin(); + + // When the client requests data + server.on("/getHead", getHead); + server.on("/getValue", getValue); + server.on("/getRawValue", getRawValue); + server.on("/getParameter", getParameter); + server.on("/getWiFiNetworks", getWiFiNetworks); + server.on("/saveParameter", saveParameter); + server.on("/resetDefault", resetDefault); + server.on("/autoCalibrate", autoCalibrate); + + // If the client requests any URI + server.onNotFound([]() { + if (!handleFileRead(server.uri())) + server.send(404, "text/plain", "404: Not Found"); + }); +#endif } @@ -478,7 +485,6 @@ void loop() { LoadCell_3.update(); } - // update loadcell values if ((millis() - lastTimeLoadcell) > UPDATE_INTERVAL_LOADCELL) { lastTimeLoadcell = millis(); @@ -501,7 +507,6 @@ void loop() { lastWeightLoadCell3 = weightLoadCell3; } - // update display and serial menu if ((millis() - lastTimeMenu) > UPDATE_INTERVAL_OLED_MENU) { lastTimeMenu = millis(); @@ -543,7 +548,6 @@ void loop() { } } - oledDisplay.firstPage(); do { if (errMsgCnt == 0) { @@ -602,43 +606,43 @@ void loop() { break; case MENU_LOADCELLS: nLoadcells = Serial.parseInt(); - saveLoadcells(); + EEPROM.put(P_NUMBER_LOADCELLS, nLoadcells); menuPage = 0; updateMenu = true; break; case MENU_DISTANCE_X1: distanceX1 = Serial.parseFloat(); - saveDistanceX1(); + EEPROM.put(P_DISTANCE_X1, distanceX1); menuPage = 0; updateMenu = true; break; case MENU_DISTANCE_X2: distanceX2 = Serial.parseFloat(); - saveDistanceX2(); + EEPROM.put(P_DISTANCE_X2, distanceX2); menuPage = 0; updateMenu = true; break; case MENU_DISTANCE_X3: distanceX3 = Serial.parseFloat(); - saveDistanceX3(); + EEPROM.put(P_DISTANCE_X3, distanceX3); menuPage = 0; updateMenu = true; break; case MENU_REF_WEIGHT: refWeight = Serial.parseFloat(); - saveRefWeight(); + EEPROM.put(P_REF_WEIGHT, refWeight); menuPage = 0; updateMenu = true; break; case MENU_REF_CG: refCG = Serial.parseFloat(); - saveRefCG(); + EEPROM.put(P_REF_CG, refCG); menuPage = 0; updateMenu = true; break; case MENU_AUTO_CALIBRATE: if (Serial.read() == 'J') { - auto_calibrate(); + runAutoCalibrate(); menuPage = 0; updateMenu = true; } @@ -663,13 +667,13 @@ void loop() { break; case MENU_RESISTOR_R1: resistorR1 = Serial.parseFloat(); - saveResistorR1(); + EEPROM.put(P_RESISTOR_R1, resistorR1); menuPage = 0; updateMenu = true; break; case MENU_RESISTOR_R2: resistorR2 = Serial.parseFloat(); - saveResistorR2(); + EEPROM.put(P_RESISTOR_R2, resistorR2); menuPage = 0; updateMenu = true; break; @@ -679,7 +683,7 @@ void loop() { } else { enableBatVolt = false; } - saveEnableBatVolt(); + EEPROM.put(P_ENABLE_BATVOLT, enableBatVolt); menuPage = 0; updateMenu = true; break; @@ -689,17 +693,8 @@ void loop() { updateMenu = true; break; case MENU_RESET_DEFAULT: - //chr = Serial.read(); if (Serial.read() == 'J') { - // reset eeprom - for (int i = 0; i < EEPROM_SIZE; i++) { - EEPROM.write(i, 0xFF); - } - Serial.end(); -#if defined(ESP8266) - EEPROM.commit(); -#endif - resetCPU(); + resetDefault(); } menuPage = 0; updateMenu = true; @@ -875,366 +870,196 @@ void loop() { #if defined(ESP8266) -void main_page() -{ - char buff[8]; - String webPage = ""; - webPage += ""; - webPage += ""; - webPage += ""; - webPage += ""; - webPage += ""; - webPage += ""; - webPage += ""; - webPage += "CG scale by M. Lehmann"; - webPage += ""; - webPage += ""; - webPage += ""; - webPage += ""; - webPage += ""; - webPage += ""; - webPage += "


"; - webPage += "
"; - webPage += "
"; - if (errMsgCnt == 0) { - // print weight - webPage += "
"; - webPage += "
"; - webPage += "
\"weight\"
"; - webPage += "
"; - dtostrf(weightTotal, 5, 1, buff); - webPage += buff; - webPage += "g
"; - webPage += "
"; - webPage += "
"; - // print cg - webPage += "
"; - webPage += "
"; - webPage += "
\"weight\"
"; - webPage += "
"; - dtostrf(CG_length, 5, 1, buff); - webPage += buff; - webPage += "mm
"; - webPage += "
"; - webPage += "
"; - - // print cg trans - if (nLoadcells > 2) { - webPage += "
"; - webPage += "
"; - webPage += "
\"weight\"
"; - webPage += "
"; - dtostrf(CG_trans, 5, 1, buff); - webPage += buff; - webPage += "mm
"; - webPage += "
"; - webPage += "
"; - - } - - // print battery - if (enableBatVolt) { - webPage += "
"; - webPage += "
"; - webPage += "
\"weight\"
"; - webPage += "
"; - webPage += batVolt; - webPage += "V
"; - webPage += "
"; - webPage += "
"; - } - } else { - webPage += "
"; - webPage += " "; - for (int i = 1; i <= errMsgCnt; i++) { - webPage += errMsg[i]; - } - webPage += "
"; +// send headvalues to client +void getHead() { + String response = ssid_AP; + response += "&"; + for (int i = 1; i <= errMsgCnt; i++) { + response += errMsg[i]; } - webPage += "
"; - webPage += "
"; - webPage += "

(c) 2019 M. Lehmann - Version: "; - webPage += CGSCALE_VERSION; - webPage += "

"; - webPage += ""; - webPage += ""; - webPage += ""; - - server.send(200, "text/html", webPage); - + response += "&"; + response += CGSCALE_VERSION; + server.send(200, "text/html", response); } -void settings_page() -{ - if ( server.hasArg("nLoadcells")) { - nLoadcells = server.arg("nLoadcells").toFloat(); - saveLoadcells(); + +// send values to client +void getValue() { + char buff[8]; + String response = ""; + dtostrf(weightTotal, 5, 1, buff); + response += buff; + response += "g&"; + dtostrf(CG_length, 5, 1, buff); + response += buff; + response += "mm&"; + dtostrf(CG_trans, 5, 1, buff); + response += buff; + response += "mm&"; + dtostrf(batVolt, 5, 2, buff); + response += buff; + response += "V"; + server.send(200, "text/html", response); +} + + +// send raw values to client +void getRawValue() { + char buff[8]; + String response = ""; + dtostrf(weightLoadCell1, 5, 1, buff); + response += buff; + response += "g&"; + dtostrf(weightLoadCell2, 5, 1, buff); + response += buff; + response += "g&"; + dtostrf(weightLoadCell3, 5, 1, buff); + response += buff; + response += "g"; + server.send(200, "text/html", response); +} + + +// send parameters to client +void getParameter() { + String response = ""; + response += nLoadcells; + response += "&"; + response += distanceX1; + response += "&"; + response += distanceX2; + response += "&"; + response += distanceX3; + response += "&"; + response += refWeight; + response += "&"; + response += refCG; + response += "&"; + response += calFactorLoadcell1; + response += "&"; + response += calFactorLoadcell2; + response += "&"; + response += calFactorLoadcell3; + response += "&"; + response += resistorR1; + response += "&"; + response += resistorR2; + response += "&"; + if (enableBatVolt) { + response += "ON"; + } else { + response += "OFF"; } - if ( server.hasArg("distanceX1")) { - distanceX1 = server.arg("distanceX1").toFloat(); - saveDistanceX1(); + response += "&"; + response += ssid_STA; + response += "&"; + response += password_STA; + response += "&"; + response += ssid_AP; + response += "&"; + response += password_AP; + server.send(200, "text/html", response); +} + + +// send available WiFi networks to client +void getWiFiNetworks() { + String response = ""; + int n = WiFi.scanNetworks(); + if (n > 0) { + for (int i = 0; i < n; ++i) { + response += WiFi.SSID(i); + if (i < n - 1) response += "&"; + } } - if ( server.hasArg("distanceX2")) { - distanceX2 = server.arg("distanceX2").toFloat(); - saveDistanceX2(); - } - if ( server.hasArg("distanceX3")) { - distanceX3 = server.arg("distanceX3").toFloat(); - saveDistanceX3(); - } - if ( server.hasArg("refWeight")) { - refWeight = server.arg("refWeight").toFloat(); - saveRefWeight(); - } - if ( server.hasArg("refCG")) { - refCG = server.arg("refCG").toFloat(); - saveRefCG(); - } - if ( server.hasArg("calFactorLoadcell1")) { - calFactorLoadcell1 = server.arg("calFactorLoadcell1").toFloat(); - saveCalFactor1(); - } - if ( server.hasArg("calFactorLoadcell2")) { - calFactorLoadcell2 = server.arg("calFactorLoadcell2").toFloat(); - saveCalFactor2(); - } - if ( server.hasArg("calFactorLoadcell3")) { - calFactorLoadcell3 = server.arg("calFactorLoadcell3").toFloat(); - saveCalFactor3(); - } - if ( server.hasArg("resistorR1")) { - resistorR1 = server.arg("resistorR1").toFloat(); - saveResistorR1(); - } - if ( server.hasArg("resistorR2")) { - resistorR2 = server.arg("resistorR2").toFloat(); - saveResistorR2(); - } - if ( server.hasArg("enableBatVolt")) { + server.send(200, "text/html", response); +} + + +// save parameters +void saveParameter() { + if (server.hasArg("nLoadcells")) nLoadcells = server.arg("nLoadcells").toFloat(); + if (server.hasArg("distanceX1")) distanceX1 = server.arg("distanceX1").toFloat(); + if (server.hasArg("distanceX2")) distanceX2 = server.arg("distanceX2").toFloat(); + if (server.hasArg("distanceX3")) distanceX3 = server.arg("distanceX3").toFloat(); + if (server.hasArg("refWeight")) refWeight = server.arg("refWeight").toFloat(); + if (server.hasArg("refCG")) refCG = server.arg("refCG").toFloat(); + if (server.hasArg("calFactorLoadcell1")) calFactorLoadcell1 = server.arg("calFactorLoadcell1").toFloat(); + if (server.hasArg("calFactorLoadcell2")) calFactorLoadcell2 = server.arg("calFactorLoadcell2").toFloat(); + if (server.hasArg("calFactorLoadcell3")) calFactorLoadcell3 = server.arg("calFactorLoadcell3").toFloat(); + if (server.hasArg("resistorR1")) resistorR1 = server.arg("resistorR1").toFloat(); + if (server.hasArg("resistorR2")) resistorR2 = server.arg("resistorR2").toFloat(); + if (server.hasArg("enableBatVolt")) { if (server.arg("enableBatVolt") == "ON") { enableBatVolt = true; } else { enableBatVolt = false; } } - if ( server.hasArg("calibrate")) { - auto_calibrate(); + if (server.hasArg("ssid_STA")) server.arg("ssid_STA").toCharArray(ssid_STA, MAX_SSID_PW_LENGHT + 1); + if (server.hasArg("password_STA")) server.arg("password_STA").toCharArray(password_STA, MAX_SSID_PW_LENGHT + 1); + if (server.hasArg("ssid_AP")) server.arg("ssid_AP").toCharArray(ssid_AP, MAX_SSID_PW_LENGHT + 1); + if (server.hasArg("password_AP")) server.arg("password_AP").toCharArray(password_AP, MAX_SSID_PW_LENGHT + 1); + + EEPROM.put(P_NUMBER_LOADCELLS, nLoadcells); + EEPROM.put(P_DISTANCE_X1, distanceX1); + EEPROM.put(P_DISTANCE_X2, distanceX2); + EEPROM.put(P_DISTANCE_X3, distanceX3); + EEPROM.put(P_REF_WEIGHT, refWeight); + EEPROM.put(P_REF_CG, refCG); + saveCalFactor1(); + saveCalFactor2(); + saveCalFactor3(); + EEPROM.put(P_RESISTOR_R1, resistorR1); + EEPROM.put(P_RESISTOR_R2, resistorR2); + EEPROM.put(P_ENABLE_BATVOLT, enableBatVolt); + EEPROM.put(P_SSID_STA, ssid_STA); + EEPROM.put(P_PASSWORD_STA, password_STA); + EEPROM.put(P_SSID_AP, ssid_AP); + EEPROM.put(P_PASSWORD_AP, password_AP); + EEPROM.commit(); + + server.send(200, "text/html", "ok"); +} + + +// calibrate cg scale +void autoCalibrate() { + while (!runAutoCalibrate()); + server.send(200, "text/html", "ok"); +} + + +// convert the file extension to the MIME type +String getContentType(String filename) { + if (filename.endsWith(".html")) return "text/html"; + else if (filename.endsWith(".png")) return "text/css"; + else if (filename.endsWith(".css")) return "text/css"; + else if (filename.endsWith(".js")) return "application/javascript"; + else if (filename.endsWith(".map")) return "application/json"; + else if (filename.endsWith(".ico")) return "image/x-icon"; + else if (filename.endsWith(".gz")) return "application/x-gzip"; + return "text/plain"; +} + + +// send file to the client (if it exists) +bool handleFileRead(String path) { + // If a folder is requested, send the index file + if (path.endsWith("/")) path += "index.html"; + String contentType = getContentType(path); + String pathWithGz = path + ".gz"; + + // If the file exists, either as a compressed archive, or normal + if (SPIFFS.exists(pathWithGz) || SPIFFS.exists(path)) { + if (SPIFFS.exists(pathWithGz)) + path += ".gz"; + File file = SPIFFS.open(path, "r"); + size_t sent = server.streamFile(file, contentType); + file.close(); + return true; } - - - String webPage = ""; - webPage += ""; - webPage += ""; - webPage += ""; - webPage += ""; - webPage += ""; - webPage += ""; - webPage += ""; - webPage += "CG scale by M. Lehmann"; - webPage += ""; - webPage += ""; - webPage += ""; - webPage += ""; - webPage += ""; - webPage += "


"; - webPage += "
"; - - webPage += "
"; - webPage += "
"; - webPage += ""; - webPage += ""; - webPage += "
"; - - webPage += "
"; - webPage += ""; - webPage += ""; - webPage += "
"; - - webPage += "
"; - webPage += ""; - webPage += ""; - webPage += "
"; - - webPage += "
"; - webPage += ""; - webPage += ""; - webPage += "
"; - - webPage += "
"; - webPage += ""; - webPage += ""; - webPage += "
"; - - webPage += "
"; - webPage += ""; - webPage += ""; - webPage += "
"; - - webPage += "
"; - webPage += ""; - webPage += ""; - webPage += "
"; - - webPage += "
"; - webPage += ""; - webPage += ""; - webPage += "
"; - - webPage += "
"; - webPage += ""; - webPage += ""; - webPage += "
"; - - webPage += "
"; - webPage += ""; - webPage += ""; - webPage += "
"; - - webPage += "
"; - webPage += ""; - webPage += ""; - webPage += "
"; - - webPage += "
"; - webPage += ""; - webPage += ""; - webPage += "
"; - - webPage += "
"; - - webPage += "
"; - webPage += ""; - webPage += "
"; - webPage += "
"; - - webPage += "\"mechanics\""; - - webPage += "
"; - webPage += "

(c) 2019 M. Lehmann - Version: "; - webPage += CGSCALE_VERSION; - webPage += "

"; - webPage += ""; - webPage += ""; - webPage += ""; - - server.send(200, "text/html", webPage); -} - -void settingsImg() -{ - File file = SPIFFS.open("/settings.png", "r"); - size_t sent = server.streamFile(file, "text/css"); -} - -void weightImg() -{ - File file = SPIFFS.open("/weight.png", "r"); - size_t sent = server.streamFile(file, "text/css"); -} - -void cgImg() -{ - File file = SPIFFS.open("/cg.png", "r"); - size_t sent = server.streamFile(file, "text/css"); -} - -void cgLRimg() -{ - File file = SPIFFS.open("/cglr.png", "r"); - size_t sent = server.streamFile(file, "text/css"); -} - -void batteryImg() -{ - File file = SPIFFS.open("/battery.png", "r"); - size_t sent = server.streamFile(file, "text/css"); -} - -void mechanicsImg() -{ - File file = SPIFFS.open("/CG_scale_mechanics.png", "r"); - size_t sent = server.streamFile(file, "text/css"); -} - -void bootstrap() -{ - File file = SPIFFS.open("/bootstrap.min.css.gz", "r"); - size_t sent = server.streamFile(file, "text/css"); -} - -void popper() -{ - File file = SPIFFS.open("/popper.min.js.gz", "r"); - size_t sent = server.streamFile(file, "application/javascript"); -} - -void bootstrapmin() -{ - File file = SPIFFS.open("/bootstrap.min.js.gz", "r"); - size_t sent = server.streamFile(file, "application/javascript"); + return false; } #endif diff --git a/data/bootstrap.min.css.map.gz b/data/bootstrap.min.css.map.gz new file mode 100644 index 0000000000000000000000000000000000000000..c894b70b6a56f3863a2ea120eeb585fe139d8458 GIT binary patch literal 98655 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 literal 0 HcmV?d00001 diff --git a/data/index.html b/data/index.html new file mode 100755 index 0000000..d6d4430 --- /dev/null +++ b/data/index.html @@ -0,0 +1,124 @@ + + + + + + + + CG scale by M. Lehmann + + + + + + + +


+
+
+
+
+
Weight
+
-
+
+
+
+
+
CG
+
-
+
+
+
+
+
CG left/right
+
-
+
+
+
+
+
Battery
+
-
+
+
+
+
+
+

(c) 2019 M. Lehmann - Version: 0.0

+ + \ No newline at end of file diff --git a/data/settings.html b/data/settings.html new file mode 100755 index 0000000..1e969ab --- /dev/null +++ b/data/settings.html @@ -0,0 +1,295 @@ + + + + + + + + CG scale by M. Lehmann + + + + + + + +


+
+

WiFi settings

+
+ + + Connect to existing network +
+
+ + +
+
+
+ + + If no network is present, a private network is created +
+
+ + + At least 8 characters +
+

+

CG scale settings

+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+

+ + + + mechanics + +
+

Lc1: -

+
+
+

Lc2: -

+
+
+

Lc3: -

+
+
+

+ +
+ +

(c) 2019 M. Lehmann - Version: 0.0

+ + \ No newline at end of file diff --git a/settings_ESP8266.h b/settings_ESP8266.h index 287e3a4..e36ee12 100644 --- a/settings_ESP8266.h +++ b/settings_ESP8266.h @@ -124,12 +124,16 @@ U8G2_SH1106_128X64_NONAME_1_HW_I2C oledDisplay(U8G2_R0, /* reset=*/ U8X8_PIN_NON -// **** Web server settings **** +// **** Wifi settings **** -// Wifi works as an access point -const char* ssid = "CG scale"; // wifi name -const char* password = ""; // wifi password +#define MAX_SSID_PW_LENGHT 32 +// Station mode: connect to available network +#define SSID_STA "myWiFi" +#define PASSWORD_STA "" +#define TIMEOUT_CONNECT 12000 //ms + +// Access point mode: create own network +#define SSID_AP "CG scale" +#define PASSWORD_AP "" const char ip[4] = {1,1,1,1}; // default IP address - -#define REFRESH_TIME 3 // [s], reload the main page