Starting to replace ESPUI-Lib due to OOM-Issues
This commit is contained in:
		
							
								
								
									
										0
									
								
								Software/ChainLube/data/css/style.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								Software/ChainLube/data/css/style.css
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										12
									
								
								Software/ChainLube/data/index.htm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								Software/ChainLube/data/index.htm
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,12 @@ | |||||||
|  | <!DOCTYPE html> | ||||||
|  | <html> | ||||||
|  |   <head> | ||||||
|  |     <meta charset="utf-8" /> | ||||||
|  |     <title>KTM CAN Chain Oiler</title> | ||||||
|  |     <link rel="stylesheet" href="/css/style.css" /> | ||||||
|  |  | ||||||
|  |   </head> | ||||||
|  |  | ||||||
|  |   <body> | ||||||
|  |   </body> | ||||||
|  | </html> | ||||||
| @@ -27,6 +27,7 @@ upload_speed = 921600 | |||||||
| build_flags = | build_flags = | ||||||
|   !python git_rev_macro.py |   !python git_rev_macro.py | ||||||
|   -DWIFI_CLIENT |   -DWIFI_CLIENT | ||||||
|  |   -DREMOTE_DEBUG | ||||||
|   -DWIFI_SSID=${wifi_cred.wifi_ssid} |   -DWIFI_SSID=${wifi_cred.wifi_ssid} | ||||||
|   -DWIFI_PASSWORD=${wifi_cred.wifi_password} |   -DWIFI_PASSWORD=${wifi_cred.wifi_password} | ||||||
|   -DADMIN_PASSWORD=${wifi_cred.admin_password} |   -DADMIN_PASSWORD=${wifi_cred.admin_password} | ||||||
| @@ -39,14 +40,13 @@ board_build.filesystem = littlefs | |||||||
| monitor_filters = esp8266_exception_decoder | monitor_filters = esp8266_exception_decoder | ||||||
| monitor_speed = 115200 | monitor_speed = 115200 | ||||||
|  |  | ||||||
| board_build.ldscript = eagle.flash.4m.ld | board_build.ldscript = eagle.flash.4m1m.ld | ||||||
| lib_ldf_mode = deep | lib_ldf_mode = deep | ||||||
| lib_deps =  | lib_deps =  | ||||||
|     olikraus/U8g2 @ ^2.28.8 |     olikraus/U8g2 @ ^2.28.8 | ||||||
|     joaolopesf/RemoteDebug @ ^2.1.2 |     joaolopesf/RemoteDebug @ ^2.1.2 | ||||||
|     fastled/FastLED @ ^3.5.0 |     fastled/FastLED @ ^3.5.0 | ||||||
|     sstaub/Ticker @ ^4.2.0 |     sstaub/Ticker @ ^4.2.0 | ||||||
|     s00500/ESPUI @ ^2.0.0 |  | ||||||
|     coryjfowler/mcp_can @ ^1.5.0 |     coryjfowler/mcp_can @ ^1.5.0 | ||||||
|     robtillaart/I2C_EEPROM @ ^1.5.2 |     robtillaart/I2C_EEPROM @ ^1.5.2 | ||||||
|     plerup/EspSoftwareSerial @ ^6.15.2 |     plerup/EspSoftwareSerial @ ^6.15.2 | ||||||
|   | |||||||
| @@ -1,190 +1,57 @@ | |||||||
| #include "webui.h" | #include "webui.h" | ||||||
|  |  | ||||||
| uint16_t tab_lube; | AsyncWebServer webServer(80); | ||||||
| uint16_t tab_wheel; |  | ||||||
| uint16_t tab_tank; |  | ||||||
| uint16_t tab_maintenance; |  | ||||||
| uint16_t tab_store; |  | ||||||
|  |  | ||||||
| uint16_t num_lubedist_normal; | const char *PARAM_MESSAGE = "message"; | ||||||
| uint16_t num_lubedist_rain; |  | ||||||
| uint16_t button_lubedist; |  | ||||||
|  |  | ||||||
| uint16_t option_speedsource; | String processor(const String &var); | ||||||
| uint16_t button_changeSource; | void WebserverPost_Callback(AsyncWebServerRequest *request); | ||||||
|  | void WebserverNotFound_Callback(AsyncWebServerRequest *request); | ||||||
| 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; |  | ||||||
|   } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void initWebUI() | void initWebUI() | ||||||
| { | { | ||||||
|   tab_lube = ESPUI.addControl(ControlType::Tab, "Dosierung", "Dosierung"); |   if (!LittleFS.begin()) | ||||||
|   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++) |  | ||||||
|   { |   { | ||||||
|     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) |   // Route to load style.css file | ||||||
|   { |   webServer.serveStatic("/", LittleFS, "/").setDefaultFile("index.htm"); | ||||||
|   case SOURCE_IMPULSE: |   webServer.onNotFound(WebserverNotFound_Callback); | ||||||
|     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; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   num_tank_capacity = ESPUI.addControl(ControlType::Number, "Tankinhalt maximal (ml)", String(LubeConfig.tankCapacity_ml), ControlColor::Carrot, tab_tank, &SettingChanged_Callback); |   webServer.on("/index.htm", HTTP_GET, [](AsyncWebServerRequest *request) | ||||||
|   num_tank_notify = ESPUI.addControl(ControlType::Number, "Tankinhalt Warnung (%)", String(LubeConfig.TankRemindAtPercentage), ControlColor::Carrot, tab_tank, &SettingChanged_Callback); |                { request->send(LittleFS, "/index.htm", String(), false, processor); }); | ||||||
|   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); |  | ||||||
|  |  | ||||||
|   num_purge_pulses = ESPUI.addControl(ControlType::Number, "Entlüftung Impulse", String(LubeConfig.BleedingPulses), ControlColor::Alizarin, tab_maintenance, &SettingChanged_Callback); |   webServer.on("/", HTTP_POST, WebserverPost_Callback); | ||||||
|   button_purge = ESPUI.addControl(ControlType::Button, "Leitung Entlüften", "Start", ControlColor::Alizarin, tab_maintenance, &buttons_Callback); |  | ||||||
|  |  | ||||||
|   button_store = ESPUI.addControl(ControlType::Button, "Einstellungen permanent speichern", "Speichern", ControlColor::Turquoise, tab_store, &buttons_Callback); |   webServer.begin(); | ||||||
|   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"); |  | ||||||
| } | } | ||||||
|  |  | ||||||
| void UpdateWebUI() | 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"); | ||||||
| } | } | ||||||
| @@ -2,7 +2,10 @@ | |||||||
| #define _WEBUI_H_ | #define _WEBUI_H_ | ||||||
|  |  | ||||||
| #include <Arduino.h> | #include <Arduino.h> | ||||||
| #include <ESPUI.h> | #include <FS.h> | ||||||
|  | #include <LittleFS.h> | ||||||
|  | #include <ESPAsyncTCP.h> | ||||||
|  | #include <ESPAsyncWebServer.h> | ||||||
| #include "config.h" | #include "config.h" | ||||||
| #include "globals.h" | #include "globals.h" | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user