Selaa lähdekoodia

reset button and styling

master
gituser 1 viikko sitten
vanhempi
commit
407cee7d01
4 muutettua tiedostoa jossa 150 lisäystä ja 31 poistoa
  1. 1
    3
      .sproject
  2. 125
    23
      HtmlPages.h
  3. 22
    4
      LEDLamp.ino
  4. 2
    1
      sloeber.ino.cpp

+ 1
- 3
.sproject Näytä tiedosto

@@ -1,6 +1,4 @@
Config.Release.board.BOARD.ID=d1
Config.Release.board.BOARD.MENU.FlashFreq=getMenuItemIDFromMenuItemName did not find menu item with name "40MHz" for menu ID "FlashFreq" and for boardID "d1"!
Config.Release.board.BOARD.MENU.FlashMode=getMenuItemIDFromMenuItemName did not find menu item with name "DOUT (compatible)" for menu ID "FlashMode" and for boardID "d1"!
Config.Release.board.BOARD.MENU.baud=921600
Config.Release.board.BOARD.MENU.dbg=Disabled
Config.Release.board.BOARD.MENU.eesz=4M2M
@@ -12,7 +10,7 @@ Config.Release.board.BOARD.MENU.non32xfer=fast
Config.Release.board.BOARD.MENU.ssl=all
Config.Release.board.BOARD.MENU.stacksmash=disabled
Config.Release.board.BOARD.MENU.vt=flash
Config.Release.board.BOARD.MENU.wipe=all
Config.Release.board.BOARD.MENU.wipe=none
Config.Release.board.BOARD.MENU.xtal=80
Config.Release.board.BOARD.TXT=${SLOEBER_HOME}/arduinoPlugin/packages/esp8266/hardware/esp8266/3.1.2/boards.txt
Config.Release.board.PROGRAMMER.NAME=Default

+ 125
- 23
HtmlPages.h Näytä tiedosto

@@ -149,7 +149,34 @@ const String getSetupPage(String macAddress) {
.toggle-eye:hover {
opacity: 1;
}

.bar_white {
background: white;
width: 100%;
height: 3px;
margin-bottom: 20px;
}
.bar_red {
background: red;
width: 100%;
height: 3px;
margin-bottom: 20px;
}

.bar_green {
background: green;
width: 100%;
height: 3px;
margin-bottom: 20px;
}

.bar_blue {
background: blue;
width: 100%;
height: 3px;
margin-bottom: 20px;
}
@keyframes fadeIn {
from {opacity: 0; transform: translateY(10px);}
to {opacity: 1; transform: translateY(0);}
@@ -160,22 +187,29 @@ const String getSetupPage(String macAddress) {
<body>

<div class="card">
<div style="display: flex">
<div class="bar_green"></div>
<div class="bar_white"></div>
<div class="bar_red"></div>
<div class="bar_blue"></div>
</div>
<h2>Wemos LEDLamp Setup</h2>
<div class="mac">Device: )rawliteral"
<div class="mac">Device: )rawliteral"
+ macAddress
+ R"rawliteral(</div>

<form action="/save" method="POST">
<input name="ssid" placeholder="WLAN Name (SSID)">

<div class="pw-wrapper">
<input id="pass" name="pass" type="password" placeholder="Passwort">
<span class="toggle-eye" onclick="togglePassword()">👁</span>
</div>

<button type="submit">Speichern & Verbinden</button>
</form>
<div class="info">Verbinde den LEDLamp Wemos mit einem WLAN Netzwerk</div>
<form action="/save" method="POST">
<input name="ssid" placeholder="WLAN Name (SSID)">
<div class="pw-wrapper">
<input id="pass" name="pass" type="password" placeholder="Passwort">
<span class="toggle-eye" onclick="togglePassword()">👁</span>
</div>
<button type="submit">Speichern & Verbinden</button>
</form>
<div class="info">Verbinde den LEDLamp Wemos mit einem WLAN Netzwerk</div>
</div>

</body>
</html>
@@ -191,8 +225,8 @@ const String getSTAControlPage(String macAddress) {
<!DOCTYPE html>
<html>

<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Wemos LEDLamp Control</title>

@@ -231,6 +265,7 @@ const String getSTAControlPage(String macAddress) {
.info {
font-size: 12px;
opacity: 0.8;
margin-top: 8px;
margin-bottom: 15px;
text-align: center;
}
@@ -253,7 +288,6 @@ const String getSTAControlPage(String macAddress) {
button {
width: 100%;
padding: 12px;
margin-top: 10px;
border: none;
border-radius: 10px;
background: #00c6ff;
@@ -265,8 +299,15 @@ const String getSTAControlPage(String macAddress) {
button:hover {
background: #0072ff;
transform: translateY(-2px);
transform: translateY(-1px) translateX(1px);
}

.btn-row {
display: flex;
gap: 10px;
align-items: center;
margin-top: 10px;
}
.mac {
font-size: 11px;
@@ -275,7 +316,35 @@ const String getSTAControlPage(String macAddress) {
opacity: 0.7;
word-break: break-all;
}

.bar_white {
background: white;
width: 100%;
height: 3px;
margin-bottom: 20px;
}
.bar_red {
background: red;
width: 100%;
height: 3px;
margin-bottom: 20px;
}

.bar_green {
background: green;
width: 100%;
height: 3px;
margin-bottom: 20px;
}

.bar_blue {
background: blue;
width: 100%;
height: 3px;
margin-bottom: 20px;
}

@keyframes fadeIn {
from {opacity: 0; transform: translateY(10px);}
to {opacity: 1; transform: translateY(0);}
@@ -286,27 +355,54 @@ const String getSTAControlPage(String macAddress) {
<body>

<div class="card">
<div style="display: flex">
<div class="bar_green"></div>
<div class="bar_white"></div>
<div class="bar_red"></div>
<div class="bar_blue"></div>
</div>
<h2>Wemos LEDLamp Control</h2>
<div class="mac">Device: )rawliteral"
<div class="mac">Device: )rawliteral"
+ macAddress
+ R"rawliteral(</div>

<div class="btn-row">
<button type="button" onclick="ledOn()">LED EIN</button>
<button type="button" onclick="ledOff()">LED AUS</button>
<div class="btn-row">
<button type="button" onclick="ledOn()">LED EIN</button>
<div id="led_status">⚫</div>
<button type="button" onclick="ledOff()">LED AUS</button>
</div>
<div class="btn-row">
<button type="button" onclick="resetWifiCfg()">Wifi-Konfiguration löschen</button>
</div>
<div id="reset_status" class="info">-</div>
</div>

<script>
let ws;
function connectWS() {
ws = new WebSocket("ws://" + location.hostname + ":81/");
ws.onopen = () => {
console.log("WebSocket connected");
};
ws.onmessage = (e) => {
console.log("ESP:", e.data);
if (e.data === "LED ON") {
document.getElementById("led_status").innerHTML = "🟢";
}
if (e.data === "LED OFF") {
document.getElementById("led_status").innerHTML = "⚫";
}

if (e.data === "Wifi_Reset_Success") {
document.getElementById("reset_status").innerHTML = "Die Wifi-Konfiguration wurde erfolgreich zurückgesetzt.";
}
};
ws.onclose = () => {
console.log("WS disconnected → reconnect");
setTimeout(connectWS, 1000);
@@ -326,6 +422,12 @@ const String getSTAControlPage(String macAddress) {
ws.send("/ledOff");
}
}

function resetWifiCfg() {
if (ws && ws.readyState === 1) {
ws.send("/resetWifiCfg");
}
}
</script>


+ 22
- 4
LEDLamp.ino Näytä tiedosto

@@ -58,7 +58,6 @@ void handleSTAControlPage() {
webServer.send(200, "text/html", html);
}


// ---------- SAVE ----------
void handleSave() {
String ssid = webServer.arg("ssid");
@@ -106,7 +105,6 @@ void startAP() {
Serial.println("Captive Portal gestartet");
}


void webSocketEvent(uint8_t num, WStype_t type, uint8_t *payload, size_t length) {

switch (type) {
@@ -128,10 +126,18 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t *payload, size_t length)

if (msg == "/ledOn") {
digitalWrite(ledPin, LOW);
webSocket.sendTXT(num, "LED ON");
delay(10);
if (digitalRead(ledPin) == LOW) {
webSocket.sendTXT(num, "LED ON");
}
} else if (msg == "/ledOff") {
digitalWrite(ledPin, HIGH);
webSocket.sendTXT(num, "LED OFF");
delay(10);
if (digitalRead(ledPin) == HIGH) {
webSocket.sendTXT(num, "LED OFF");
}
} else if (msg == "/resetWifiCfg") {
resetWifiConfiguration(num);
} else {
String s = "ACK: " + msg;
webSocket.sendTXT(num, s);
@@ -145,6 +151,18 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t *payload, size_t length)
}
}

void resetWifiConfiguration(uint8_t num) {
EEPROM.begin(sizeof(Config));
config.valid = false;
EEPROM.put(0, config);

webSocket.sendTXT(num, "Wifi_Reset_Success");
delay(200);

EEPROM.commit();
ESP.restart();
}

void setState(AppState newState) {
Serial.printf("STATE %s -> %s\n", stateToString(state), stateToString(newState));
state = newState;

+ 2
- 1
sloeber.ino.cpp Näytä tiedosto

@@ -2,7 +2,7 @@
//This is a automatic generated file
//Please do not modify this file
//If you touch this file your change will be overwritten during the next build
//This file has been generated on 2026-06-08 18:48:53
//This file has been generated on 2026-06-08 21:47:53

#include "Arduino.h"
#include "Arduino.h"
@@ -21,6 +21,7 @@ void handleSave() ;
void handleNotFound() ;
void startAP() ;
void webSocketEvent(uint8_t num, WStype_t type, uint8_t *payload, size_t length) ;
void resetWifiConfiguration(uint8_t num) ;
void setState(AppState newState) ;
void handleBoot() ;
void handleConnecting() ;

Loading…
Peruuta
Tallenna