added webui to the ESP32, for now contains only UDP port settings and some placeholders
This commit is contained in:
@@ -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 (1024–65535)");
|
||||
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");
|
||||
}
|
||||
|
||||
// -------------------------------
|
||||
|
||||
Reference in New Issue
Block a user