diff --git a/Software/ChainLube/data/css/style.css b/Software/ChainLube/data/css/style.css
new file mode 100644
index 0000000..e69de29
diff --git a/Software/ChainLube/data/index.htm b/Software/ChainLube/data/index.htm
new file mode 100644
index 0000000..193dbc4
--- /dev/null
+++ b/Software/ChainLube/data/index.htm
@@ -0,0 +1,12 @@
+
+
+
+
+ KTM CAN Chain Oiler
+
+
+
+
+
+
+
diff --git a/Software/ChainLube/platformio.ini b/Software/ChainLube/platformio.ini
index 76a4cc6..4285b0e 100644
--- a/Software/ChainLube/platformio.ini
+++ b/Software/ChainLube/platformio.ini
@@ -27,6 +27,7 @@ upload_speed = 921600
build_flags =
!python git_rev_macro.py
-DWIFI_CLIENT
+ -DREMOTE_DEBUG
-DWIFI_SSID=${wifi_cred.wifi_ssid}
-DWIFI_PASSWORD=${wifi_cred.wifi_password}
-DADMIN_PASSWORD=${wifi_cred.admin_password}
@@ -39,14 +40,13 @@ board_build.filesystem = littlefs
monitor_filters = esp8266_exception_decoder
monitor_speed = 115200
-board_build.ldscript = eagle.flash.4m.ld
+board_build.ldscript = eagle.flash.4m1m.ld
lib_ldf_mode = deep
lib_deps =
olikraus/U8g2 @ ^2.28.8
joaolopesf/RemoteDebug @ ^2.1.2
fastled/FastLED @ ^3.5.0
sstaub/Ticker @ ^4.2.0
- s00500/ESPUI @ ^2.0.0
coryjfowler/mcp_can @ ^1.5.0
robtillaart/I2C_EEPROM @ ^1.5.2
plerup/EspSoftwareSerial @ ^6.15.2
diff --git a/Software/ChainLube/src/webui.cpp b/Software/ChainLube/src/webui.cpp
index 1e5ba22..563071b 100644
--- a/Software/ChainLube/src/webui.cpp
+++ b/Software/ChainLube/src/webui.cpp
@@ -1,190 +1,57 @@
#include "webui.h"
-uint16_t tab_lube;
-uint16_t tab_wheel;
-uint16_t tab_tank;
-uint16_t tab_maintenance;
-uint16_t tab_store;
+AsyncWebServer webServer(80);
-uint16_t num_lubedist_normal;
-uint16_t num_lubedist_rain;
-uint16_t button_lubedist;
+const char *PARAM_MESSAGE = "message";
-uint16_t option_speedsource;
-uint16_t button_changeSource;
-
-uint16_t num_wheel_width;
-uint16_t num_wheel_ratio;
-uint16_t num_wheel_rim;
-uint16_t button_wheelcalc;
-uint16_t num_wheel_ppr;
-uint16_t num_wheel_dist;
-
-uint16_t option_gps_baudrate;
-
-uint16_t option_can_source;
-
-uint16_t num_tank_capacity;
-uint16_t num_tank_notify;
-uint16_t num_dose_per_pulse;
-
-uint16_t label_tankRemain;
-uint16_t button_reset_tank;
-uint16_t num_purge_pulses;
-uint16_t button_purge;
-
-uint16_t button_store;
-uint16_t button_reload;
-uint16_t label_storeStatus;
-
-void SettingChanged_Callback(Control *sender, int type)
-{
- if (sender->id == num_lubedist_normal)
- LubeConfig.DistancePerLube_Default = ESPUI.getControl(num_lubedist_normal)->value.toInt();
- else if (sender->id == num_lubedist_rain)
- LubeConfig.DistancePerLube_Rain = ESPUI.getControl(num_lubedist_rain)->value.toInt();
- else if (sender->id == num_wheel_width)
- LubeConfig.TireWidth_mm = ESPUI.getControl(num_wheel_width)->value.toInt();
- else if (sender->id == num_wheel_ratio)
- LubeConfig.TireWidthHeight_Ratio = ESPUI.getControl(num_wheel_ratio)->value.toInt();
- else if (sender->id == num_wheel_rim)
- LubeConfig.RimDiameter_Inch = ESPUI.getControl(num_wheel_rim)->value.toInt();
- else if (sender->id == num_wheel_ppr)
- LubeConfig.PulsePerRevolution = ESPUI.getControl(num_wheel_ppr)->value.toInt();
- else if (sender->id == num_wheel_dist)
- LubeConfig.DistancePerRevolution_mm = ESPUI.getControl(num_wheel_dist)->value.toInt();
- else if (sender->id == num_tank_capacity)
- LubeConfig.tankCapacity_ml = ESPUI.getControl(num_tank_capacity)->value.toInt();
- else if (sender->id == num_tank_notify)
- LubeConfig.TankRemindAtPercentage = ESPUI.getControl(num_tank_notify)->value.toInt();
- else if (sender->id == num_dose_per_pulse)
- LubeConfig.amountPerDose_µl = ESPUI.getControl(num_dose_per_pulse)->value.toInt();
- else if (sender->id == num_purge_pulses)
- LubeConfig.BleedingPulses = ESPUI.getControl(num_purge_pulses)->value.toInt();
- else if (sender->id == option_gps_baudrate)
- LubeConfig.GPSBaudRate = (GPSBaudRate_t)ESPUI.getControl(option_gps_baudrate)->value.toInt();
-}
-
-void buttons_Callback(Control *sender, int type)
-{
- if (type != B_UP)
- return;
-
- if (sender->id == button_wheelcalc)
- {
- LubeConfig.TireWidth_mm = ESPUI.getControl(num_wheel_width)->value.toInt();
- LubeConfig.RimDiameter_Inch = ESPUI.getControl(num_wheel_rim)->value.toInt();
- LubeConfig.TireWidthHeight_Ratio = ESPUI.getControl(num_wheel_ratio)->value.toInt();
- LubeConfig.DistancePerRevolution_mm = (uint32_t)((((((float)LubeConfig.TireWidthHeight_Ratio / 100.0) * (float)LubeConfig.TireWidth_mm) * 2.0) + ((float)LubeConfig.RimDiameter_Inch * 25.4)) * 3.1416);
- ESPUI.updateControlValue(num_wheel_dist, String(LubeConfig.DistancePerRevolution_mm));
- }
-
- if (sender->id == button_reset_tank)
- {
- PersistenceData.tankRemain_µl = LubeConfig.tankCapacity_ml * 1000;
- ESPUI.print(label_tankRemain, String(PersistenceData.tankRemain_µl / 1000));
- }
-
- if (sender->id == button_purge)
- {
- Serial.printf("Starting to Purge with %d pulses", LubeConfig.BleedingPulses);
- globals.purgePulses = LubeConfig.BleedingPulses;
- globals.resumeStatus = globals.systemStatus;
- globals.systemStatus = sysStat_Purge;
- }
-
- if (sender->id == button_store)
- {
- globals.requestEEAction = EE_CFG_SAVE;
- ESPUI.print(label_storeStatus, "Successfully Stored Settings");
- }
-
- if (sender->id == button_reload)
- {
- globals.requestEEAction = EE_CFG_LOAD;
- ESPUI.print(label_storeStatus, "Successfully Reloaded Settings");
- }
-}
-
-void speedSourceSelect_callback(Control *sender, int type)
-{
- if (sender->id == option_speedsource)
- {
- LubeConfig.SpeedSource = (SpeedSource_t)ESPUI.getControl(option_speedsource)->value.toInt();
- Serial.printf("LubeConfig.SpeedSource: %d", LubeConfig.SpeedSource);
- }
-
- if (sender->id == button_changeSource)
- {
- globals.systemStatus = sysStat_Shutdown;
- }
-}
+String processor(const String &var);
+void WebserverPost_Callback(AsyncWebServerRequest *request);
+void WebserverNotFound_Callback(AsyncWebServerRequest *request);
void initWebUI()
{
- tab_lube = ESPUI.addControl(ControlType::Tab, "Dosierung", "Dosierung");
- tab_wheel = ESPUI.addControl(ControlType::Tab, "Erfassung", "Erfassung");
- tab_tank = ESPUI.addControl(ControlType::Tab, "Tank", "Tank");
- tab_maintenance = ESPUI.addControl(ControlType::Tab, "Wartung", "Wartung");
- tab_store = ESPUI.addControl(ControlType::Tab, "Speichern", "Speichern");
-
- num_lubedist_normal = ESPUI.addControl(ControlType::Number, "Öl-Impuls alle x Meter (Normal)", String(LubeConfig.DistancePerLube_Default), ControlColor::Emerald, tab_lube, &SettingChanged_Callback);
- num_lubedist_rain = ESPUI.addControl(ControlType::Number, "Öl-Impuls alle x Meter (Regen)", String(LubeConfig.DistancePerLube_Rain), ControlColor::Emerald, tab_lube, &SettingChanged_Callback);
-
- option_speedsource = ESPUI.addControl(ControlType::Select, "Geschwindigkeit Quelle", "", ControlColor::Wetasphalt, tab_wheel, &speedSourceSelect_callback);
- button_changeSource = ESPUI.addControl(ControlType::Button, "neue Quelle übernehmen. ACHTUNG: Gerät startet neu!", "Übernehmen", ControlColor::Wetasphalt, tab_wheel, &speedSourceSelect_callback);
- for (int i = 0; i < (int)SpeedSourceString_Elements; i++)
+ if (!LittleFS.begin())
{
- ESPUI.addControl(ControlType::Option, SpeedSourceString[i], String(i), ControlColor::Wetasphalt, option_speedsource);
+ Serial.println("An Error has occurred while mounting LittleFS");
+ return;
}
- switch (LubeConfig.SpeedSource)
- {
- case SOURCE_IMPULSE:
- num_wheel_width = ESPUI.addControl(ControlType::Number, "Reifenbreite (mm)", String(LubeConfig.TireWidth_mm), ControlColor::Peterriver, tab_wheel, &SettingChanged_Callback);
- num_wheel_ratio = ESPUI.addControl(ControlType::Number, "Höhe/Breite-Verhältniss", String(LubeConfig.TireWidthHeight_Ratio), ControlColor::Peterriver, tab_wheel, &SettingChanged_Callback);
- num_wheel_rim = ESPUI.addControl(ControlType::Number, "Felgendurchmesser (Zoll)", String(LubeConfig.RimDiameter_Inch), ControlColor::Peterriver, tab_wheel, &SettingChanged_Callback);
- button_wheelcalc = ESPUI.addControl(ControlType::Button, "Abrollumfang aus Reifendaten berechnen", "Berechnen", ControlColor::Peterriver, tab_wheel, &buttons_Callback);
- num_wheel_dist = ESPUI.addControl(ControlType::Number, "Wegstrecke pro Radumdrehung (mm)", String(LubeConfig.DistancePerRevolution_mm), ControlColor::Peterriver, tab_wheel, &SettingChanged_Callback);
- num_wheel_ppr = ESPUI.addControl(ControlType::Number, "Sensorimpulse pro Umdrehung", String(LubeConfig.PulsePerRevolution), ControlColor::Peterriver, tab_wheel, &SettingChanged_Callback);
- break;
- case SOURCE_GPS:
- option_gps_baudrate = ESPUI.addControl(ControlType::Select, "Baudrate GPS-Modul", "", ControlColor::Peterriver, tab_wheel, &SettingChanged_Callback);
- for (uint32_t i = 0; i < (uint32_t)GPSBaudRateString_Elements; i++)
- {
- ESPUI.addControl(ControlType::Option, GPSBaudRateString[i], String(i), ControlColor::Peterriver, option_gps_baudrate);
- }
- break;
-#if PCB_REVISION >= 13
- case SOURCE_CAN:
- option_can_source = ESPUI.addControl(ControlType::Select, "CAN-Bus Quelle", "", ControlColor::Peterriver, tab_wheel, &SettingChanged_Callback);
- for (int i = 0; i < CANSourceString_Elements; i++)
- {
- ESPUI.addControl(ControlType::Option, CANSourceString[i], String(i), ControlColor::Peterriver, option_can_source);
- }
- break;
-#endif
- case SOURCE_TIME:
- break;
- }
+ // Route to load style.css file
+ webServer.serveStatic("/", LittleFS, "/").setDefaultFile("index.htm");
+ webServer.onNotFound(WebserverNotFound_Callback);
- num_tank_capacity = ESPUI.addControl(ControlType::Number, "Tankinhalt maximal (ml)", String(LubeConfig.tankCapacity_ml), ControlColor::Carrot, tab_tank, &SettingChanged_Callback);
- num_tank_notify = ESPUI.addControl(ControlType::Number, "Tankinhalt Warnung (%)", String(LubeConfig.TankRemindAtPercentage), ControlColor::Carrot, tab_tank, &SettingChanged_Callback);
- num_dose_per_pulse = ESPUI.addControl(ControlType::Number, "Menge pro Pumpenimpuls (µl)", String(LubeConfig.amountPerDose_µl), ControlColor::Carrot, tab_tank, &SettingChanged_Callback);
- label_tankRemain = ESPUI.addControl(ControlType::Label, "Tankinhalt verbleibend (ml, geschätzt)", String(PersistenceData.tankRemain_µl / 1000), ControlColor::Carrot, tab_tank);
- button_reset_tank = ESPUI.addControl(ControlType::Button, "Tankinhalt zurücksetzen", "Reset", ControlColor::Carrot, tab_tank, &buttons_Callback);
+ webServer.on("/index.htm", HTTP_GET, [](AsyncWebServerRequest *request)
+ { request->send(LittleFS, "/index.htm", String(), false, processor); });
- num_purge_pulses = ESPUI.addControl(ControlType::Number, "Entlüftung Impulse", String(LubeConfig.BleedingPulses), ControlColor::Alizarin, tab_maintenance, &SettingChanged_Callback);
- button_purge = ESPUI.addControl(ControlType::Button, "Leitung Entlüften", "Start", ControlColor::Alizarin, tab_maintenance, &buttons_Callback);
+ webServer.on("/", HTTP_POST, WebserverPost_Callback);
- button_store = ESPUI.addControl(ControlType::Button, "Einstellungen permanent speichern", "Speichern", ControlColor::Turquoise, tab_store, &buttons_Callback);
- button_reload = ESPUI.addControl(ControlType::Button, "Einstellungen neu laden", "Laden", ControlColor::Turquoise, tab_store, &buttons_Callback);
- label_storeStatus = ESPUI.addControl(ControlType::Label, "Status", "", ControlColor::Turquoise, tab_store);
-
- ESPUI.begin("KTM CAN-ChainLube");
+ webServer.begin();
}
void UpdateWebUI()
{
- ESPUI.print(label_tankRemain, String(PersistenceData.tankRemain_µl / 1000) + " ml");
+}
+
+String processor(const String &var)
+{
+
+ if (var == "PLACEHOLDER")
+ return "placeholder";
+
+ return String();
+}
+
+void WebserverPost_Callback(AsyncWebServerRequest *request)
+{
+ String message;
+ if (request->hasParam(PARAM_MESSAGE, true))
+ {
+ message = request->getParam(PARAM_MESSAGE, true)->value();
+ Serial.printf("POST: %s", message);
+ }
+}
+
+void WebserverNotFound_Callback(AsyncWebServerRequest *request)
+{
+ request->send(404, "text/plain", "Not found");
}
\ No newline at end of file
diff --git a/Software/ChainLube/src/webui.h b/Software/ChainLube/src/webui.h
index d7a950f..f7530b2 100644
--- a/Software/ChainLube/src/webui.h
+++ b/Software/ChainLube/src/webui.h
@@ -2,7 +2,10 @@
#define _WEBUI_H_
#include
-#include
+#include
+#include
+#include
+#include
#include "config.h"
#include "globals.h"