diff --git a/readme.md b/readme.md
index ea7a0266..51a14402 100644
--- a/readme.md
+++ b/readme.md
@@ -2,29 +2,28 @@
WLED is a fast and (relatively) secure implementation of an ESP8266/ESP32 webserver to control NeoPixel (WS2812B) LEDs!
-### Features: (V0.6.4)
+### Features: (V0.7.0)
- RGB, HSB, and brightness sliders
+- All new, mobile-friendly web UI!
- Settings page - configuration over network
- Access Point and station mode - automatic failsafe AP
-- WS2812FX library integrated for over 50 special effects!
+- WS2812FX library integrated for over 50 special effects (+Custom Theater Chase)!
- Secondary color support lets you use even more effect combinations
- Alexa smart home device server (including dimming)
- Beta syncronization to Philips hue lights
- Support for RGBW strips
-- 25 user presets! Save your favorite colors and effects and apply them easily! Now supports cycling through them.
+- 25 user presets! Save colors and effects and apply them easily! Supports cycling through them.
- HTTP request API for simple integration
- Macro functions to automatically execute API calls
- Nightlight function (gradually dims down)
- Notifier function (multiple ESPs sync color via UDP broadcast)
- Support for power pushbutton
-- Custom Theater Chase
- Support for the Adalight serial ambilight protocol!
- Full OTA software update capability (HTTP and ArduinoOTA)
- Password protected OTA page for added security (OTA lock)
- NTP and configurable analog clock function
- Support for the Cronixie Clock kit by Diamex
-- Realtime UDP Packet Control (WARLS, DRGB, DRGBW) possible
-- Client HTML UI controlled, customizable themes
+- Realtime UDP Packet Control (Hyperion, WARLS, DRGB, DRGBW)
### Quick start guide and documentation:
diff --git a/wled00/WS2812FX.cpp b/wled00/WS2812FX.cpp
index 60e1d548..9b2e0e74 100644
--- a/wled00/WS2812FX.cpp
+++ b/wled00/WS2812FX.cpp
@@ -37,8 +37,8 @@
#define CALL_MODE(n) (this->*_mode[n])();
-void WS2812FX::init(bool supportWhite, uint16_t countPixels, uint8_t pin) {
- begin(supportWhite,countPixels,pin);
+void WS2812FX::init(bool supportWhite, uint16_t countPixels, uint8_t pin,bool skipFirst) {
+ begin(supportWhite,countPixels,pin,skipFirst);
for (int i=0; i < _led_count; i++) _locked[i] = false;
WS2812FX::setBrightness(_brightness);
show();
@@ -2032,6 +2032,7 @@ void WS2812FX::setPixelColor(uint16_t i, byte r, byte g, byte b, byte w)
if (_reverseMode) i = _led_count - 1 -i;
if (!_cronixieMode)
{
+ if (_skipFirstMode) {i++;if(i==1)setPixelColorRaw(0,0,0,0,0);}
if (_rgbwMode)
{
bus->SetPixelColor(i, RgbwColor(r,g,b,w));
@@ -2050,27 +2051,27 @@ void WS2812FX::setPixelColor(uint16_t i, byte r, byte g, byte b, byte w)
byte wCorr = (int)(((double)((_color_sec>>24) & 0xFF))*_cronixieSecMultiplier);
for (int j=o; j< o+19; j++)
{
- setPixelColorRaw(j,rCorr,gCorr,bCorr,wCorr);
+ setPixelColorRaw((_skipFirstMode)?j+1:j,rCorr,gCorr,bCorr,wCorr);
}
} else
{
for (int j=o; j< o+19; j++)
{
- setPixelColorRaw(j,0,0,0,0);
+ setPixelColorRaw((_skipFirstMode)?j+1:j,0,0,0,0);
}
}
switch(_cronixieDigits[i])
{
- case 0: setPixelColorRaw(o+5,r,g,b,w); break;
- case 1: setPixelColorRaw(o+0,r,g,b,w); break;
- case 2: setPixelColorRaw(o+6,r,g,b,w); break;
- case 3: setPixelColorRaw(o+1,r,g,b,w); break;
- case 4: setPixelColorRaw(o+7,r,g,b,w); break;
- case 5: setPixelColorRaw(o+2,r,g,b,w); break;
- case 6: setPixelColorRaw(o+8,r,g,b,w); break;
- case 7: setPixelColorRaw(o+3,r,g,b,w); break;
- case 8: setPixelColorRaw(o+9,r,g,b,w); break;
- case 9: setPixelColorRaw(o+4,r,g,b,w); break;
+ case 0: setPixelColorRaw((_skipFirstMode)?o+6:o+5,r,g,b,w); break;
+ case 1: setPixelColorRaw((_skipFirstMode)?o+1:o+0,r,g,b,w); break;
+ case 2: setPixelColorRaw((_skipFirstMode)?o+7:o+6,r,g,b,w); break;
+ case 3: setPixelColorRaw((_skipFirstMode)?o+2:o+1,r,g,b,w); break;
+ case 4: setPixelColorRaw((_skipFirstMode)?o+8:o+7,r,g,b,w); break;
+ case 5: setPixelColorRaw((_skipFirstMode)?o+3:o+2,r,g,b,w); break;
+ case 6: setPixelColorRaw((_skipFirstMode)?o+9:o+8,r,g,b,w); break;
+ case 7: setPixelColorRaw((_skipFirstMode)?o+4:o+3,r,g,b,w); break;
+ case 8: setPixelColorRaw((_skipFirstMode)?o+10:o+9,r,g,b,w); break;
+ case 9: setPixelColorRaw((_skipFirstMode)?o+5:o+4,r,g,b,w); break;
default: break;
}
}
@@ -2134,17 +2135,19 @@ void WS2812FX::clear()
bus->ClearTo(RgbColor(0));
}
-void WS2812FX::begin(bool supportWhite, uint16_t countPixels, uint8_t pin)
+void WS2812FX::begin(bool supportWhite, uint16_t countPixels, uint8_t pin, bool skipFirst)
{
if (supportWhite == _rgbwMode && countPixels == _led_count && _locked != NULL) return;
_rgbwMode = supportWhite;
+ _skipFirstMode = skipFirst;
_led_count = countPixels;
_cc_i2 = _led_count -1;
+ if (_skipFirstMode) _led_count++;
uint8_t ty = 1;
if (supportWhite) ty =2;
- bus->Begin((NeoPixelType)ty, countPixels, pin);
+ bus->Begin((NeoPixelType)ty, _led_count, pin);
if (_locked != NULL) delete _locked;
- _locked = new bool[countPixels];
+ _locked = new bool[_led_count];
}
//For some reason min and max are not declared here
diff --git a/wled00/WS2812FX.h b/wled00/WS2812FX.h
index 7a9ae891..2ea09e4f 100644
--- a/wled00/WS2812FX.h
+++ b/wled00/WS2812FX.h
@@ -199,6 +199,7 @@ class WS2812FX {
_counter_ccStep = 0;
_fastStandard = false;
_reverseMode = false;
+ _skipFirstMode = false;
_locked = NULL;
_cronixieDigits = new byte[6];
bus = new NeoPixelWrapper();
@@ -208,7 +209,7 @@ class WS2812FX {
show(void),
setPixelColor(uint16_t i, byte r, byte g, byte b),
setPixelColor(uint16_t i, byte r, byte g, byte b, byte w),
- init(bool supportWhite, uint16_t countPixels, uint8_t pin),
+ init(bool supportWhite, uint16_t countPixels, uint8_t pin, bool skipFirst),
service(void),
start(void),
stop(void),
@@ -277,7 +278,7 @@ class WS2812FX {
NeoPixelWrapper *bus;
void
- begin(bool supportWhite, uint16_t countPixels, uint8_t pin),
+ begin(bool supportWhite, uint16_t countPixels, uint8_t pin, bool skipFirst),
clear(void),
setPixelColor(uint16_t i, uint32_t c),
setPixelColorRaw(uint16_t i, byte r, byte g, byte b, byte w),
@@ -348,6 +349,7 @@ class WS2812FX {
bool
_triggered,
_rgbwMode,
+ _skipFirstMode,
_fastStandard,
_reverseMode,
_cronixieMode,
diff --git a/wled00/data/index.htm b/wled00/data/index.htm
index f7579be1..e395b3ad 100644
--- a/wled00/data/index.htm
+++ b/wled00/data/index.htm
@@ -1,6 +1,6 @@
-
+
WLED 0.7.0
-
-
-
-
-
-
-
-
-
Presets
-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
-
- Cycle Range
-
-
-
- - Color
- - Effects
- - Both
-
-
-
-
-
-
-
-
diff --git a/wled00/data/msg.htm b/wled00/data/msg.htm
index 5475635f..2b5bf7c3 100644
--- a/wled00/data/msg.htm
+++ b/wled00/data/msg.htm
@@ -9,7 +9,7 @@
window.location = "/settings";
}
function RP() {
- top.location.href=top.location.href;
+ top.location.href="/";
}
+
-
+
+
diff --git a/wled00/data/settings_leds.htm b/wled00/data/settings_leds.htm
index 76fb1f8e..83a84271 100644
Binary files a/wled00/data/settings_leds.htm and b/wled00/data/settings_leds.htm differ
diff --git a/wled00/data/settings_sync.htm b/wled00/data/settings_sync.htm
index 0ae065c6..54a1db9b 100644
Binary files a/wled00/data/settings_sync.htm and b/wled00/data/settings_sync.htm differ
diff --git a/wled00/data/settings_ui.htm b/wled00/data/settings_ui.htm
index a8c2299e..172b01aa 100644
Binary files a/wled00/data/settings_ui.htm and b/wled00/data/settings_ui.htm differ
diff --git a/wled00/htmls00.h b/wled00/htmls00.h
index 3c1b532c..b3de4829 100644
--- a/wled00/htmls00.h
+++ b/wled00/htmls00.h
@@ -1,1054 +1,54 @@
/*
* Mobile UI by StormPie html
*/
+#ifndef WLED_FLASH_512K_MODE
const char PAGE_indexM[] PROGMEM = R"=====(
-
-
-
-
-
-
-
-
-
-
- WLED
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Presets
-
- 1
-
-
- 2
-
-
- 3
-
-
- 4
-
-
- 5
-
-
- 6
-
-
- 7
-
-
- 8
-
-
- 9
-
-
- 10
-
-
- 11
-
-
- 12
-
-
- 13
-
-
- 14
-
-
- 15
-
-
- 16
-
-
-
- Cycle Range
-
-
-
- - Color
- - Effects
- - Both
-
-
-
-
-
-
-
-
-
-
+WLED 0.7.0 Loading WLED UI...
Presets
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Cycle Range
- Solid
- Blink
- Breathe
- Wipe
- Wipe Random
- Random Colors
- Easter
- Multi Colors
- Rainbow Full
- Rainbow Cycle
- Scan
- Double Scan
- Fade
- Chase
- Chase Rainbow
- Running
- Twinkle
- Twinkle Random
- Twinkle Fade
- Twinkle Random Fade
- Sparkle
- Dark Sparkle
- Dark Sparkle+
- Strobe
- Strobe Rainbow
- Double Strobe
- Blink Rainbow
- Android
- Dark Chase
- Dark Chase Random
- Dark Chase Rainbow
- Chase Flash
- Dark Chase Random
- Rainbow Runner
- Colorful
- Traffic Light
- Sweep Random
- Running 2
- Red & Blue
- Running 2 Random
- Scanner
- Lighthouse
- Fireworks
- Fireworks Random
- Merry Christmas
- Fire Flicker
- Gradient
- Gradient Loading
- In Out
- In In
- Out Out
- Out In
- Circus
- Go to top
)=====";
+#else
+const char PAGE_indexM[] PROGMEM = R"=====(
+The Mobile UI is not supported due to limited flash storage. Please go to IP/settings/ui and change the UI mode to "Classic".
+)=====";
+#endif
+
/*
* Classic UI Index html
*/
@@ -1056,10 +56,10 @@ const char PAGE_indexM[] PROGMEM = R"=====(
const char PAGE_index0[] PROGMEM = R"=====(
-
+
WLED 0.7.0
-
+
)=====";
//head1 (css)
diff --git a/wled00/htmls01.h b/wled00/htmls01.h
index d87b8a79..aea78045 100644
--- a/wled00/htmls01.h
+++ b/wled00/htmls01.h
@@ -7,15 +7,15 @@ body{font-family:var(--cFn),sans-serif;text-align:center;background:var(--cCol);
const char PAGE_settings0[] PROGMEM = R"=====(
-
-
-WLED Settings
+WLED Settings
)=====";
const char PAGE_settings1[] PROGMEM = R"=====(
-body{text-align:center;background:var(--cCol);height:100%;margin:0;background-attachment:fixed}button{background:var(--bCol);color:var(--tCol);font-family:var(--cFn),sans-serif;border:.3ch solid var(--bCol);display:inline-block;filter:drop-shadow(-5px -5px 5px var(--sCol));font-size:8vmin;height:13.86vh;width:95%;margin-top:2.4vh}
+body{text-align:center;background:var(--cCol);height:100%;margin:0;background-attachment:fixed}html{--h:11.55vh}button{background:var(--bCol);color:var(--tCol);font-family:var(--cFn),Helvetica,sans-serif;border:.3ch solid var(--bCol);display:inline-block;filter:drop-shadow(-5px -5px 5px var(--sCol));font-size:8vmin;height:var(--h);width:95%;margin-top:2.4vh}
+
-
+
+
@@ -28,8 +28,7 @@ body{text-align:center;background:var(--cCol);height:100%;margin:0;background-at
const char PAGE_settings_wifi0[] PROGMEM = R"=====(
-
-
+
WiFi Settings
+
)=====";
const char PAGE_msg1[] PROGMEM = R"=====(
button{background:var(--bCol);color:var(--tCol);font-family:var(--cFn),sans-serif;border:.3ch solid var(--bCol);display:inline-block;filter:drop-shadow(-5px -5px 5px var(--sCol));font-size:20px;margin:8px;margin-top:12px}body{font-family:var(--cFn),sans-serif;text-align:center;background:var(--cCol);color:var(--tCol);line-height:200%;margin:0;background-attachment:fixed}
diff --git a/wled00/src/dependencies/webserver/WebServer.cpp b/wled00/src/dependencies/webserver/WebServer.cpp
index 8b825e67..83785bef 100644
--- a/wled00/src/dependencies/webserver/WebServer.cpp
+++ b/wled00/src/dependencies/webserver/WebServer.cpp
@@ -90,8 +90,8 @@ WebServer::~WebServer() {
void WebServer::begin() {
_currentStatus = HC_NONE;
_server.begin();
- if(!_headerKeysCount)
- collectHeaders(0, 0);
+ //if(!_headerKeysCount)
+ //collectHeaders(0, 0);
}
bool WebServer::authenticate(const char * username, const char * password){
@@ -408,15 +408,13 @@ String WebServer::header(String name) {
return String();
}
-void WebServer::collectHeaders(const char* headerKeys[], const size_t headerKeysCount) {
- _headerKeysCount = headerKeysCount + 1;
- if (_currentHeaders)
- delete[]_currentHeaders;
- _currentHeaders = new RequestArgument[_headerKeysCount];
+//Modified by Aircoookie to work for WLED
+void WebServer::collectHeaders(String headerKey) {
+ _headerKeysCount = 2;
+ if (_currentHeaders) delete[]_currentHeaders;
+ _currentHeaders = new RequestArgument[2];
_currentHeaders[0].key = AUTHORIZATION_HEADER;
- for (int i = 1; i < _headerKeysCount; i++){
- _currentHeaders[i].key = headerKeys[i-1];
- }
+ _currentHeaders[1].key = headerKey;
}
String WebServer::header(int i) {
diff --git a/wled00/src/dependencies/webserver/WebServer.h b/wled00/src/dependencies/webserver/WebServer.h
index 40807867..5a9ed0de 100644
--- a/wled00/src/dependencies/webserver/WebServer.h
+++ b/wled00/src/dependencies/webserver/WebServer.h
@@ -105,7 +105,7 @@ public:
String argName(int i); // get request argument name by number
int args(); // get arguments count
bool hasArg(String name); // check if argument exists
- void collectHeaders(const char* headerKeys[], const size_t headerKeysCount); // set the request headers to collect
+ void collectHeaders(String headerKey); // set the request headers to collect
String header(String name); // get request header value by name
String header(int i); // get request header value by number
String headerName(int i); // get request header name by number
diff --git a/wled00/wled00.ino b/wled00/wled00.ino
index 261cbdf1..30108e70 100644
--- a/wled00/wled00.ino
+++ b/wled00/wled00.ino
@@ -7,6 +7,10 @@
* @author Christian Schwinne
*/
+//ESP8266-01 got too little storage space to work with all features of WLED. To use it, you must use ESP8266 Arduino Core v2.3.0 and the setting 512K(64K SPIFFS).
+//Uncomment the following line to disable some features (currently Mobile UI) to compile for ESP8266-01
+//#define WLED_FLASH_512K_MODE
+
#include
#ifdef ARDUINO_ARCH_ESP32
#include
@@ -33,7 +37,7 @@
#include "WS2812FX.h"
//version in format yymmddb (b = daily build)
-#define VERSION 1805311
+#define VERSION 1806240
const String versionString = "0.7.0";
//AP and OTA default passwords (change them!)
@@ -72,7 +76,7 @@ IPAddress staticSubnet(255, 255, 255, 0);
IPAddress staticDNS(8, 8, 8, 8); //only for NTP
bool useHSB = true, useHSBDefault = true, useRGBW = false, autoRGBtoRGBW = false;
bool turnOnAtBoot = true;
-bool initLedsLast = false;
+bool initLedsLast = false, skipFirstLed = false;
byte bootPreset = 0;
byte colS[]{255, 159, 0};
byte colSecS[]{0, 0, 0};
@@ -214,10 +218,12 @@ byte presetCycleMin = 1, presetCycleMax = 5;
uint16_t presetCycleTime = 1250;
unsigned long presetCycledTime = 0; byte presetCycCurr = presetCycleMin;
bool presetApplyBri = true, presetApplyCol = true, presetApplyFx = true;
+bool saveCurrPresetCycConf = false;
uint32_t arlsTimeoutMillis = 2500;
bool arlsTimeout = false;
bool receiveDirect = true, enableRealtimeUI = false;
+IPAddress realtimeIP = (0,0,0,0);
unsigned long arlsTimeoutTime = 0;
byte auxTime = 0;
unsigned long auxStartTime = 0;
@@ -300,14 +306,6 @@ String txd = "Please disable OTA Lock in security settings!";
void serveMessage(int,String,String,int=255);
-void down()
-{
- briT = 0;
- setAllLeds();
- DEBUG_PRINTLN("MODULE TERMINATED");
- while (1) {delay(1000);}
-}
-
void reset()
{
briT = 0;
diff --git a/wled00/wled01_eeprom.ino b/wled00/wled01_eeprom.ino
index 6755e29f..a156efa3 100644
--- a/wled00/wled01_eeprom.ino
+++ b/wled00/wled01_eeprom.ino
@@ -214,6 +214,20 @@ void saveSettingsToEEPROM()
EEPROM.write(2201,enableRealtimeUI);
EEPROM.write(2202,uiConfiguration);
EEPROM.write(2203,autoRGBtoRGBW);
+ EEPROM.write(2204,skipFirstLed);
+
+ if (saveCurrPresetCycConf)
+ {
+ EEPROM.write(2205,presetCyclingEnabled);
+ EEPROM.write(2206,(presetCycleTime >> 0) & 0xFF);
+ EEPROM.write(2207,(presetCycleTime >> 8) & 0xFF);
+ EEPROM.write(2208,presetCycleMin);
+ EEPROM.write(2209,presetCycleMax);
+ EEPROM.write(2210,presetApplyBri);
+ EEPROM.write(2211,presetApplyCol);
+ EEPROM.write(2212,presetApplyFx);
+ saveCurrPresetCycConf = false;
+ }
EEPROM.commit();
}
@@ -425,7 +439,25 @@ void loadSettingsFromEEPROM(bool first)
receiveDirect = !EEPROM.read(2200);
enableRealtimeUI = EEPROM.read(2201);
uiConfiguration = EEPROM.read(2202);
+
+ #ifdef WLED_FLASH_512K_MODE
+ uiConfiguration = 1;
+ //force default UI since mobile is unavailable
+ #endif
+
autoRGBtoRGBW = EEPROM.read(2203);
+ skipFirstLed = EEPROM.read(2204);
+
+ if (EEPROM.read(2210) || EEPROM.read(2211) || EEPROM.read(2212))
+ {
+ presetCyclingEnabled = EEPROM.read(2205);
+ presetCycleTime = ((EEPROM.read(2206) << 0) & 0xFF) + ((EEPROM.read(2207) << 8) & 0xFF00);
+ presetCycleMin = EEPROM.read(2208);
+ presetCycleMax = EEPROM.read(2209);
+ presetApplyBri = EEPROM.read(2210);
+ presetApplyCol = EEPROM.read(2211);
+ presetApplyFx = EEPROM.read(2212);
+ }
bootPreset = EEPROM.read(389);
wifiLock = EEPROM.read(393);
diff --git a/wled00/wled02_xml.ino b/wled00/wled02_xml.ino
index e30f4177..7cefdd11 100644
--- a/wled00/wled02_xml.ino
+++ b/wled00/wled02_xml.ino
@@ -167,6 +167,7 @@ String getSettings(byte subPage)
resp += ds + "RV" + c + reverseMode +";";
resp += ds + "EI" + c + initLedsLast +";";
resp += ds + "WO" + v + arlsOffset +";";
+ resp += ds + "SL" + c + skipFirstLed +";";
}
if (subPage == 3)
diff --git a/wled00/wled03_set.ino b/wled00/wled03_set.ino
index 7a2ccf09..fa0c6fa2 100644
--- a/wled00/wled03_set.ino
+++ b/wled00/wled03_set.ino
@@ -121,6 +121,7 @@ void handleSettingsSet(byte subPage)
if (ledCount > 600) ledCount = 600;
#endif
}
+ ccIndex2 = ledCount -1;
useRGBW = server.hasArg("EW");
autoRGBtoRGBW = server.hasArg("AW");
if (server.hasArg("IS")) //ignore settings and save current brightness, colors and fx as default
@@ -194,6 +195,7 @@ void handleSettingsSet(byte subPage)
if (i >= 0 && i <= 255) effectIntensityDefault = i;
}
}
+ saveCurrPresetCycConf = server.hasArg("PC");
turnOnAtBoot = server.hasArg("BO");
if (server.hasArg("BP"))
{
@@ -231,6 +233,7 @@ void handleSettingsSet(byte subPage)
int i = server.arg("WO").toInt();
if (i >= -255 && i <= 255) arlsOffset = i;
}
+ skipFirstLed = server.hasArg("SL");
if (server.hasArg("BF"))
{
int i = server.arg("BF").toInt();
@@ -386,7 +389,7 @@ void handleSettingsSet(byte subPage)
}
}
saveSettingsToEEPROM();
- if (subPage == 2) strip.init(useRGBW,ledCount,PIN);
+ if (subPage == 2) strip.init(useRGBW,ledCount,PIN,skipFirstLed);
}
bool handleSet(String req)
diff --git a/wled00/wled05_init.ino b/wled00/wled05_init.ino
index 8cc72c36..2e230e7a 100644
--- a/wled00/wled05_init.ino
+++ b/wled00/wled05_init.ino
@@ -10,7 +10,7 @@ void wledInit()
#ifdef ARDUINO_ARCH_ESP32
if (ledCount > 600) ledCount = 600;
#endif
- if (!EEPROM.read(397)) strip.init(EEPROM.read(372),ledCount,PIN); //quick init
+ if (!EEPROM.read(397)) strip.init(EEPROM.read(372),ledCount,PIN,EEPROM.read(2204)); //quick init
Serial.begin(115200);
Serial.setTimeout(50);
@@ -164,10 +164,6 @@ void wledInit()
server.on("/freeheap", HTTP_GET, [](){
server.send(200, "text/plain", (String)ESP.getFreeHeap());
});
-
- server.on("/pdebug", HTTP_GET, [](){
- server.send(200, "text/plain", (String)presetCycleTime);
- });
server.on("/power", HTTP_GET, [](){
String val = (String)(int)strip.getPowerEstimate(ledCount,strip.getColor(),strip.getBrightness());
@@ -199,8 +195,6 @@ void wledInit()
server.on("/edit", HTTP_POST, [](){ server.send(200, "text/plain", ""); }, handleFileUpload);
server.on("/list", HTTP_GET, handleFileList);
#endif
- server.on("/down", HTTP_GET, down);
- server.on("/cleareeprom", HTTP_GET, clearEEPROM);
//init ota page
httpUpdater.setup(&server);
} else
@@ -208,12 +202,6 @@ void wledInit()
server.on("/edit", HTTP_GET, [](){
serveMessage(500, "Access Denied", txd, 254);
});
- server.on("/down", HTTP_GET, [](){
- serveMessage(500, "Access Denied", txd, 254);
- });
- server.on("/cleareeprom", HTTP_GET, [](){
- serveMessage(500, "Access Denied", txd, 254);
- });
server.on("/update", HTTP_GET, [](){
serveMessage(500, "Access Denied", txd, 254);
});
@@ -231,8 +219,14 @@ void wledInit()
server.send(404, "text/plain", "Not Found");
}
});
+
+ #ifndef ARDUINO_ARCH_ESP32
const char * headerkeys[] = {"User-Agent"};
server.collectHeaders(headerkeys,sizeof(char*));
+ #else
+ String ua = "User-Agent";
+ server.collectHeaders(ua);
+ #endif
if (!initLedsLast) strip.service();
//init Alexa hue emulation
@@ -273,7 +267,7 @@ void wledInit()
void initStrip()
{
// Initialize NeoPixel Strip and button
- if (initLedsLast) strip.init(useRGBW,ledCount,PIN);
+ if (initLedsLast) strip.init(useRGBW,ledCount,PIN,skipFirstLed);
strip.setReverseMode(reverseMode);
strip.setColor(0);
strip.setBrightness(255);
@@ -319,7 +313,13 @@ void initCon()
}
int fail_count = 0;
if (clientSSID.length() <1 || clientSSID.equals("Your_Network")) fail_count = apWaitTimeSecs*2;
+ #ifndef ARDUINO_ARCH_ESP32
+ WiFi.hostname(serverDescription);
+ #endif
WiFi.begin(clientSSID.c_str(), clientPass.c_str());
+ #ifdef ARDUINO_ARCH_ESP32
+ WiFi.setHostname(serverDescription.c_str());
+ #endif
unsigned long lastTry = 0;
bool con = false;
while(!con)
@@ -400,6 +400,21 @@ void serveIndexOrWelcome()
}
}
+void serveRealtimeError(bool settings)
+{
+ String mesg = "The ";
+ mesg += (settings)?"settings":"WLED";
+ mesg += " UI is not available while receiving real-time data (UDP from ";
+ mesg += realtimeIP[0];
+ for (int i = 1; i < 4; i++)
+ {
+ mesg += ".";
+ mesg += realtimeIP[i];
+ }
+ mesg += ").";
+ server.send(200, "text/plain", mesg);
+}
+
void serveIndex()
{
bool serveMobile = false;
@@ -424,7 +439,7 @@ void serveIndex()
server.sendContent_P(PAGE_index3);
}
} else {
- server.send(200, "text/plain", "The WLED UI is not available while receiving real-time data.");
+ serveRealtimeError(false);
}
}
@@ -509,7 +524,7 @@ void serveSettings(byte subPage)
default: server.sendContent_P(PAGE_settings1);
}
} else {
- server.send(200, "text/plain", "The settings are not available while receiving real-time data.");
+ serveRealtimeError(true);
}
}
@@ -540,7 +555,7 @@ String getBuildInfo()
#else
info += "strip-pin: gpio2\r\n";
#endif
- info += "build-type: dev\r\n";
+ info += "build-type: src\r\n";
return info;
}
diff --git a/wled00/wled07_notify.ino b/wled00/wled07_notify.ino
index 2ef66f0f..72965575 100644
--- a/wled00/wled07_notify.ino
+++ b/wled00/wled07_notify.ino
@@ -81,8 +81,10 @@ void handleNotifications()
uint16_t packetSize = notifierUdp.parsePacket();
//hyperion / raw RGB
- if (!packetSize && receiveDirect && udpRgbConnected) {
+ if (!packetSize && udpRgbConnected) {
packetSize = rgbUdp.parsePacket();
+ if (!receiveDirect) return;
+ realtimeIP = rgbUdp.remoteIP();
if (packetSize > 1026 || packetSize < 3) return;
byte udpIn[packetSize];
rgbUdp.read(udpIn, packetSize);
@@ -153,6 +155,7 @@ void handleNotifications()
}
} else if (udpIn[0] > 0 && udpIn[0] < 4 && receiveDirect) //1 warls //2 drgb //3 drgbw
{
+ realtimeIP = notifierUdp.remoteIP();
if (packetSize > 1) {
if (udpIn[1] == 0)
{