added webui to the ESP32, for now contains only UDP port settings and some placeholders

This commit is contained in:
2026-01-19 13:27:01 +01:00
parent 3fc15c85d3
commit e634563cdd

View File

@@ -3,6 +3,21 @@
#include <WiFiUdp.h>
#include <WiFiManager.h>
// -------------------------------
// ESPUI + AsyncWebServer
// -------------------------------
#include <AsyncTCP.h>
#include <ESPAsyncWebServer.h>
#include <ESPUI.h>
// -------------------------------
// Preferences
// -------------------------------
#include <Preferences.h>
Preferences prefs;
AsyncWebServer server(80);
// -------------------------------
// Firmware version
// -------------------------------
@@ -12,7 +27,8 @@ const char* FIRMWARE_VERSION = "V2.4_UDP_LEDC_WM_SLEW";
// UDP
// -------------------------------
WiFiUDP udp;
const int listenPort = 12345; // Must match PC config.json
const int listenPort = 12345; // default / legacy constant
int udpPort = 12345; // runtime port, loaded from Preferences
// -------------------------------
// PWM setup (LEDC, ESP32 Core 3.x)
@@ -92,6 +108,11 @@ unsigned long lastPacketTime = 0;
const unsigned long watchdogTimeout = 5000; // 5 seconds
unsigned long lastFadeTime = 0;
// -------------------------------
// ESPUI controls
// -------------------------------
uint16_t portInput; // ID of the UDP port Number control
// -------------------------------
// Calibration interpolation
// -------------------------------
@@ -151,11 +172,180 @@ void setup() {
Serial.print("IP: ");
Serial.println(WiFi.localIP());
udp.begin(listenPort);
// Preferences: load UDP port (default = listenPort)
prefs.begin("analogmon", false);
udpPort = prefs.getInt("udpPort", listenPort);
// Start UDP with runtime port
udp.begin(udpPort);
Serial.print("Listening on UDP port ");
Serial.println(listenPort);
Serial.println(udpPort);
lastPacketTime = millis();
// -------------------------------
// ESPUI Web Interface
// -------------------------------
ESPUI.setVerbosity(Verbosity::Verbose);
// Create tabs
uint16_t tabSettings = ESPUI.addControl(ControlType::Tab, "Settings", "Settings");
uint16_t tabLighting = ESPUI.addControl(ControlType::Tab, "Lighting", "Lighting");
uint16_t tabCalibration = ESPUI.addControl(ControlType::Tab, "Calibration", "Calibration");
// Restart button callback
auto restartCallback = [](Control *sender, int type) {
ESP.restart();
};
// Port input callback
auto portInputCallback = [](Control *sender, int type) {
Serial.print("Port input changed to: ");
Serial.println(sender->value);
};
// Save & Apply callback
auto savePortCallback = [](Control *sender, int type) {
if (type != B_UP) return; // Prevent double-trigger
Control* c = ESPUI.getControl(portInput);
int newPort = c->value.toInt();
if (newPort < 1024 || newPort > 65535) {
Serial.println("Invalid port (102465535)");
return;
}
prefs.putInt("udpPort", newPort);
udpPort = newPort;
udp.stop();
udp.begin(udpPort);
Serial.print("New UDP port applied: ");
Serial.println(udpPort);
ESPUI.updateControlValue(portInput, String(newPort));
};
// ------------------------------------------------------
// Row simulation: Port input + Save button
// ------------------------------------------------------
// UDP Port Number input (shared label)
portInput = ESPUI.addControl(
ControlType::Number,
"UDP Port",
String(udpPort),
ControlColor::Peterriver,
tabSettings,
portInputCallback
);
// Save & Apply button (same label)
ESPUI.addControl(
ControlType::Button,
"UDP Port",
"Save & Apply",
ControlColor::Emerald,
tabSettings,
savePortCallback
);
// Separator line
ESPUI.addControl(
ControlType::Separator,
"",
"",
ControlColor::None,
tabSettings
);
// Restart button at the bottom
ESPUI.addControl(
ControlType::Button,
"Restart ESP32",
"Restart",
ControlColor::Alizarin,
tabSettings,
restartCallback
);
// Lighting tab placeholder
ESPUI.addControl(
ControlType::Label,
"Lighting Placeholder",
"Coming soon...",
ControlColor::Emerald,
tabLighting
);
ESPUI.addControl(
ControlType::Separator,
"CH0 (CPU Load)",
"",
ControlColor::None,
tabCalibration
);
ESPUI.addControl(
ControlType::Separator,
"CH1 (CPU Temp)",
"",
ControlColor::None,
tabCalibration
);
ESPUI.addControl(
ControlType::Separator,
"CH2 (RAM Usage)",
"",
ControlColor::None,
tabCalibration
);
ESPUI.addControl(
ControlType::Separator,
"CH3 (GPU Load)",
"",
ControlColor::None,
tabCalibration
);
ESPUI.addControl(
ControlType::Separator,
"CH4 (GPU Temp)",
"",
ControlColor::None,
tabCalibration
);
ESPUI.addControl(
ControlType::Separator,
"CH5 (VRAM Usage)",
"",
ControlColor::None,
tabCalibration
);
ESPUI.addControl(
ControlType::Separator,
"CH6 (Reserved 6)",
"",
ControlColor::None,
tabCalibration
);
ESPUI.addControl(
ControlType::Separator,
"CH7 (Reserved 7)",
"",
ControlColor::None,
tabCalibration
);
// Start ESPUI
ESPUI.begin("Analog Monitor UI");
}
// -------------------------------