diff --git a/.gitignore b/.gitignore
index db3138f..74e5dde 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,5 @@
.pio
+.cache
.pioenvs
.piolibdeps
.vscode
@@ -6,6 +7,8 @@
/wled00/Release
/wled00/extLibs
/platformio_override.ini
+/wled00/user_config_override.h
+/build_output
.DS_Store
.gitignore
.clang-format
diff --git a/.gitpod.Dockerfile b/.gitpod.Dockerfile
new file mode 100644
index 0000000..29d75d1
--- /dev/null
+++ b/.gitpod.Dockerfile
@@ -0,0 +1,5 @@
+FROM gitpod/workspace-full
+
+USER gitpod
+
+RUN pip3 install -U platformio
diff --git a/.gitpod.yml b/.gitpod.yml
new file mode 100644
index 0000000..cc416b1
--- /dev/null
+++ b/.gitpod.yml
@@ -0,0 +1,12 @@
+tasks:
+ - command: platformio run
+
+image:
+ file: .gitpod.Dockerfile
+
+vscode:
+ extensions:
+ - ms-vscode.cpptools@0.26.3:u3GsZ5PK12Ddr79vh4TWgQ==
+ - eamodio.gitlens@10.2.1:e0IYyp0efFqVsrZwsIe8CA==
+ - Atishay-Jain.All-Autocomplete@0.0.23:fbZNfSpnd8XkAHGfAPS2rA==
+ - 2gua.rainbow-brackets@0.0.6:Tbu8dTz0i+/bgcKQTQ5b8g==
diff --git a/pio/gzip-firmware.py b/pio/gzip-firmware.py
new file mode 100644
index 0000000..2d02830
--- /dev/null
+++ b/pio/gzip-firmware.py
@@ -0,0 +1,23 @@
+Import('env')
+import os
+import shutil
+import gzip
+
+OUTPUT_DIR = "build_output{}".format(os.path.sep)
+
+def bin_gzip(source, target, env):
+ variant = str(target[0]).split(os.path.sep)[2]
+
+ # create string with location and file names based on variant
+ bin_file = "{}firmware{}{}.bin".format(OUTPUT_DIR, os.path.sep, variant)
+ gzip_file = "{}firmware{}{}.bin.gz".format(OUTPUT_DIR, os.path.sep, variant)
+
+ # check if new target files exist and remove if necessary
+ if os.path.isfile(gzip_file): os.remove(gzip_file)
+
+ # write gzip firmware file
+ with open(bin_file,"rb") as fp:
+ with gzip.open(gzip_file, "wb", compresslevel = 9) as f:
+ shutil.copyfileobj(fp, f)
+
+env.AddPostAction("$BUILD_DIR/${PROGNAME}.bin", [bin_gzip])
diff --git a/pio/name-firmware.py b/pio/name-firmware.py
new file mode 100644
index 0000000..90ea986
--- /dev/null
+++ b/pio/name-firmware.py
@@ -0,0 +1,34 @@
+Import('env')
+import os
+import shutil
+
+OUTPUT_DIR = "build_output{}".format(os.path.sep)
+
+def bin_rename_copy(source, target, env):
+ variant = str(target[0]).split(os.path.sep)[2]
+
+ # check if output directories exist and create if necessary
+ if not os.path.isdir(OUTPUT_DIR):
+ os.mkdir(OUTPUT_DIR)
+
+ for d in ['firmware', 'map']:
+ if not os.path.isdir("{}{}".format(OUTPUT_DIR, d)):
+ os.mkdir("{}{}".format(OUTPUT_DIR, d))
+
+ # create string with location and file names based on variant
+ map_file = "{}map{}{}.map".format(OUTPUT_DIR, os.path.sep, variant)
+ bin_file = "{}firmware{}{}.bin".format(OUTPUT_DIR, os.path.sep, variant)
+
+ # check if new target files exist and remove if necessary
+ for f in [map_file, bin_file]:
+ if os.path.isfile(f):
+ os.remove(f)
+
+ # copy firmware.bin to firmware/.bin
+ shutil.copy(str(target[0]), bin_file)
+
+ # copy firmware.map to map/.map
+ if os.path.isfile("firmware.map"):
+ shutil.move("firmware.map", map_file)
+
+env.AddPostAction("$BUILD_DIR/${PROGNAME}.bin", [bin_rename_copy])
diff --git a/pio/obj-dump.py b/pio/obj-dump.py
new file mode 100644
index 0000000..91bc3de
--- /dev/null
+++ b/pio/obj-dump.py
@@ -0,0 +1,9 @@
+# Little convenience script to get an object dump
+
+Import('env')
+
+def obj_dump_after_elf(source, target, env):
+ print("Create firmware.asm")
+ env.Execute("xtensa-lx106-elf-objdump "+ "-D " + str(target[0]) + " > "+ "${PROGNAME}.asm")
+
+env.AddPostAction("$BUILD_DIR/${PROGNAME}.elf", [obj_dump_after_elf])
diff --git a/pio/override_copy.py b/pio/override_copy.py
new file mode 100644
index 0000000..82549e7
--- /dev/null
+++ b/pio/override_copy.py
@@ -0,0 +1,9 @@
+Import('env')
+import os
+import shutil
+
+# copy WLED00/user_config_override_sample.h to WLED00/user_config_override.h
+if os.path.isfile("wled00/user_config_override.h"):
+ print ("*** use provided user_config_override.h as planned ***")
+else:
+ shutil.copy("wled00/user_config_override_sample.h", "wled00/user_config_override.h")
diff --git a/pio/strip-floats.py b/pio/strip-floats.py
new file mode 100644
index 0000000..da916eb
--- /dev/null
+++ b/pio/strip-floats.py
@@ -0,0 +1,15 @@
+Import('env')
+
+#
+# Dump build environment (for debug)
+#print env.Dump()
+#
+
+flags = " ".join(env['LINKFLAGS'])
+flags = flags.replace("-u _printf_float", "")
+flags = flags.replace("-u _scanf_float", "")
+newflags = flags.split()
+
+env.Replace(
+ LINKFLAGS=newflags
+)
\ No newline at end of file
diff --git a/platformio.ini b/platformio.ini
index 139eaf3..3e2a3ef 100644
--- a/platformio.ini
+++ b/platformio.ini
@@ -79,8 +79,9 @@ arduino_core_git = https://github.com/platformio/platform-espressif8266#feature/
# Platform to use for ESP8266
platform_wled_default = ${common.arduino_core_2_7_4}
-# We use 2.7.0+ on analog boards because of PWM flicker fix
platform_latest = ${common.arduino_core_2_7_4}
+# We use 2.7.4.7 for all, includes PWM flicker fix and Wstring optimization
+platform_packages = tasmota/framework-arduinoespressif8266 @ 3.20704.7
# ------------------------------------------------------------------------------
# FLAGS: DEBUG
@@ -114,18 +115,44 @@ debug_flags = -D DEBUG=1 -D WLED_DEBUG -DDEBUG_ESP_WIFI -DDEBUG_ESP_HTTP_CLIENT
# TLS_RSA_WITH_AES_256_CBC_SHA / AES256-SHA
# This reduces the OTA size with ~45KB, so it's especially useful on low memory boards (512k/1m).
# ------------------------------------------------------------------------------
-build_flags = -g -w -DMQTT_MAX_PACKET_SIZE=1024 -DPIO_FRAMEWORK_ARDUINO_LWIP_HIGHER_BANDWIDTH
- -DSECURE_CLIENT=SECURE_CLIENT_BEARSSL -DBEARSSL_SSL_BASIC
- #build_flags for the IRremoteESP8266 library (enabled decoders have to appear here)
+build_flags =
+ -Wno-switch
+ -Wno-deprecated-declarations
+ -Wno-write-strings
+ -Wno-unused-variable
+ -Wno-unused-value
+ -Wno-sign-compare
+ -Wno-unused-but-set-variable
+ -Wno-return-type
+ -Wno-sequence-point
+ -DMQTT_MAX_PACKET_SIZE=1024
+ -DSECURE_CLIENT=SECURE_CLIENT_BEARSSL
+ -DBEARSSL_SSL_BASIC
+ -D CORE_DEBUG_LEVEL=0
+ -D NDEBUG
+ -DFP_IN_IROM
+; NONOSDK22x_190703 = 2.2.2-dev(38a443e)
+ -DPIO_FRAMEWORK_ARDUINO_ESPRESSIF_SDK22x_190703
+; lwIP 2 - Higher Bandwidth no Features
+ -DPIO_FRAMEWORK_ARDUINO_LWIP2_HIGHER_BANDWIDTH_LOW_FLASH
+; VTABLES in Flash
+ -DVTABLES_IN_FLASH
+; restrict to minimal mime-types
+ -DMIMETYPE_MINIMAL
+#build_flags for the IRremoteESP8266 library (enabled decoders have to appear here)
-D _IR_ENABLE_DEFAULT_=false
-D DECODE_HASH=true
-D DECODE_NEC=true
-D DECODE_SONY=true
-D DECODE_SAMSUNG=true
-D DECODE_LG=true
-
+
+build_unflags =
+ -Wall
+ -Wdeprecated-declarations
+
build_flags_esp8266 = ${common.build_flags} -DESP8266
-build_flags_esp32 = ${common.build_flags} -DARDUINO_ARCH_ESP32
+build_flags_esp32 = ${esp32.build_flags} -DARDUINO_ARCH_ESP32
# enables all features for travis CI
build_flags_all_features =
@@ -145,6 +172,27 @@ ldscript_4m3m = eagle.flash.4m3m.ld
shared_libdeps_dir = ./wled00/src
+[esp32]
+build_flags = -w -g
+ -DMQTT_MAX_PACKET_SIZE=1024
+ -DSECURE_CLIENT=SECURE_CLIENT_BEARSSL
+ -DBEARSSL_SSL_BASIC
+ -D CORE_DEBUG_LEVEL=0
+ -D NDEBUG
+#build_flags for the IRremoteESP8266 library (enabled decoders have to appear here)
+ -D _IR_ENABLE_DEFAULT_=false
+ -D DECODE_HASH=true
+ -D DECODE_NEC=true
+ -D DECODE_SONY=true
+ -D DECODE_SAMSUNG=true
+ -D DECODE_LG=true
+
+[scripts_defaults]
+extra_scripts = pio/name-firmware.py
+ pio/gzip-firmware.py
+ pio/strip-floats.py
+ pio/override_copy.py
+
# ------------------------------------------------------------------------------
# COMMON SETTINGS:
# ------------------------------------------------------------------------------
@@ -153,6 +201,10 @@ framework = arduino
board_build.flash_mode = dout
monitor_speed = 115200
upload_speed = 115200
+; *** Upload Serial reset method for Wemos and NodeMCU
+upload_resetmethod = nodemcu
+upload_port = COM5
+
lib_extra_dirs =
${common.shared_libdeps_dir}
@@ -184,6 +236,8 @@ lib_deps =
lib_ignore =
AsyncTCP
+extra_scripts = ${scripts_defaults.extra_scripts}
+
# ------------------------------------------------------------------------------
# WLED BUILDS
# ------------------------------------------------------------------------------
@@ -191,14 +245,18 @@ lib_ignore =
[env:nodemcuv2]
board = nodemcuv2
platform = ${common.platform_wled_default}
+platform_packages = ${common.platform_packages}
board_build.ldscript = ${common.ldscript_4m1m}
+build_unflags = ${common.build_unflags}
build_flags = ${common.build_flags_esp8266}
# Unsupported environment due to insufficient flash
[env:esp01]
board = esp01
platform = ${common.platform_wled_default}
+platform_packages = ${common.platform_packages}
board_build.ldscript = ${common.ldscript_512k}
+build_unflags = ${common.build_unflags}
build_flags = ${common.build_flags_esp8266} -D WLED_DISABLE_OTA -D WLED_DISABLE_ALEXA -D WLED_DISABLE_BLYNK
-D WLED_DISABLE_CRONIXIE -D WLED_DISABLE_HUESYNC -D WLED_DISABLE_INFRARED -D WLED_DISABLE_MQTT -D WLED_DISABLE_WEBSOCKETS
@@ -206,44 +264,57 @@ build_flags = ${common.build_flags_esp8266} -D WLED_DISABLE_OTA -D WLED_DISABLE_
[env:esp01_1m_ota]
board = esp01_1m
platform = ${common.platform_wled_default}
+platform_packages = ${common.platform_packages}
board_build.ldscript = ${common.ldscript_1m0m}
+build_unflags = ${common.build_unflags}
build_flags = ${common.build_flags_esp8266} -D WLED_DISABLE_ALEXA -D WLED_DISABLE_BLYNK -D WLED_DISABLE_CRONIXIE
-D WLED_DISABLE_HUESYNC -D WLED_DISABLE_INFRARED -D WLED_DISABLE_MQTT -D WLED_DISABLE_WEBSOCKETS
[env:esp01_1m_full]
board = esp01_1m
platform = ${common.platform_wled_default}
+platform_packages = ${common.platform_packages}
board_build.ldscript = ${common.ldscript_1m0m}
+build_unflags = ${common.build_unflags}
build_flags = ${common.build_flags_esp8266} -D WLED_DISABLE_OTA
[env:esp07]
board = esp07
platform = ${common.platform_wled_default}
+platform_packages = ${common.platform_packages}
board_build.ldscript = ${common.ldscript_4m1m}
+build_unflags = ${common.build_unflags}
build_flags = ${common.build_flags_esp8266}
[env:d1_mini]
board = d1_mini
platform = ${common.platform_wled_default}
+platform_packages = ${common.platform_packages}
upload_speed = 921600
board_build.ldscript = ${common.ldscript_4m1m}
+build_unflags = ${common.build_unflags}
build_flags = ${common.build_flags_esp8266}
[env:heltec_wifi_kit_8]
board = d1_mini
platform = ${common.platform_wled_default}
+platform_packages = ${common.platform_packages}
board_build.ldscript = ${common.ldscript_4m1m}
+build_unflags = ${common.build_unflags}
build_flags = ${common.build_flags_esp8266}
[env:h803wf]
board = d1_mini
platform = ${common.platform_wled_default}
+platform_packages = ${common.platform_packages}
board_build.ldscript = ${common.ldscript_4m1m}
+build_unflags = ${common.build_unflags}
build_flags = ${common.build_flags_esp8266} -D LEDPIN=1 -D WLED_DISABLE_INFRARED
[env:esp32dev]
board = esp32dev
-platform = espressif32@1.12.4
+platform = espressif32@2.0
+build_unflags = ${common.build_unflags}
build_flags = ${common.build_flags_esp32}
lib_ignore =
ESPAsyncTCP
@@ -261,25 +332,33 @@ lib_ignore =
[env:esp8285_4CH_MagicHome]
board = esp8285
platform = ${common.platform_latest}
+platform_packages = ${common.platform_packages}
board_build.ldscript = ${common.ldscript_1m0m}
+build_unflags = ${common.build_unflags}
build_flags = ${common.build_flags_esp8266} -D WLED_DISABLE_HUESYNC -D WLED_USE_ANALOG_LEDS
[env:esp8285_4CH_H801]
board = esp8285
platform = ${common.platform_latest}
+platform_packages = ${common.platform_packages}
board_build.ldscript = ${common.ldscript_1m0m}
+build_unflags = ${common.build_unflags}
build_flags = ${common.build_flags_esp8266} -D WLED_DISABLE_HUESYNC -D WLED_USE_ANALOG_LEDS -D WLED_USE_H801
[env:esp8285_5CH_H801]
board = esp8285
platform = ${common.platform_latest}
+platform_packages = ${common.platform_packages}
board_build.ldscript = ${common.ldscript_1m0m}
+build_unflags = ${common.build_unflags}
build_flags = ${common.build_flags_esp8266} -D WLED_DISABLE_HUESYNC -D WLED_USE_ANALOG_LEDS -D WLED_USE_H801 -D WLED_ENABLE_5CH_LEDS
[env:d1_mini_5CH_Shojo_PCB]
board = d1_mini
platform = ${common.platform_latest}
+platform_packages = ${common.platform_packages}
board_build.ldscript = ${common.ldscript_4m1m}
+build_unflags = ${common.build_unflags}
build_flags = ${common.build_flags_esp8266} -D WLED_USE_ANALOG_LEDS -D WLED_USE_SHOJO_PCB -D WLED_ENABLE_5CH_LEDS
# ------------------------------------------------------------------------------
@@ -290,7 +369,9 @@ build_flags = ${common.build_flags_esp8266} -D WLED_USE_ANALOG_LEDS -D WLED_USE_
board = d1_mini
build_type = debug
platform = ${common.platform_wled_default}
+platform_packages = ${common.platform_packages}
board_build.ldscript = ${common.ldscript_4m1m}
+build_unflags = ${common.build_unflags}
build_flags = ${common.build_flags_esp8266} ${common.debug_flags}
[env:d1_mini_ota]
@@ -299,7 +380,9 @@ upload_protocol = espota
# exchange for your WLED IP
upload_port = "10.10.1.27"
platform = ${common.platform_wled_default}
+platform_packages = ${common.platform_packages}
board_build.ldscript = ${common.ldscript_4m1m}
+build_unflags = ${common.build_unflags}
build_flags = ${common.build_flags_esp8266}
# ------------------------------------------------------------------------------
@@ -309,37 +392,48 @@ build_flags = ${common.build_flags_esp8266}
[env:custom_LEDPIN_4]
board = d1_mini
platform = ${common.platform_latest}
+platform_packages = ${common.platform_packages}
board_build.ldscript = ${common.ldscript_4m1m}
+build_unflags = ${common.build_unflags}
build_flags = ${common.build_flags_esp8266} -D LEDPIN=4 -D IRPIN=5
[env:custom_LEDPIN_16]
board = d1_mini
platform = ${common.platform_latest}
+platform_packages = ${common.platform_packages}
board_build.ldscript = ${common.ldscript_4m1m}
+build_unflags = ${common.build_unflags}
build_flags = ${common.build_flags_esp8266} -D LEDPIN=16
[env:custom_LEDPIN_3]
board = d1_mini
platform = ${common.platform_latest}
+platform_packages = ${common.platform_packages}
board_build.ldscript = ${common.ldscript_4m1m}
+build_unflags = ${common.build_unflags}
build_flags = ${common.build_flags_esp8266} -D LEDPIN=3
[env:custom_APA102]
board = d1_mini
platform = ${common.platform_latest}
+platform_packages = ${common.platform_packages}
board_build.ldscript = ${common.ldscript_4m1m}
+build_unflags = ${common.build_unflags}
build_flags = ${common.build_flags_esp8266} -D USE_APA102
[env:custom_WS2801]
board = d1_mini
platform = ${common.platform_latest}
+platform_packages = ${common.platform_packages}
board_build.ldscript = ${common.ldscript_4m1m}
+build_unflags = ${common.build_unflags}
build_flags = ${common.build_flags_esp8266} -D USE_WS2801
[env:custom32_LEDPIN_16]
board = esp32dev
-platform = espressif32@1.12.4
+platform = espressif32@2.0
+build_unflags = ${common.build_unflags}
build_flags = ${common.build_flags_esp32} -D LEDPIN=16
lib_ignore =
ESPAsyncTCP
@@ -347,7 +441,8 @@ lib_ignore =
[env:custom32_TOUCHPIN_T0]
board = esp32dev
-platform = espressif32@1.12.4
+platform = espressif32@2.0
+build_unflags = ${common.build_unflags}
build_flags = ${common.build_flags_esp32} -D TOUCHPIN=T0
lib_ignore =
ESPAsyncTCP
@@ -355,10 +450,11 @@ lib_ignore =
[env:wemos_shield_esp32]
board = esp32dev
-platform = espressif32@1.12.4
+platform = espressif32@2.0
upload_port = /dev/cu.SLAB_USBtoUART
monitor_port = /dev/cu.SLAB_USBtoUART
upload_speed = 460800
+build_unflags = ${common.build_unflags}
build_flags = ${common.build_flags_esp32} -D LEDPIN=16 -D RLYPIN=19 -D BTNPIN=17
lib_ignore =
ESPAsyncTCP
@@ -366,11 +462,12 @@ lib_ignore =
[env:m5atom]
board = esp32dev
+build_unflags = ${common.build_unflags}
build_flags = ${common.build_flags_esp32} -D LEDPIN=27 -D BTNPIN=39
lib_ignore =
ESPAsyncTCP
ESPAsyncUDP
-platform = espressif32@1.12.4
+platform = espressif32@2.0
[env:sp501e]
board = esp_wroom_02
@@ -385,11 +482,13 @@ build_flags = ${common.build_flags_esp8266} -D LEDPIN=3 -D BTNPIN=1
[env:travis_esp8266]
extends = env:d1_mini
build_type = debug
+build_unflags = ${common.build_unflags}
build_flags = ${common.build_flags_esp8266} ${common.debug_flags} ${common.build_flags_all_features}
[env:travis_esp32]
extends = env:esp32dev
build_type = debug
+build_unflags = ${common.build_unflags}
build_flags = ${common.build_flags_esp32} ${common.debug_flags} ${common.build_flags_all_features}
# ------------------------------------------------------------------------------
@@ -399,35 +498,47 @@ build_flags = ${common.build_flags_esp32} ${common.debug_flags} ${common.build_f
[env:codm-controller-0.4]
board = esp_wroom_02
platform = ${common.platform_wled_default}
+platform_packages = ${common.platform_packages}
board_build.ldscript = ${common.ldscript_2m1m}
+build_unflags = ${common.build_unflags}
build_flags = ${common.build_flags_esp8266} -D LEDPIN=3
[env:codm-controller-0.4-WS2801]
board = esp_wroom_02
platform = ${common.platform_latest}
+platform_packages = ${common.platform_packages}
board_build.ldscript = ${common.ldscript_2m1m}
+build_unflags = ${common.build_unflags}
build_flags = ${common.build_flags_esp8266} -D USE_WS2801 -D CLKPIN=13 -D DATAPIN=3
[env:codm-controller-0.4-APA102]
board = esp_wroom_02
platform = ${common.platform_latest}
+platform_packages = ${common.platform_packages}
board_build.ldscript = ${common.ldscript_2m1m}
+build_unflags = ${common.build_unflags}
build_flags = ${common.build_flags_esp8266} -D USE_APA102 -D CLKPIN=13 -D DATAPIN=3
[env:codm-controller-0.5]
board = esp_wroom_02
platform = ${common.platform_wled_default}
+platform_packages = ${common.platform_packages}
board_build.ldscript = ${common.ldscript_2m1m}
+build_unflags = ${common.build_unflags}
build_flags = ${common.build_flags_esp8266}
[env:codm-controller-0.5-WS2801]
board = esp_wroom_02
platform = ${common.platform_latest}
+platform_packages = ${common.platform_packages}
board_build.ldscript = ${common.ldscript_2m1m}
+build_unflags = ${common.build_unflags}
build_flags = ${common.build_flags_esp8266} -D USE_WS2801 #-D CLKPIN=0 -D DATAPIN=2
[env:codm-controller-0.5-APA102]
board = esp_wroom_02
platform = ${common.platform_latest}
+platform_packages = ${common.platform_packages}
board_build.ldscript = ${common.ldscript_2m1m}
+build_unflags = ${common.build_unflags}
build_flags = ${common.build_flags_esp8266} -D USE_APA102 #-D CLKPIN=0 -D DATAPIN=2
diff --git a/platformio_override.ini.example b/platformio_override.ini.example
index 240c486..e6c636a 100644
--- a/platformio_override.ini.example
+++ b/platformio_override.ini.example
@@ -5,19 +5,26 @@
# Please visit documentation: https://docs.platformio.org/page/projectconf.html
[platformio]
-default_envs = esp8266_1m_custom
+default_envs = WLED_tasmota_1M
-[env:esp8266_1m_custom]
+[env:WLED_tasmota_1M]
board = esp01_1m
-platform = ${common.arduino_core_2_4_2}
+platform = ${common.platform_wled_default}
+platform_packages = ${common.platform_packages}
board_build.ldscript = ${common.ldscript_1m0m}
-build_flags = ${common.build_flags_esp8266}
- -D WLED_DISABLE_OTA
- -D WLED_DISABLE_ALEXA
- -D WLED_DISABLE_BLYNK
- -D WLED_DISABLE_CRONIXIE
- -D WLED_DISABLE_HUESYNC
- -D WLED_DISABLE_INFRARED
+build_unflags = ${common.build_unflags}
+build_flags = ${common.build_flags_esp8266}
+; *********************************************************************
+; *** Use custom settings from file user_config_override.h
+ -DUSE_CONFIG_OVERRIDE
+; *********************************************************************
+; -D WLED_DISABLE_OTA
+; -D WLED_DISABLE_ALEXA
+; -D WLED_DISABLE_BLYNK
+; -D WLED_DISABLE_CRONIXIE
+; -D WLED_DISABLE_HUESYNC
+; -D WLED_DISABLE_INFRARED
+; -D WLED_DISABLE_WEBSOCKETS
; PIN defines - uncomment and change, if needed:
; -D LEDPIN=2
; -D BTNPIN=0
@@ -30,11 +37,11 @@ build_flags = ${common.build_flags_esp8266}
; -D USE_WS2801
; -D USE_LPD8806
; PIN defines for 2 wire LEDs
-; -D CLKPIN=0
-; -D DATAPIN=2
+ -D CLKPIN=0
+ -D DATAPIN=2
; to drive analog LED strips (aka 5050), uncomment the following
; PWM pins 5,12,13,15 are used with Magic Home LED Controller (default)
-; -D WLED_USE_ANALOG_LEDS
+ -D WLED_USE_ANALOG_LEDS
; for the H801 controller (PINs 15,13,12,14 (W2 = 04)) uncomment this
; -D WLED_USE_H801
; for the BW-LT11 controller (PINs 12,4,14,5 ) uncomment this
diff --git a/readme.md b/readme.md
index c3a1f2a..a1112bd 100644
--- a/readme.md
+++ b/readme.md
@@ -6,6 +6,7 @@
+
diff --git a/wled00/user_config_override_sample.h b/wled00/user_config_override_sample.h
new file mode 100644
index 0000000..39a61d1
--- /dev/null
+++ b/wled00/user_config_override_sample.h
@@ -0,0 +1,550 @@
+// force the compiler to show a warning to confirm that this file is included
+#warning **** user_config_override.h: Using Settings from this File ****
+
+/* Uncomment and use your WIFI settings
+#define CLIENT_SSID "Your_SSID"
+#define CLIENT_PASS "Your_Password"
+*/
+
+// ESP8266-01 (blue) got too little storage space to work with all features of WLED. To use it, you must use ESP8266 Arduino Core v2.4.2 and the setting 512K(No SPIFFS).
+// ESP8266-01 (black) has 1MB flash and can thus fit the whole program. Use 1M(64K SPIFFS).
+// Uncomment some of the following lines to disable features to compile for ESP8266-01 (max flash size 434kB):
+// Alternatively, with platformio pass your chosen flags to your custom build target in platformio.ini.override
+
+// You are required to disable over-the-air updates:
+//#define WLED_DISABLE_OTA // saves 14kb
+
+// You need to choose some of these features to disable:
+//#define WLED_DISABLE_ALEXA // saves 11kb
+//#define WLED_DISABLE_BLYNK // saves 6kb
+//#define WLED_DISABLE_CRONIXIE // saves 3kb
+//#define WLED_DISABLE_HUESYNC // saves 4kb
+//#define WLED_DISABLE_INFRARED // there is no pin left for this on ESP8266-01, saves 12kb
+#ifndef WLED_DISABLE_MQTT
+ #define WLED_ENABLE_MQTT // saves 12kb
+#endif
+#define WLED_ENABLE_ADALIGHT // saves 500b only
+//#define WLED_ENABLE_DMX // uses 3.5kb (use LEDPIN other than 2)
+#define WLED_ENABLE_LOXONE // uses 1.2kb
+#ifndef WLED_DISABLE_WEBSOCKETS
+ #define WLED_ENABLE_WEBSOCKETS
+#endif
+
+#define WLED_DISABLE_FILESYSTEM // SPIFFS is not used by any WLED feature yet
+//#define WLED_ENABLE_FS_SERVING // Enable sending html file from SPIFFS before serving progmem version
+//#define WLED_ENABLE_FS_EDITOR // enable /edit page for editing SPIFFS content. Will also be disabled with OTA lock
+
+// to toggle usb serial debug (un)comment the following line
+//#define WLED_DEBUG
+
+// Library inclusions.
+#include
+#ifdef ESP8266
+ #include
+ #include
+ #include
+ extern "C"
+ {
+ #include
+ }
+#else // ESP32
+ #include
+ #include "esp_wifi.h"
+ #include
+ #include
+ #include "SPIFFS.h"
+#endif
+
+#include
+#include
+#include
+#include
+#ifndef WLED_DISABLE_OTA
+ #include
+#endif
+#include
+#include "src/dependencies/time/TimeLib.h"
+#include "src/dependencies/timezone/Timezone.h"
+
+#ifndef WLED_DISABLE_ALEXA
+ #define ESPALEXA_ASYNC
+ #define ESPALEXA_NO_SUBPAGE
+ #define ESPALEXA_MAXDEVICES 1
+ // #define ESPALEXA_DEBUG
+ #include "src/dependencies/espalexa/Espalexa.h"
+#endif
+#ifndef WLED_DISABLE_BLYNK
+ #include "src/dependencies/blynk/BlynkSimpleEsp.h"
+#endif
+
+#ifdef WLED_ENABLE_DMX
+ #include "src/dependencies/dmx/ESPDMX.h"
+#endif
+
+#include "src/dependencies/e131/ESPAsyncE131.h"
+#include "src/dependencies/async-mqtt-client/AsyncMqttClient.h"
+
+#define ARDUINOJSON_DECODE_UNICODE 0
+#include "src/dependencies/json/AsyncJson-v6.h"
+#include "src/dependencies/json/ArduinoJson-v6.h"
+
+#include "fcn_declare.h"
+#include "html_ui.h"
+#include "html_settings.h"
+#include "html_other.h"
+#include "FX.h"
+#include "ir_codes.h"
+#include "const.h"
+
+#ifndef CLIENT_SSID
+ #define CLIENT_SSID DEFAULT_CLIENT_SSID
+#endif
+
+#ifndef CLIENT_PASS
+ #define CLIENT_PASS ""
+#endif
+
+#if IR_PIN < 0
+ #ifndef WLED_DISABLE_INFRARED
+ #define WLED_DISABLE_INFRARED
+ #endif
+#endif
+
+#ifndef WLED_DISABLE_INFRARED
+ #include
+ #include
+ #include
+#endif
+
+// remove flicker because PWM signal of RGB channels can become out of phase (part of core as of Arduino core v2.7.0)
+//#if defined(WLED_USE_ANALOG_LEDS) && defined(ESP8266)
+// #include "src/dependencies/arduino/core_esp8266_waveform.h"
+//#endif
+
+// enable additional debug output
+#ifdef WLED_DEBUG
+ #ifndef ESP8266
+ #include
+ #endif
+ #define DEBUG_PRINT(x) Serial.print(x)
+ #define DEBUG_PRINTLN(x) Serial.println(x)
+ #define DEBUG_PRINTF(x) Serial.printf(x)
+#else
+ #define DEBUG_PRINT(x)
+ #define DEBUG_PRINTLN(x)
+ #define DEBUG_PRINTF(x)
+#endif
+
+// GLOBAL VARIABLES
+// both declared and defined in header (solution from http://www.keil.com/support/docs/1868.htm)
+//
+//e.g. byte test = 2 becomes WLED_GLOBAL byte test _INIT(2);
+// int arr[]{0,1,2} becomes WLED_GLOBAL int arr[] _INIT_N(({0,1,2}));
+
+#ifndef WLED_DEFINE_GLOBAL_VARS
+# define WLED_GLOBAL extern
+# define _INIT(x)
+# define _INIT_N(x)
+#else
+# define WLED_GLOBAL
+# define _INIT(x) = x
+
+//needed to ignore commas in array definitions
+#define UNPACK( ... ) __VA_ARGS__
+# define _INIT_N(x) UNPACK x
+#endif
+
+// Global Variable definitions
+WLED_GLOBAL char versionString[] _INIT("0.10.2");
+#define WLED_CODENAME "Fumikiri"
+
+// AP and OTA default passwords (for maximum security change them!)
+WLED_GLOBAL char apPass[65] _INIT(DEFAULT_AP_PASS);
+WLED_GLOBAL char otaPass[33] _INIT(DEFAULT_OTA_PASS);
+
+// Hardware CONFIG (only changeble HERE, not at runtime)
+// LED strip pin, button pin and IR pin changeable in NpbWrapper.h!
+
+WLED_GLOBAL byte auxDefaultState _INIT(0); // 0: input 1: high 2: low
+WLED_GLOBAL byte auxTriggeredState _INIT(0); // 0: input 1: high 2: low
+WLED_GLOBAL char ntpServerName[33] _INIT("0.wled.pool.ntp.org"); // NTP server to use
+
+// WiFi CONFIG (all these can be changed via web UI, no need to set them here)
+WLED_GLOBAL char clientSSID[33] _INIT(CLIENT_SSID);
+WLED_GLOBAL char clientPass[65] _INIT(CLIENT_PASS);
+WLED_GLOBAL char cmDNS[33] _INIT("x"); // mDNS address (placeholder, is replaced by wledXXXXXX.local)
+WLED_GLOBAL char apSSID[33] _INIT(""); // AP off by default (unless setup)
+WLED_GLOBAL byte apChannel _INIT(1); // 2.4GHz WiFi AP channel (1-13)
+WLED_GLOBAL byte apHide _INIT(0); // hidden AP SSID
+WLED_GLOBAL byte apBehavior _INIT(AP_BEHAVIOR_BOOT_NO_CONN); // access point opens when no connection after boot by default
+WLED_GLOBAL IPAddress staticIP _INIT_N((( 0, 0, 0, 0))); // static IP of ESP
+WLED_GLOBAL IPAddress staticGateway _INIT_N((( 0, 0, 0, 0))); // gateway (router) IP
+WLED_GLOBAL IPAddress staticSubnet _INIT_N(((255, 255, 255, 0))); // most common subnet in home networks
+WLED_GLOBAL bool noWifiSleep _INIT(false); // disabling modem sleep modes will increase heat output and power usage, but may help with connection issues
+
+// LED CONFIG
+WLED_GLOBAL uint16_t ledCount _INIT(30); // overcurrent prevented by ABL
+WLED_GLOBAL bool useRGBW _INIT(false); // SK6812 strips can contain an extra White channel
+WLED_GLOBAL bool turnOnAtBoot _INIT(true); // turn on LEDs at power-up
+WLED_GLOBAL byte bootPreset _INIT(0); // save preset to load after power-up
+
+WLED_GLOBAL byte col[] _INIT_N(({ 255, 160, 0, 0 })); // current RGB(W) primary color. col[] should be updated if you want to change the color.
+WLED_GLOBAL byte colSec[] _INIT_N(({ 0, 0, 0, 0 })); // current RGB(W) secondary color
+WLED_GLOBAL byte briS _INIT(128); // default brightness
+
+WLED_GLOBAL byte nightlightTargetBri _INIT(0); // brightness after nightlight is over
+WLED_GLOBAL byte nightlightDelayMins _INIT(60);
+WLED_GLOBAL byte nightlightMode _INIT(NL_MODE_FADE); // See const.h for available modes. Was nightlightFade
+WLED_GLOBAL bool fadeTransition _INIT(true); // enable crossfading color transition
+WLED_GLOBAL uint16_t transitionDelay _INIT(750); // default crossfade duration in ms
+
+WLED_GLOBAL bool skipFirstLed _INIT(false); // ignore first LED in strip (useful if you need the LED as signal repeater)
+WLED_GLOBAL byte briMultiplier _INIT(100); // % of brightness to set (to limit power, if you set it to 50 and set bri to 255, actual brightness will be 127)
+
+// User Interface CONFIG
+WLED_GLOBAL char serverDescription[33] _INIT("WLED"); // Name of module
+WLED_GLOBAL bool syncToggleReceive _INIT(false); // UIs which only have a single button for sync should toggle send+receive if this is true, only send otherwise
+
+// Sync CONFIG
+WLED_GLOBAL bool buttonEnabled _INIT(true);
+WLED_GLOBAL byte irEnabled _INIT(0); // Infrared receiver
+
+WLED_GLOBAL uint16_t udpPort _INIT(21324); // WLED notifier default port
+WLED_GLOBAL uint16_t udpPort2 _INIT(65506); // WLED notifier supplemental port
+WLED_GLOBAL uint16_t udpRgbPort _INIT(19446); // Hyperion port
+
+WLED_GLOBAL bool receiveNotificationBrightness _INIT(true); // apply brightness from incoming notifications
+WLED_GLOBAL bool receiveNotificationColor _INIT(true); // apply color
+WLED_GLOBAL bool receiveNotificationEffects _INIT(true); // apply effects setup
+WLED_GLOBAL bool notifyDirect _INIT(false); // send notification if change via UI or HTTP API
+WLED_GLOBAL bool notifyButton _INIT(false); // send if updated by button or infrared remote
+WLED_GLOBAL bool notifyAlexa _INIT(false); // send notification if updated via Alexa
+WLED_GLOBAL bool notifyMacro _INIT(false); // send notification for macro
+WLED_GLOBAL bool notifyHue _INIT(true); // send notification if Hue light changes
+WLED_GLOBAL bool notifyTwice _INIT(false); // notifications use UDP: enable if devices don't sync reliably
+
+WLED_GLOBAL bool alexaEnabled _INIT(false); // enable device discovery by Amazon Echo
+WLED_GLOBAL char alexaInvocationName[33] _INIT("Light"); // speech control name of device. Choose something voice-to-text can understand
+
+WLED_GLOBAL char blynkApiKey[36] _INIT(""); // Auth token for Blynk server. If empty, no connection will be made
+
+WLED_GLOBAL uint16_t realtimeTimeoutMs _INIT(2500); // ms timeout of realtime mode before returning to normal mode
+WLED_GLOBAL int arlsOffset _INIT(0); // realtime LED offset
+WLED_GLOBAL bool receiveDirect _INIT(true); // receive UDP realtime
+WLED_GLOBAL bool arlsDisableGammaCorrection _INIT(true); // activate if gamma correction is handled by the source
+WLED_GLOBAL bool arlsForceMaxBri _INIT(false); // enable to force max brightness if source has very dark colors that would be black
+
+#ifdef WLED_ENABLE_DMX
+WLED_GLOBAL DMXESPSerial dmx;
+WLED_GLOBAL uint16_t e131ProxyUniverse _INIT(0); // output this E1.31 (sACN) / ArtNet universe via MAX485 (0 = disabled)
+#endif
+WLED_GLOBAL uint16_t e131Universe _INIT(1); // settings for E1.31 (sACN) protocol (only DMX_MODE_MULTIPLE_* can span over consequtive universes)
+WLED_GLOBAL uint16_t e131Port _INIT(5568); // DMX in port. E1.31 default is 5568, Art-Net is 6454
+WLED_GLOBAL byte DMXMode _INIT(DMX_MODE_MULTIPLE_RGB); // DMX mode (s.a.)
+WLED_GLOBAL uint16_t DMXAddress _INIT(1); // DMX start address of fixture, a.k.a. first Channel [for E1.31 (sACN) protocol]
+WLED_GLOBAL byte DMXOldDimmer _INIT(0); // only update brightness on change
+WLED_GLOBAL byte e131LastSequenceNumber[E131_MAX_UNIVERSE_COUNT]; // to detect packet loss
+WLED_GLOBAL bool e131Multicast _INIT(false); // multicast or unicast
+WLED_GLOBAL bool e131SkipOutOfSequence _INIT(false); // freeze instead of flickering
+
+WLED_GLOBAL bool mqttEnabled _INIT(true);
+WLED_GLOBAL char mqttDeviceTopic[33] _INIT(""); // main MQTT topic (individual per device, default is wled/mac)
+WLED_GLOBAL char mqttGroupTopic[33] _INIT("wled/all"); // second MQTT topic (for example to group devices)
+WLED_GLOBAL char mqttServer[33] _INIT("your_broker.ip"); // both domains and IPs should work (no SSL)
+WLED_GLOBAL char mqttUser[41] _INIT("your_mqtt_user"); // optional: username for MQTT auth
+WLED_GLOBAL char mqttPass[41] _INIT("your_mqtt_pwd"); // optional: password for MQTT auth
+WLED_GLOBAL char mqttClientID[41] _INIT(""); // override the client ID
+WLED_GLOBAL uint16_t mqttPort _INIT(1883);
+
+WLED_GLOBAL bool huePollingEnabled _INIT(false); // poll hue bridge for light state
+WLED_GLOBAL uint16_t huePollIntervalMs _INIT(2500); // low values (< 1sec) may cause lag but offer quicker response
+WLED_GLOBAL char hueApiKey[47] _INIT("api"); // key token will be obtained from bridge
+WLED_GLOBAL byte huePollLightId _INIT(1); // ID of hue lamp to sync to. Find the ID in the hue app ("about" section)
+WLED_GLOBAL IPAddress hueIP _INIT((0, 0, 0, 0)); // IP address of the bridge
+WLED_GLOBAL bool hueApplyOnOff _INIT(true);
+WLED_GLOBAL bool hueApplyBri _INIT(true);
+WLED_GLOBAL bool hueApplyColor _INIT(true);
+
+// Time CONFIG
+WLED_GLOBAL bool ntpEnabled _INIT(true); // get internet time. Only required if you use clock overlays or time-activated macros
+WLED_GLOBAL bool useAMPM _INIT(false); // 12h/24h clock format
+WLED_GLOBAL byte currentTimezone _INIT(2); // Timezone ID. Refer to timezones array in wled10_ntp.ino
+WLED_GLOBAL int utcOffsetSecs _INIT(0); // Seconds to offset from UTC before timzone calculation
+
+WLED_GLOBAL byte overlayDefault _INIT(0); // 0: no overlay 1: analog clock 2: single-digit clocl 3: cronixie
+WLED_GLOBAL byte overlayMin _INIT(0), overlayMax _INIT(ledCount - 1); // boundaries of overlay mode
+
+WLED_GLOBAL byte analogClock12pixel _INIT(0); // The pixel in your strip where "midnight" would be
+WLED_GLOBAL bool analogClockSecondsTrail _INIT(false); // Display seconds as trail of LEDs instead of a single pixel
+WLED_GLOBAL bool analogClock5MinuteMarks _INIT(false); // Light pixels at every 5-minute position
+
+WLED_GLOBAL char cronixieDisplay[7] _INIT("HHMMSS"); // Cronixie Display mask. See wled13_cronixie.ino
+WLED_GLOBAL bool cronixieBacklight _INIT(true); // Allow digits to be back-illuminated
+
+WLED_GLOBAL bool countdownMode _INIT(false); // Clock will count down towards date
+WLED_GLOBAL byte countdownYear _INIT(20), countdownMonth _INIT(1); // Countdown target date, year is last two digits
+WLED_GLOBAL byte countdownDay _INIT(1) , countdownHour _INIT(0);
+WLED_GLOBAL byte countdownMin _INIT(0) , countdownSec _INIT(0);
+
+WLED_GLOBAL byte macroBoot _INIT(0); // macro loaded after startup
+WLED_GLOBAL byte macroNl _INIT(0); // after nightlight delay over
+WLED_GLOBAL byte macroCountdown _INIT(0);
+WLED_GLOBAL byte macroAlexaOn _INIT(0), macroAlexaOff _INIT(0);
+WLED_GLOBAL byte macroButton _INIT(0), macroLongPress _INIT(0), macroDoublePress _INIT(0);
+
+// Security CONFIG
+WLED_GLOBAL bool otaLock _INIT(false); // prevents OTA firmware updates without password. ALWAYS enable if system exposed to any public networks
+WLED_GLOBAL bool wifiLock _INIT(false); // prevents access to WiFi settings when OTA lock is enabled
+WLED_GLOBAL bool aOtaEnabled _INIT(false); // ArduinoOTA allows easy updates directly from the IDE. Careful, it does not auto-disable when OTA lock is on
+
+WLED_GLOBAL uint16_t userVar0 _INIT(0), userVar1 _INIT(0); //available for use in usermod
+
+#ifdef WLED_ENABLE_DMX
+ // dmx CONFIG
+ WLED_GLOBAL byte DMXChannels _INIT(7); // number of channels per fixture
+ WLED_GLOBAL byte DMXFixtureMap[15] _INIT_N(({ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }));
+ // assigns the different channels to different functions. See wled21_dmx.ino for more information.
+ WLED_GLOBAL uint16_t DMXGap _INIT(10); // gap between the fixtures. makes addressing easier because you don't have to memorize odd numbers when climbing up onto a rig.
+ WLED_GLOBAL uint16_t DMXStart _INIT(10); // start address of the first fixture
+ WLED_GLOBAL uint16_t DMXStartLED _INIT(0); // LED from which DMX fixtures start
+#endif
+
+// internal global variable declarations
+// wifi
+WLED_GLOBAL bool apActive _INIT(false);
+WLED_GLOBAL bool forceReconnect _INIT(false);
+WLED_GLOBAL uint32_t lastReconnectAttempt _INIT(0);
+WLED_GLOBAL bool interfacesInited _INIT(false);
+WLED_GLOBAL bool wasConnected _INIT(false);
+
+// color
+WLED_GLOBAL byte colOld[] _INIT_N(({ 0, 0, 0, 0 })); // color before transition
+WLED_GLOBAL byte colT[] _INIT_N(({ 0, 0, 0, 0 })); // color that is currently displayed on the LEDs
+WLED_GLOBAL byte colIT[] _INIT_N(({ 0, 0, 0, 0 })); // color that was last sent to LEDs
+WLED_GLOBAL byte colSecT[] _INIT_N(({ 0, 0, 0, 0 }));
+WLED_GLOBAL byte colSecOld[] _INIT_N(({ 0, 0, 0, 0 }));
+WLED_GLOBAL byte colSecIT[] _INIT_N(({ 0, 0, 0, 0 }));
+
+WLED_GLOBAL byte lastRandomIndex _INIT(0); // used to save last random color so the new one is not the same
+
+// transitions
+WLED_GLOBAL bool transitionActive _INIT(false);
+WLED_GLOBAL uint16_t transitionDelayDefault _INIT(transitionDelay);
+WLED_GLOBAL uint16_t transitionDelayTemp _INIT(transitionDelay);
+WLED_GLOBAL unsigned long transitionStartTime;
+WLED_GLOBAL float tperLast _INIT(0); // crossfade transition progress, 0.0f - 1.0f
+WLED_GLOBAL bool jsonTransitionOnce _INIT(false);
+
+// nightlight
+WLED_GLOBAL bool nightlightActive _INIT(false);
+WLED_GLOBAL bool nightlightActiveOld _INIT(false);
+WLED_GLOBAL uint32_t nightlightDelayMs _INIT(10);
+WLED_GLOBAL byte nightlightDelayMinsDefault _INIT(nightlightDelayMins);
+WLED_GLOBAL unsigned long nightlightStartTime;
+WLED_GLOBAL byte briNlT _INIT(0); // current nightlight brightness
+WLED_GLOBAL byte colNlT[] _INIT_N(({ 0, 0, 0, 0 })); // current nightlight color
+
+// brightness
+WLED_GLOBAL unsigned long lastOnTime _INIT(0);
+WLED_GLOBAL bool offMode _INIT(!turnOnAtBoot);
+WLED_GLOBAL byte bri _INIT(briS);
+WLED_GLOBAL byte briOld _INIT(0);
+WLED_GLOBAL byte briT _INIT(0);
+WLED_GLOBAL byte briIT _INIT(0);
+WLED_GLOBAL byte briLast _INIT(128); // brightness before turned off. Used for toggle function
+WLED_GLOBAL byte whiteLast _INIT(128); // white channel before turned off. Used for toggle function
+
+// button
+WLED_GLOBAL bool buttonPressedBefore _INIT(false);
+WLED_GLOBAL bool buttonLongPressed _INIT(false);
+WLED_GLOBAL unsigned long buttonPressedTime _INIT(0);
+WLED_GLOBAL unsigned long buttonWaitTime _INIT(0);
+
+// notifications
+WLED_GLOBAL bool notifyDirectDefault _INIT(notifyDirect);
+WLED_GLOBAL bool receiveNotifications _INIT(true);
+WLED_GLOBAL unsigned long notificationSentTime _INIT(0);
+WLED_GLOBAL byte notificationSentCallMode _INIT(NOTIFIER_CALL_MODE_INIT);
+WLED_GLOBAL bool notificationTwoRequired _INIT(false);
+
+// effects
+WLED_GLOBAL byte effectCurrent _INIT(0);
+WLED_GLOBAL byte effectSpeed _INIT(128);
+WLED_GLOBAL byte effectIntensity _INIT(128);
+WLED_GLOBAL byte effectPalette _INIT(0);
+
+// network
+WLED_GLOBAL bool udpConnected _INIT(false), udp2Connected _INIT(false), udpRgbConnected _INIT(false);
+
+// ui style
+WLED_GLOBAL bool showWelcomePage _INIT(false);
+
+// hue
+WLED_GLOBAL byte hueError _INIT(HUE_ERROR_INACTIVE);
+// WLED_GLOBAL uint16_t hueFailCount _INIT(0);
+WLED_GLOBAL float hueXLast _INIT(0), hueYLast _INIT(0);
+WLED_GLOBAL uint16_t hueHueLast _INIT(0), hueCtLast _INIT(0);
+WLED_GLOBAL byte hueSatLast _INIT(0), hueBriLast _INIT(0);
+WLED_GLOBAL unsigned long hueLastRequestSent _INIT(0);
+WLED_GLOBAL bool hueAuthRequired _INIT(false);
+WLED_GLOBAL bool hueReceived _INIT(false);
+WLED_GLOBAL bool hueStoreAllowed _INIT(false), hueNewKey _INIT(false);
+
+// overlays
+WLED_GLOBAL byte overlayCurrent _INIT(overlayDefault);
+WLED_GLOBAL byte overlaySpeed _INIT(200);
+WLED_GLOBAL unsigned long overlayRefreshMs _INIT(200);
+WLED_GLOBAL unsigned long overlayRefreshedTime;
+
+// cronixie
+WLED_GLOBAL byte dP[] _INIT_N(({ 0, 0, 0, 0, 0, 0 }));
+WLED_GLOBAL bool cronixieInit _INIT(false);
+
+// countdown
+WLED_GLOBAL unsigned long countdownTime _INIT(1514764800L);
+WLED_GLOBAL bool countdownOverTriggered _INIT(true);
+
+// timer
+WLED_GLOBAL byte lastTimerMinute _INIT(0);
+WLED_GLOBAL byte timerHours[] _INIT_N(({ 0, 0, 0, 0, 0, 0, 0, 0 }));
+WLED_GLOBAL byte timerMinutes[] _INIT_N(({ 0, 0, 0, 0, 0, 0, 0, 0 }));
+WLED_GLOBAL byte timerMacro[] _INIT_N(({ 0, 0, 0, 0, 0, 0, 0, 0 }));
+WLED_GLOBAL byte timerWeekday[] _INIT_N(({ 255, 255, 255, 255, 255, 255, 255, 255 })); // weekdays to activate on
+// bit pattern of arr elem: 0b11111111: sun,sat,fri,thu,wed,tue,mon,validity
+
+// blynk
+WLED_GLOBAL bool blynkEnabled _INIT(false);
+
+// preset cycling
+WLED_GLOBAL bool presetCyclingEnabled _INIT(false);
+WLED_GLOBAL byte presetCycleMin _INIT(1), presetCycleMax _INIT(5);
+WLED_GLOBAL uint16_t presetCycleTime _INIT(12);
+WLED_GLOBAL unsigned long presetCycledTime _INIT(0);
+WLED_GLOBAL byte presetCycCurr _INIT(presetCycleMin);
+WLED_GLOBAL bool presetApplyBri _INIT(true);
+WLED_GLOBAL bool saveCurrPresetCycConf _INIT(false);
+
+// realtime
+WLED_GLOBAL byte realtimeMode _INIT(REALTIME_MODE_INACTIVE);
+WLED_GLOBAL byte realtimeOverride _INIT(REALTIME_OVERRIDE_NONE);
+WLED_GLOBAL IPAddress realtimeIP _INIT((0, 0, 0, 0));
+WLED_GLOBAL unsigned long realtimeTimeout _INIT(0);
+WLED_GLOBAL uint8_t tpmPacketCount _INIT(0);
+WLED_GLOBAL uint16_t tpmPayloadFrameSize _INIT(0);
+
+// mqtt
+WLED_GLOBAL long lastMqttReconnectAttempt _INIT(0);
+WLED_GLOBAL long lastInterfaceUpdate _INIT(0);
+WLED_GLOBAL byte interfaceUpdateCallMode _INIT(NOTIFIER_CALL_MODE_INIT);
+WLED_GLOBAL char mqttStatusTopic[40] _INIT(""); // this must be global because of async handlers
+
+#if AUXPIN >= 0
+ // auxiliary debug pin
+ WLED_GLOBAL byte auxTime _INIT(0);
+ WLED_GLOBAL unsigned long auxStartTime _INIT(0);
+ WLED_GLOBAL bool auxActive _INIT(false, auxActiveBefore _INIT(false);
+#endif
+
+// alexa udp
+WLED_GLOBAL String escapedMac;
+#ifndef WLED_DISABLE_ALEXA
+ WLED_GLOBAL Espalexa espalexa;
+ WLED_GLOBAL EspalexaDevice* espalexaDevice;
+#endif
+
+// dns server
+WLED_GLOBAL DNSServer dnsServer;
+
+// network time
+WLED_GLOBAL bool ntpConnected _INIT(false);
+WLED_GLOBAL time_t localTime _INIT(0);
+WLED_GLOBAL unsigned long ntpLastSyncTime _INIT(999000000L);
+WLED_GLOBAL unsigned long ntpPacketSentTime _INIT(999000000L);
+WLED_GLOBAL IPAddress ntpServerIP;
+WLED_GLOBAL uint16_t ntpLocalPort _INIT(2390);
+WLED_GLOBAL uint16_t rolloverMillis _INIT(0);
+
+// Temp buffer
+WLED_GLOBAL char* obuf;
+WLED_GLOBAL uint16_t olen _INIT(0);
+
+// presets
+WLED_GLOBAL uint16_t savedPresets _INIT(0);
+WLED_GLOBAL int8_t currentPreset _INIT(-1);
+WLED_GLOBAL bool isPreset _INIT(false);
+
+WLED_GLOBAL byte errorFlag _INIT(0);
+
+WLED_GLOBAL String messageHead, messageSub;
+WLED_GLOBAL byte optionType;
+
+WLED_GLOBAL bool doReboot _INIT(false); // flag to initiate reboot from async handlers
+WLED_GLOBAL bool doPublishMqtt _INIT(false);
+
+// server library objects
+WLED_GLOBAL AsyncWebServer server _INIT_N(((80)));
+#ifdef WLED_ENABLE_WEBSOCKETS
+WLED_GLOBAL AsyncWebSocket ws _INIT_N((("/ws")));
+#endif
+WLED_GLOBAL AsyncClient* hueClient _INIT(NULL);
+WLED_GLOBAL AsyncMqttClient* mqtt _INIT(NULL);
+
+// udp interface objects
+WLED_GLOBAL WiFiUDP notifierUdp, rgbUdp, notifier2Udp;
+WLED_GLOBAL WiFiUDP ntpUdp;
+WLED_GLOBAL ESPAsyncE131 e131 _INIT_N(((handleE131Packet)));
+WLED_GLOBAL bool e131NewData _INIT(false);
+
+// led fx library object
+WLED_GLOBAL WS2812FX strip _INIT(WS2812FX());
+
+// Usermod manager
+WLED_GLOBAL UsermodManager usermods _INIT(UsermodManager());
+
+// Status LED
+#if STATUSLED && STATUSLED != LEDPIN
+ WLED_GLOBAL unsigned long ledStatusLastMillis _INIT(0);
+ WLED_GLOBAL unsigned short ledStatusType _INIT(0); // current status type - corresponds to number of blinks per second
+ WLED_GLOBAL bool ledStatusState _INIT(0); // the current LED state
+#endif
+
+// debug macro variable definitions
+#ifdef WLED_DEBUG
+ WLED_GLOBAL unsigned long debugTime _INIT(0);
+ WLED_GLOBAL int lastWifiState _INIT(3);
+ WLED_GLOBAL unsigned long wifiStateChangedTime _INIT(0);
+ WLED_GLOBAL int loops _INIT(0);
+#endif
+
+
+#define WLED_CONNECTED (WiFi.status() == WL_CONNECTED)
+#define WLED_WIFI_CONFIGURED (strlen(clientSSID) >= 1 && strcmp(clientSSID, DEFAULT_CLIENT_SSID) != 0)
+#define WLED_MQTT_CONNECTED (mqtt != nullptr && mqtt->connected())
+
+// append new c string to temp buffer efficiently
+bool oappend(const char* txt);
+// append new number to temp buffer efficiently
+bool oappendi(int i);
+
+class WLED {
+public:
+ WLED();
+ static WLED& instance()
+ {
+ static WLED instance;
+ return instance;
+ }
+
+ // boot starts here
+ void setup();
+
+ void loop();
+ void reset();
+
+ void beginStrip();
+ void handleConnection();
+ void initAP(bool resetAP = false);
+ void initConnection();
+ void initInterfaces();
+ void handleStatusLED();
+};
diff --git a/wled00/wled.h b/wled00/wled.h
index efd58eb..f266e8d 100644
--- a/wled00/wled.h
+++ b/wled00/wled.h
@@ -12,6 +12,7 @@
// ESP8266-01 (blue) got too little storage space to work with all features of WLED. To use it, you must use ESP8266 Arduino Core v2.4.2 and the setting 512K(No SPIFFS).
+#ifndef USE_CONFIG_OVERRIDE
// ESP8266-01 (black) has 1MB flash and can thus fit the whole program. Use 1M(64K SPIFFS).
// Uncomment some of the following lines to disable features to compile for ESP8266-01 (max flash size 434kB):
// Alternatively, with platformio pass your chosen flags to your custom build target in platformio.ini.override
@@ -559,4 +560,11 @@ public:
void initInterfaces();
void handleStatusLED();
};
+#endif // USE_CONFIG_OVERRIDE
+
+// User settings in file "user_config_override.h" added in gitignore so it will not be overwritten
+#ifdef USE_CONFIG_OVERRIDE
+ #include "user_config_override.h" // Configuration overrides
+#endif
+
#endif // WLED_H