Upgrade the MPU6050 usermod to provide configuration settings for
interrupt pin selection and calibration, a polled mode, and data
output for consumption by other usermods.
The MPU6050 library happens to choose the same defines as WLED, which
collide and result in nothing printing. Un- and re-define the macros
to work around this.
Add JSONBufferGuard, an RAII lock guard class for JSONBufferLock
analogous to std::lock_guard. This permits binding the guard to a scope,
such as an object life cycle or function body, guaranteeing that the
lock will be released when the scope exits.
Allows for "pixel perfect" liveview instead of diffused view, to better match what's shown at https://kno.wled.ge/features/effects/. This will make it easier to see what the LEDs are doing, although it may not be as accurate a representation for installations with diffused LEDs. Includes fallback to CSS gradient method for browsers that don't support canvas.
- CSS adjustments
- Removal of some html
- Correction of CORS error when using the file locally, it was unable to generate the images that are saved in WLED
- Among others that I don't remember now
- Correction in animation generation that was actually breaking
- Button to return to WLED if pxmagic.htm is accessed via url (http://), if accessed via external (file://) the button will not show
- Adjustments to CSS and some features
Since PXM will not open internally but on another page from the button, I decided to add the logo again if it's not a problem of course.. Just so I don't run out of information
commit 1dab26bcbc
Author: Christian Schwinne <dev.aircoookie@gmail.com>
Date: Thu Oct 19 13:29:46 2023 +0200
Update Discord invite links to point to guidelines channel
I added the possibility of using the tooltip on buttons (.btn) with the span inside the button;
Adjusted the tooltip css to center 100% in the middle
Some cleaning and correction of sele
Having the wrong pin would result in a server error (500). The more appropriate error code for that would be 401.
This also changes the page that asks for users to login from 200 to 401.
audioSyncPacket contains four "invisible" padding bytes added by the compiler. These need to be initialized to zero, as future versions of the protocol will make use of these fields.
Topic 1, 2
I made the change, took it off the website and put it in the Preset section under the +Preset, +Playlist buttons, it was in a good location.
Topic 3, 4
It reloads because it needs the updated information so that it can create the preset correctly with all the information generated from the selected image.
Topic 5
The change has already been made, it just hasn't gone up yet, it's default upload
Topic 6, 7
Fixed
Many bad quality analog mics are not centered properly at 1.6V, but stuck at 0V or stuck at 3.3V in silence. The bandpass filter removes DC offsets and improve signal quality.
* debug messages added to different initializers
* SPH0654::initialize() was having a wrong signature: uint8 instead of int8.
C++ can be a real bastard ;-)
* improves robustness of the Matrix effect, by dynamically adjusting the "reference color" used to identify "falling code" head pixels.
* a bit faster, as I've removed the need to scan all pixels a second time for "black screen" detection.
Its still not perfect, and the main loop could be simplified a lot by leveraging on the fact that all changes actually happen in the top row, and "falling" is actually just moving everything down by one pixel.
Update ES8388Source::initialize and ES7243::initialize method signatures to match I2SSource::initialize so that when initialize is called on a AudioSource pointer the child class's method is used.
Remove sync receive
Disallow 2D effects on non-2D segments
Optimisations
Sync clarification
AR palettes
Return of 2 audio simulations
Bugfix in sync #3344
- remove excessive segments
- ignore inactive segments if not syncing bounds
- send UDP/WS on segment change
- pop_back() when removing last segment
Add pairing support for ESP-NOW sync
Reduce string RAM footprint
UDP parse optimisation
Make WizMote work with sync.
ESP-NOW wireless sync POC.
- caveat: devices have to be on the same channel
- clashes with WizMote handling ATM
To make it better readable and prevent copy&paste errors, all needed flags can be referenced from the "esp32" buildenv:
${esp32.AR_build_flags}
${esp32.AR_lib_deps}
* remove "not supported" warning on -S2
* minor tweaking of beat detector
* optimized parameters for arduinoFFT
* fixed a few implicit "double" promotions
* minor UDP protocol optimizations
* small optimization for fft task create / suspend
* completely remove analogmic settings for -S3/-S2/-C3 where analog is not supported
changes were already tested extensively in the MM fork.
this is a band-aid fix for random crashes when switching between presets with multiple segments - crossfade disabled.
!! adding type initializers fixed it for me on -S3, however I still see (less frequent) crashes on esp32, due to heap corruption.
It took me hours to get a meaningful stackdump:
assert failed: heap_caps_free heap_caps.c:360 (heap != NULL && "free() target pointer is outside heap areas")
Backtrace: 0x40084ee1:0x3ffb2570 0x4008e341:0x3ffb2590 0x40094709:0x3ffb25b0 0x4008534a:0x3ffb26e0 0x40094739:0x3ffb2700 0x400e9037:0x3ffb2720 0x400e917c:0x3ffb2740 0x400eaeeb:0x3ffb2760 0x40117ec5:0x3ffb27c0 0x401184ea:0x3ffb2800 0x4013509d:0x3ffb2820
#0 0x40084ee1:0x3ffb2570 in panic_abort at /Users/ficeto/Desktop/ESP32/ESP32S2/esp-idf-public/components/esp_system/panic.c:402
#1 0x4008e341:0x3ffb2590 in esp_system_abort at /Users/ficeto/Desktop/ESP32/ESP32S2/esp-idf-public/components/esp_system/esp_system.c:128
#2 0x40094709:0x3ffb25b0 in __assert_func at /Users/ficeto/Desktop/ESP32/ESP32S2/esp-idf-public/components/newlib/assert.c:85
#3 0x4008534a:0x3ffb26e0 in heap_caps_free at /Users/ficeto/Desktop/ESP32/ESP32S2/esp-idf-public/components/heap/heap_caps.c:360
(inlined by) heap_caps_free at /Users/ficeto/Desktop/ESP32/ESP32S2/esp-idf-public/components/heap/heap_caps.c:345
#4 0x40094739:0x3ffb2700 in free at /Users/ficeto/Desktop/ESP32/ESP32S2/esp-idf-public/components/newlib/heap.c:39
#5 0x400e9037:0x3ffb2720 in Segment::deallocateData() at wled00/FX_fcn.cpp:189
#6 0x400e917c:0x3ffb2740 in Segment::resetIfRequired() at wled00/FX_fcn.cpp:206
(inlined by) Segment::resetIfRequired() at wled00/FX_fcn.cpp:203
#7 0x400eaeeb:0x3ffb2760 in WS2812FX::service() at wled00/FX_fcn.cpp:1216 (discriminator 2)
#8 0x40117ec5:0x3ffb27c0 in WLED::loop() at wled00/wled.cpp:115 (discriminator 3)
#9 0x401184ea:0x3ffb2800 in loop() at C:/src/wled00/wled00.ino:20
#10 0x4013509d:0x3ffb2820 in loopTask(void*) at C:/Users/user/.platformio/packages/framework-arduinoespressif32/cores/esp32/main.cpp:50
ELF file SHA256: 18c20b536f4c6ef4
bracket was on wrong position, resulting in this warning:
wled00/set.cpp:357:79: warning: value computed is not used [-Wunused-value]
strlcpy(mqttGroupTopic, request->arg(F("MG")).c_str(), MQTT_MAX_TOPIC_LEN)+1;
oappend() silently discards strings when the buffer is full, leading to strange effects like half-working UI pages.
The new debug message will help developers to understand what could be wrong.
- breaking change
- remove leading 0 checkmark
- add reverse scroll checkmark
- add vertical scroll if text fits into segment (intensity ==0 or ==255)
- rotated characters
- leading 0 check added to short texts (i.e. #DDMM0)
Fixes#3322
* Blurz and a few other effects would crash (or behave unexpectedly) for single pixel segments
* replaced a few "MAX" by "max", because MAX will evaluate its arguments twice so its very inefficient.
changes from 3.50 to 3.6.0:
* bugfixes
* removed "register" keyword
* some speedups
* explicit bool() and uint32_t() operators, see https://github.com/FastLED/FastLED/issues/819
FX.cpp: bugfix for "wled00/FX.cpp:4906:36:
error: cannot convert 'CRGB' to 'uint32_t' {aka 'unsigned int'} in initialization"
platform 5.3.0 = arduino-esp32 v2.0.6 + esp-idf v4.4.3
--> you will need new bootloader files for arduino-esp32 v2.0.6
--> coredumps are supported now, if you leave 64Kb of flash at the end of your partitions file (see example in wled_esp32_8MB.csv)
turns out that fastLED 3.6.0 has an explicit uint32_t operator that returns RGBA, however 3.5.0 does not have this and the conversion returned only the "red" component".
turns out that fastLED 3.6.0 has an explicit uint32_t operator that returns RGBA, however 3.5.0 does not have this and the conversion returned only the "red" component".
it seems that SEGMENT.blur() is the main bottleneck for many 2D effects.
This change optimizes performance of the function:
* avoid to re-write unchanged pixels
* early exit when blur_amount == 0 (=nothing to do)
* use _fast_ types where possible
I've seen up to 20% speedup with this change.
power estimation results from estimateCurrentAndLimitBri() were too low (example: estimated 1.3Amp, measured 1.6Amp). This change corrects the power calculation. Due to the changed behavior of getPixelColor, powerSum must be used as-is, not scaled down again by brightness.
minor optimizations that give up to 10% speedup in my tests
* use "fast" integer types (where possible)
* replaced _bri with _restaurationBri (no use of globals)
this optimization avoids to apply brightness two times .
NeoPixelBusLg has already applied global brightness at sPC. Due to internal working of the Lg bus, its sufficient to only post-apply scaling, and set the new (scaled) brightness for the next frame.
I still see strange crashes in setPixelColor/GetpixelColor, which ssem to come from race conditions between async_tcp (change presets) and looptask (strip.service).
To make the situation better, its important that any global pointers are reset to NULL immediately after free().
* Avoid uint16 underflow in width() and height(): stop > start is possible, and means "inactive segment".
Without these checks, it was possible that width() and height() produce VERY large values due to underflow.
due to `if (strip.isUpdating()) return;` reading the encoder did not happen in time if the strip was active - with high number of LEDs, this means "always updating". Similar observation that we had with the audioreactive usermod, and similar solution.
* adding an optional parameter to setBrightness(). ApplyPostAdjustments() will only be called if `immediate=true`. Only ABL will use immediate=true, to ensure electrical safety of equipment.
This allows some optimizations of performance, as ApplyPostAdjustments() is time consuming.
* busses.setBrightness(bri) --> applied to all future pixels (fast, lossless)
* busses.setBrightness(bri, true) --> applied directly to all previously set pixels (slower, lossy)
* Adding Pixel Magic Tool to WLED
* Revert "Adding Pixel Magic Tool to WLED"
This reverts commit b4f08fa8d5.
* Adding Pixel Magic Tool to WLED
* Corrections and performance improvements
* Remove IE compatibility tag
(saves a few bytes and IE10 is over 10 years old and unsupported)
Correct HTML language attribute
(Chrome would show a popup asking to translate from Portugese)
* Corrections and performance improvements
* Enable pxmagic by default
---------
Co-authored-by: Aircoookie <21045690+Aircoookie@users.noreply.github.com>
Co-authored-by: Christian Schwinne <cschwinne@gmail.com>
* Initial checkin for ESP-NOW remote feature
* cleanup irrelevant comment
* don't bring in espnow package includes when feature disabled
* Formatting and removing inaccurate call mode hardcoding
* Fork ESP Now code by platform (8266 v. esp32)
* compiled html update
* Disable ESP-NOW remote by default on ESP32 until tested
* Enable ESP-NOW remote for ESP32
* Rename ESP NOW define
---------
Co-authored-by: cschwinne <dev.aircoookie@gmail.com>
(saves a few bytes and IE10 is over 10 years old and unsupported)
Correct HTML language attribute
(Chrome would show a popup asking to translate from Portugese)
* allow user to control rotation speed (c3 slider)
* preserve accuracy by performing division _after_ multiplication: " (i * speed) / 32", instead of " i * (speed / 32)"
* proper rounding of "map" results, for better visual appearance
* avoid division by zero in map() function
* Buttons: Trigger when pressing if all configured presets are the same
* Add debounce for immediate rising-edge short press
---------
Co-authored-by: Aircoookie <21045690+Aircoookie@users.noreply.github.com>
* Changes for allowing Alexa to change light color to White when auto-calculating from RGB
* Update alexa.cpp
Indention
* Do not rely on global auto white override
(gets white mode from segment light capabilities)
* alexa.cpp: Removed unnecessary whitespaces
---------
Co-authored-by: Aircoookie <21045690+Aircoookie@users.noreply.github.com>
Fix repeat segment button remaining hidden
Fix third segment row (offset) alignment in 1D mode
Keep disabled sound simulation modes as comment for reference
New local var for 2D seg UI, improves code legibility
* fix DDP spec
* Adjust DDP type byte to latest spec
Allow receiving of RGBW DDP with either old or new bits per channel value
---------
Co-authored-by: Aircoookie <21045690+Aircoookie@users.noreply.github.com>
* PSRAM_Allocator was missing the "reallocate" method, which lead to undefined behaviour when dynamic JSON doc needed to grow/shrink
* Segment::setUpLeds() quickfix for length() == 0 (should not happen, but it did happen for me once)
* leds in PSRAM causes major slowdown on wrover boards - disabled.
* prevent string buffer overflows (stack corruption)
* avoid division by zero (program might crash)
* avoid log(0) which is undefined, too
* use faster math routines for float (logf, powf)
* use size_t instead of uint16_t -> prevents random behaviour (corruption) in case that JSON files get larger than 64Kbytes.
* use a constant for max large file space (was UINT16_MAX)
* reduced the scope of some functions and variables to "static" - avoids name clashes and may support better optimization by the compiler
fix for "Error: Invalid environment name 'codm-controller-0.6-rev2'. The name can contain alphanumeric, underscore, and hyphen characters (a-z, 0-9, -, _)"
* Improve indent
Improve indent, so its more allignend and correctly indented according to logic groups
* Spaces to tabs
---------
Co-authored-by: cschwinne <dev.aircoookie@gmail.com>
* Add UCS890x support.
* Fixes
* Update NeoPixelBus to 2.7.3 for UCS8904 support.
Update ESP8266 core to 4.1.0
* ESP8266 compile fixes.
- use PlatformIO framework and toolchain
- add compiler warning suppression
- remove IRAM_ATTR to fit in IRAM
* Replace NeoPixelBrightnessBus with NeoPixelBusLg
Resolves#3087
* Update to NPB 2.7.4
* Internal NPB color conversions.
* Fix errors due to merge with SPI Hz methods
Regenerate settings page HTML
---------
Co-authored-by: Christian Schwinne <dev.aircoookie@gmail.com>
* Soap, new 2D effect
* Fix Soap FX on matrices with edges < 8 LEDs
* Add palette support to Soap FX
---------
Co-authored-by: cschwinne <dev.aircoookie@gmail.com>
* - fix word clock for "viertel vor" and "viertel nach"
- adjust wording of parameters
* - revert changes for parameter names
* enclose JSON property strings in F() macro to reduce RAM usage.
* add parameter info for "norddeutsch" and "LedOffset"
art-net transmit was not sending out LEDs, but only transmitted headers repeatedly (thanks @troyhacks for noticing).
Actually such problems can be found by newer compilers, so i've added the warning option to [esp32_idf_V4].
wled00/udp.cpp: In function 'uint8_t realtimeBroadcast(uint8_t, IPAddress, uint16_t, uint8_t*, uint8_t, bool)':
wled00/udp.cpp:824:40: warning: declaration of 'byte buffer [12]' shadows a parameter [-Wshadow=compatible-local]
byte buffer[ART_NET_HEADER_SIZE];
^
wled00/udp.cpp:720:85: note: shadowed declaration is here
uint8_t realtimeBroadcast(uint8_t type, IPAddress client, uint16_t length, uint8_t *buffer, uint8_t bri, bool isRGBW) {
- fixed a few typos, trailing spaces and bad alignments
- added the previous 8266 platform packages as a comment, just in case
- [env:esp32dev_V4_qio80] is actually "dio" --> renamed to [env:esp32dev_V4_dio80]
- all esp32dev targets use the same ${esp32.platform} now (3.2.0 would not compile any more)
- corrected some broken references
- added `platform_package =` --> use default packages
- renamed env:esp32c3 to env:esp32c3dev to avoid confusion
- added lolin_s2_mini to CI builds
Like DDP, this allows WLED to address network systems using the Art-Net protocol.
Universe starts at zero, because that's the first universe in Art-Net.
Works with RGB. It's coded to also work with RGBW, but I couldn't find a great place to enable it without mucking with things I don't understand.
* xml.cpp: correct type for checkbox global led buffer" (was not shown correctly)
* fx.cpp: 2D floating blobs - correct swapped x/y coordinates (did not render correctly on non-square matrix)
One pixel segment handling.
- added 0D FX metadata (1 pixel effects)
- ignore palettes for White only segment
- ignore color for non-RGB & non-White segment (on/off)
Bugfix
- proper auto segment creation
- hide palettes for non RGB segments
- some tweaks for #2984
- force Solid for some FX (causing crash) on 1 pixel segment
UI Optimisations
- slider tooltips
- tiny bit smaller tooltips
- hide segment power if only one segment
- gap between sliders
* Support white addressable LED strips
* Various white handling tweaks
Allow RGB controls for white-only busses depending on AWM (makes palette-only FX work on non-RGB addressable busses)
Fixed RGB controls hidden if segment contained any non-RGB bus (even though there is also an RGB bus in that segment)
New Max auto white mode
Added hasCCT() bus method
Rename methods to be clearer
WS2811 White getPixelColor fix()
* Fix merge conflict (bus manager cpp)
* Refactor bus manager.
* Fix for net debug
* Fix 8266 compile
* Move bus static members to proper cpp
---------
Co-authored-by: cschwinne <dev.aircoookie@gmail.com>
* pulser bugfix: " % cols" was missing so the effect would simply run out of visible range
* float math: use optimized functions: sqrtf, fabsf
* two more comments where code could be optimized, but I'm not sure what is thecorrect solution
- Ripple (2D & no Bg)
- Glitter (no Bg)
- Sparkle (no Bg)
- Scan (no Bg)
- Two dots (no Bg)
- ICU (no Bg)
- Lightning (no Bg)
- Halloween eyes (no Bg)
- Spots (no Bg)
- Bouncing Balls (no BG)
- Popcorn (no Bg)
- Starburst (no Bg)
- Drip (no Bg)
- Whitespace cleanup
- draw_circle()
"no Bg" will allow overlapping segments if checked.
* added missing pinMode(.., INPUT) on esp32
* do not try reading from pin = -1 (ESP32-S2 shows very allergic reactions to this)
* Info page - show "n/a" when pin = -1
* readme: esp32 default pin = 35
Fixes build error on linux:
wled00/usermods_list.cpp:15:54: fatal error: ../usermods/battery/usermod_v2_battery.h: No such file or directory
compilation terminated.
.. overlooked this one when reviewing the PR.
@blazoncek, @ctjet : three questions on the new code remain, because its not clear to me if its correct. Please check.
Retrieving the config in `readFromConfig()` results in defaults being set to both `hourMarksEnabled` (`false`) and `hourMarkColor` (`#0000FF`) due to differences in capitalization compared to how they're saved in `addToConfig()`
I was wondering why sometimes the new MCUs still work better in Arduino IDE, so compared our build flags to what is used in Arduino IDE:
-S2 always has -DARDUINO_USB_MODE=0
-C3 always has -DARDUINO_USB_MODE=1
-S3 supports all possible modes
- switch off debug messages to USBCDC, if WLED_DEBUG is not set
- ensure that analogread pins are valid - invalid pins cause lots of error messages and finally lead to watchdog reset on some MCUs.
* make SparlFunDMX driver more robust:
- made variables static (so they don't overlap with other global variables)
- made sure all valriables are properly initialized
- do not apply pinMode and digitalRead to invalid pins (as this creates problems on -S3, -C3 and -S2)
* disable DMX sending code (unneeded code that may case troubles)
unfortunately this breaks build for -C3 and -S3
/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/riscv/include/riscv/semihosting.h:75:19: warning: ignoring asm-specifier for non-static local variable 'a0'
register long a0 asm ("a0") = id;
^~
.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/riscv/include/riscv/semihosting.h:76:19: warning: ignoring asm-specifier for non-static local variable 'a1'
register long a1 asm ("a1") = (long) data;
pinmanager ran out out array bounds on -S2 and -S3, as these MCUs have more than 40 GPIO. As consequence, memory was overwriten, and pins > 39 were reported as "allocated" but not "owned".
Thisfixes the problem, by extending internal arrays so that up to 50 pins can be managed.
* audioreactive driver update
- Better handling of PDM and I2S Line-in
- Bugfixes for ES7243 (allocateMultiplePins)
- More error messages for ES7243
- sample scaling (needed for sources that use full scale of samples)
* audiorective update
* align SR_DEBUG with WLED_DEBUG
* optional bandpass filter (needed for PDM mics)
* sample scaling for PDM and Line-In
* small improvements for analog input
* bugfixes and small performance improvements
* code for FFT task refactored, for better readablity. Introduces separate functions for filtering and post-processing
* small improvement for beat detection
* default mic settings can be configured at compile time
* correct mic type if MCU does not support PDM or ADC
* hide analog PIN config if not supported by MCU
* audioreactive updates
- minor updates to source code (see discussion in PR #2907)
- usermod readme improvements
* small readme update
* one think I overlooked
* ok, another edit. Now its final. Hopefully.
* small upps
wrong parameter order in debug message.
* Do not require commas between ! in fxdata
* Updating fxdata: Halfway through the FX list
* fxdata flags and optimizations
* Revert optional commas after !
* Grouping um settings, add pre and post Info, update SR & 4LD settings
Settings_um.htm:
- modify addField (grouping)
- addInfo (pre and post texts)
Add preInfo to audio reactive and 4ld usermod
Extra:
platformio: wemos_shield: add audio reactive usermod and update to alt display
* um settings: cpp: lowercase, js: initcap
* um settings: txt only pre, txt2 only post and initCap as function
* Fix rotary encoder info string
Co-authored-by: Blaž Kristan <blaz@kristan-sp.si>
* feat(json): add wifi scanning
Adds wifi scanning to the JSON api at `/json/networks`. The initial
request will trigger a scan, subsequent requests will scan or return the
results depending on the state of the `WiFiScan`.
Add a `Scan` button next to the client ssid input, on click, scan for
networks, and change the input to a select with the found ssids.
Fixes: #1964
* Added option to go back to manual SSID input
Co-authored-by: cschwinne <dev.aircoookie@gmail.com>
* feat(wifi): add compile time configurtation
Add `WLED_AP_SSID` and `WLED_AP_PASS` defines to allow configuring the
SoftAP SSID and Password at compile time. Default to existing values.
Add `WLED_AP_SSID_UNIQUE` flag to append the device portion of the mac
address to `WLED_AP_SSID`.
Exampleof all flags (note the quoting to preserve
"stringification"):
```
build_flags =
-D WLED_AP_SSID='"MyAP"'
-D WLED_AP_PASS='"MyPassword"'
-D WLED_AP_SSID_UNIQUE
```
* Removed two error defines
Co-authored-by: Christian Schwinne <cschwinne@gmail.com>
* Implement optional hour marks
Time offset did not work
* removed undefined error int in hexstringtocolor
* revert cosmetic changes
* minor cosmetic changes
Co-authored-by: mdegraaf <mdegraaf@proxsys.nl>
* Effect ID's back to 0.13 numbering
Needed for sync between versions and allow 0.13 presets to work in 0.14
* Effect ID's back to 0.13 numbering (part2)
* Add network debug printer
* hide settings for disabled features
If not enabled at compile time, this change hides "Sync interfaces" settings for Alexa, MQTT, Blynk, HueSync.
The html sections are just hidden by a <div> with style display:none.
* Update Animated Staircas for 0.14
* Faster strip updates.
* Add ESP32 variant display in update page.
* Net debug optimizations
Fix ESP8266 (unaligned progmem flash string reads)
Do not send an extra package for \n in println
Only resolve IP/hostname once
* Compile time option for PIR sensor off timer
* Fix Gitpod compiling (#2875)
* Install Platformio not in Gitpod Image
* Install platformio at runtime
remove outdated extensions
* Bugfix for color transitioning.
Return palette option for Candle.
Fix for "* Color..." palette hiding.
Comment out debug output.
* Optimization & bugfix for net debug.
- Inherited from Print class.
- Added UI option to disable net debug output.
* Reduce fxdata size by about 200 bytes
Removed redundant commas before semicolon delimiter (`,;` -> `;`)
No need to transmit `@` in /json/fxdata
* NetworkDebugPrinter packet optimization.
* Revert NetworkDebugPrinter changes.
* Remove flush() in bus manager.
* Optimizations.
Co-authored-by: Shaheen Gandhi <shaheen@fb.com>
Co-authored-by: Blaz Kristan <blaz@kristan-sp.si>
Co-authored-by: cschwinne <dev.aircoookie@gmail.com>
Co-authored-by: Jason2866 <24528715+Jason2866@users.noreply.github.com>
* Automatically set PC Mode if unset
based on the UserAgent
* slight reduction
Reduce flash usage a bit.
Co-authored-by: Blaž Kristan <blaz@kristan-sp.si>
* add 9 further alexa devices for calling presets 1-9
* use preset names from WLED for Alexa preset device names instead of hardcoded names
* update readme and version
* call alexaInit() at end of savePreset() to keep Alexa in sync with the preset IDs and names
* This reverts commit f8db06c7c5.
* change order to configured Alexa WLED name first, preset names afterwards
* fix status of devices when shown within Alexa, i.e. switching one preset on switches others off (except for alexaInvocationName)
* re-add getPresetName() after merge with master
* restore original readme for pull request
* restore original platformio.ini for pull request
* Logic simplification
* Pass string by reference
* Added number of presets check
* fix alexaInit() in case of alexaNumPresets==0
Co-authored-by: Christian Schwinne <dev.aircoookie@gmail.com>
* Create usermod_word_clock_matrix.h
Tried using the old usermod on the new build, found out a lot has changed since then. My best attempt to update it. Still needs some help, but it is working. I would like to preconfigure some of the default settings. I am also having an issue with Error 12: Preset Not Found
* Update readme.md
* BH1750 upgrades
Moved the definitions into the main usermods_list.cpp instead of having a section to copy across.
Added Home Assistant Discovery topic for light sensor. This is toggleable from the usermod menu.
* Configure pin, other enhancements, readme
Implemented pin manager
Made pins configurable at runtime
Improved info screen outputs
Added F() around strings
Updated readme
* Resolve conflict
* Merge branch 'main'
* Missing comma
Co-authored-by: Christian Schwinne <dev.aircoookie@gmail.com>
Co-authored-by: Christian Schwinne <cschwinne@gmail.com>
* Add ESP32_DATA_IDLE_HIGH to enable data pin to go HIGH when relay is off
* forgot to remove Serial.print for ESP32_DATA_IDLE_HIGH
* forgot another ifdef preventing compilation on non-esp32 boards
* Extra checks that the bus is actually an RMT bus
Could still blow on new ESP32 variants, but now in a mergable state.
Co-authored-by: Christian Schwinne <cschwinne@gmail.com>
* Starting on Ping Pong Clock Usermod, still having to check the led indices and test the stuff out of it
* Adding some attributes to be configured, Added platformio_override
* Fixed LED Numbering, Changed Color to RGB to Work with Settings
* Removing LED Positions from Config
* Some documenting
* Removed example comments to make ping pong clock mod more readable
Co-authored-by: Schmailzl, Sebastian <sebastian.schmailzl@wk-it.com>
Co-authored-by: Christian Schwinne <dev.aircoookie@gmail.com>
Co-authored-by: Christian Schwinne <cschwinne@gmail.com>
* implement analog clock as a usermod
* fix some bugs, use toki for time measurement, implement fading seconds
* added timezone handling to analog clock
* fixed looping second pointer, lower refresh rate
* removed mqtt debug code
* implement seconds effect choice
* adapt to 0_14 branch
Co-authored-by: Christian Schwinne <dev.aircoookie@gmail.com>
* Release of WLED v0.13.3
* Fixed a type in the file name (#2781)
* Fixed the dependency (#2782)
* Usermod Wordclock update to use an alternatve wiring pattern (#2757)
* Update
* update readme file
* readme update
* Update readme.md
* Update readme.md
* Update readme.md
* Update readme.md
* Update platformio.ini
* Add number of UDP retries
Add a configurable number of retries to the UDP WLED sync function.
* Add migration from old eeprom settings
* Revert some accidental carry overs
* Correct issues found in pull request
Change default number of retries
Fix migration from old settings
* Make the minimum number of retries 0
* Import notify twice setting
Co-authored-by: cschwinne <dev.aircoookie@gmail.com>
Co-authored-by: Soren Singh Dary <67230851+sorensd@users.noreply.github.com>
Co-authored-by: Patrick <40436536+paeppi88@users.noreply.github.com>
it's possible that volume samples become negative. In this scenario, our simple noise gate does stupid things, and it looks like "effects temporarily lost the sound".
This fix improves the situation, and makes sure that volume samples are always >= 0.
This fixes a "division by zero" in WLED_DEBUG code.
LittleFS init seems to take some time, so we can arrive at "Loops/sec" with 0 loops executed --> crash.
16kHz might be a good compromise on small MCU's:
- GEQ will show frequencies up to ~6Khz
- FFT process may use up to 32millis (-> 100% CPU load). Try to stay below <60% so FreeRTOS can schedule all tasks properly.
- more CPU time is left for other WLED, so it maintains LED FPS and stays responsive on web UI.
Only run FFT when the result will be used.
Please note that this also means that `FFTTime` shown in Info is only meaningful when there is sound input and not silence.
--> To get exact FFT times, the optimization can be disabled by compiling with `-D SR_DEBUG`
I2S microphones were not working any more in with the newest framework - only delivers silence.
Ther reason is stupid bug in espressif I2S "compatibility" driver: RIGHT and LEFT channel are swapped, so when only asking for LEFT, we get silence from RIGHT.
Workaround: simply change LEFT to RIGHT, until the problem is fixed in ESP-IDF --> Fix tested on "classic ESP32", but still need to check behavior on -S3.
Code compiles also on -S3, -S2, and -C3.
smaller changes:
- a few changes to use new APIs (MCLK, rouing and sample resolution)
- a few additional debug messages
- put correct value into _pinConfig.mck_io_num
- adding USB-OTG to reserved GPIO
- no read-only GPI
- if PSRAM found, add pins for "octal" PSRAM to unusable list (octal PSRAM seems to common on S3)
- ESP32: 37 and 38 are read-only
Fixed no new 2D segments creatable in UI
Fixed brightness not applied if `"on":true` present in the same JSON api call
Fixed CJK text upside down in namelabel (rotate to nicer direction only if no CJK characters)
Gamma correction color enabled by default
Encapsulated all parts with #ifdef that will not compile on newer ESP32 variants.
It's still a long way to go before we have a working version on -S3 and -C3, bus this should help to get us started.
From MoonModule/WLED repo.
- the connected() method only get called once a Wifi STA connection is established. UDP Sound Sync should also work when sender is in AP Mode.
- added a few comments that should help to understand the code structure.
- Info Page: add a small horizontal line below usermod specific part. Improves readability.
- updated 2D mapping mode of some 1D soundreactive effects
- alllow some effects to fade slowly, even slower that possible with SEGMENT.fade_out(). Looks nice.
not sure why - most effects only fade when using SEGMENT.fade_out(), while some need SEGMENT.fadeToBlackBy().
- Un-F() most segment JSON keys, decreases JSON doc usage by 47 B (increases static RAM usage by 32 B),
makes `extractModeDefaults` work without strstr_P
- Removed String from serializeModeData and serializeModeNames
- Set 0.14 version name "Hoshi"
- save 1K of RAM by optimizing out
fftBin[].
- moved several copies of the peak reset code into a single function
- moved peak detection out of getSample().
- call peak detection function as last step of FFTcode. More optimal, and we can be sure that fresh FFT result are available.
Peak detection/reset are now called from both tasks, so I had to move some peak-related vars out of AudioReactive class and make them global (static).
also when user wants less than 16 bands.
Previously when users selected fewer bands (like 4 instead of 16), only the lowest freq channels were displayed.
- put variables with same context next to each other.
- removed a few vars that are not needed any more.
- replaced "16" by a more descriptive constant
... found that stupid commit messages get more attention ;-)
- use 22050 Hz for sampling, as it is a standard frequency. I think this is the best choise.
- redesigned the GEQ channels (fftResult[]) for 22Khz, based on channels found on old HiFi equalizer equipment. 1Kzh is now at the center; Bass/Trebble channels are using 1/4 on left/right side respectively - similar to real equalizers. Looks nice :-)
- adjusted effects that use FFT_MajorPeak so that the maximum frequency is supported.
- new feature: "Input Level" (info page) can be used as global "GEQ gain" - only when AGC is ON (was already possible when AGC=off)
- some parameter tweaking in FFT function
- hidden feature: FFT decay is slower when setting a high "dynamics Limiter Fall time" (steps: <1000, <2000, <3000, >3000)
- FFT_MajorPeak default 1.0f (as log(0.0) is invalid)
- FX.cppp: ensure that fftResult[] is always used inside array bounds
- removed broken FFTResult "squelch" feature. It was completely broken, and caused flashes in GEQ.
- added Frequency scaling options: linear and logarithmic
- fixed a few numerical accidents in FX.cpp (bouncing_balls, ripplepeak, freqmap, gravfreq, waterfall)
- On/Off controls the complete feature
- Rise Time and Fall Time are the minimum times (in milliseconds) for "volume" to go from 0% to 80% and back.
- when "On" we also use some filtering to smooth FFTResults[]. Rise and Fall Times do not affect Frequency reactive effects otherwise.
- fade_out() appears to finally do something meaning. Old fade_out values were too high. Adjusted so effects in 1D look similar "classic" SR WLED
- frequency reactive effects: max FFT frequency of 5120 Hz is hard-coded in most effects. Updated ranges to 10240 Hz
* Header checking for sound sync receiver: removed wrong "!"
* make sure all member vars have initial values
* some robustness improvements in case of receiving bad UDP data.
improved ADCsample processing, including replacement of "rogue" samples from other channels (this happens at least once in 5 seconds !!).
It compiles, don't ship it yet - needs more testing.
- smoothing FFTResult (don't have a matrix to test)
- UDP sound sync improvements
- some bugfixes from SR WLED
- button.cpp: avoid starvation: strip.isUpdating() can be true for a long time.
work in progress - still needs testing!!
-new methods: getType(), isInitailized(), postProcessSample()
- allow users to compile for RIGHT audio channel (-D I2S_USE_RIGHT_CHANNEL)
- better handling in case audio input driver failed to initialize
- removed some unneeded code and unneeded parameters
UDP audio sync: introduced new header version, because the new struct (without myvals[]) is not compatible with the previous struct. Also optimized structure size.
UDP audio sync: sender decides is AGC or non-AGC samples are transmitted.
getsamples: move volumeSmth/volumeRaw code out of AGC core function.
- Remove CRGB* leds from utility functions
- GameOfLife: fill_solid for prevLeds to for loop
- Remove if !fftResult
- Funky Plank: toggle src and dst
- Comment drawLine as not used
- Duplicate FadeToBlack, call one FadeToBlackOld
- add addPixelColor overloads
- remove setPixels function
- sPC/gPC move leds check to beginning
- refactor wu_pixel work without leds
- remove leds out of effects and replace by sPC/gPC/aPC/nullptr
- workaround %=
- refactor game of life (but need to check patterns / history, see SR)
- refactor fill_circle to work without leds
- remove leds out of SEGMENT.data (remove if no other use of data)
- use strip.leds
- refactor XY to make segment relative to the whole matrix
- use RGBW32
- in case of 1D also use XY in leds[]: XY(i%width, i/width)]
- add ps_malloc
- leds array from uint32_t to CRGB for fastled compatibility
- reading and writing leds from strip to segment sPC/gPC so it has logical instead of physical indexes so it can be used in effects
- change mode_2DBlackHole as showcase how it can both work with leds or with sPC/gPC
Implemented PinManager and rerun setup of usermod after updating pins/
Registered in const.h and pin_manager.h I tried to follow the existing formatting/numbering in these files.
Wrapped any strings I could in F()
Added public variables to the BME280 usermod based on those in the Temperature usermod. Only complication is that this usermod utilises different function calls depending on whether user defines celsius or not. I have handled this for the temperature, but the Dew Point and Heat Index are relative to the temperature.
I've also addressed some areas where I'd previously assumed Celsius for reporting purposes as my test case is using Farenheit.
I added a Usermod interface for key settings. I used a PinArray for the SDA/SCL pins, but you can't name these individually.
I have also made a display to show the temperature/humidity values in the web interface's Info screen.
I had to change the definition of those items in order to allow these new functions to work. I have not noticed any negative side effects to this change.
At the moment, I've not figured out how to make Celsius/Farenheit toggleable due to the way the #define setup works.
Finally, I have added a routine to publish MQTT Discovery Topics for Home Assistant (toggleable in the Usermod screen).
I've been testing this on the only suitable device I have for a few months and haven't noticed any problems.
gain =1 does not make much senses, at it means "0.0825"; 40 internally translates to "1". 60 seems to be a good start.
- Don't use ADC analog microphone as default, to avoid well-known conflicts with other stuff hooked up onto ADC1,
- re-enabled a forgotten delay (overlooked that in my last commit)
- same fix as in SR-WLED upstream
- if strip.isupdating() is true for more than 12ms, run audio filter loop regardlessly. The userloop is very fast, so I'm expect no bad side-effects from this.
- add to segment: mapping 1D2D and Sound Simulation (WIP!)
- Add sound simulation WeWillRockYou
- All audio effects use segment soundSim
- Redefine SEGLEN: strip.getMappingLength (depending on mapping12)
- make setPixelColor aware of mapping12
- change arduinoFFT to float (custom)
- update audioreactive to use float
- update effects to use float
- info slider (usermod)
- hide Peek in 2D
- minor bugfixes
Added:
- introduced addEffect() and setupEffectData()
- conditional compile for audio effects
- introduced getModeData() and getModeDataSrc() instead of public var
- changed _modeData[] to private non-static
Fixes:
- DMTYPE use
- add reboot info to DMTYPE
- transpose & reverse with mirroring
Use the ESP watchdog to detect hanging ESP and reset the firmware.
Can be disable by defining WLED_WATCHDOG_TIMOUT 0
Default timeout is 3 seconds on ESP32 and 8 seconds on ESP2688
* added SparkFunDMX library dependencies
* changed variable names to avoid conflicts with SparkFunDMX library
* board version checks
* minor changes to DMX
* fix brightness when no shutter DMX channel is set
* fix compile issue on newer ESP32 variants
* Update wizlights.h
adds new features and options for wizlights usermod
* Update wizlights.h
Change how IPs are numbered.
Non-programmers incorrectly start counting at 1
* Update wizlights.h
updated default cold white enhanced white setting to a lower value.
* Update wizlights.h
added logic for connection check before UDP sending.
Seems more important for ESP32
* Update readme.md
handleImprovPacket() unconditionally gobbles serial data which a problem
if we want another feature to consume it. This patch uses the same guard
as the existing call in `handleSerial()`.
Co-authored-by: Thomas Fubar <FUB4R@users.noreply.github.com>
* added first version (work in progress)
* added some sensors to publish
* typo
* added dependency
* mqtt si7021_* names + don't retain
* timer to 60 s
* some changes to HA auto discovery
* added config entries (no function yet)
* renaming
* made configs work
* added getId()
* refactoring + wrong mqtt topics fixed
* retain HA auto discovery
* do not spam serial console on each sensor update
* added readme
* add update interval info
Co-authored-by: Christian Schwinne <dev.aircoookie@gmail.com>
* - implement V2 Usermod to handle wordclocks with 11x10 pixels and 4 additional dots for the minutes
* - fix wording issue for "six"
-
* - add some more comments
* - fix issue with "zwölf"
* Added option to set the name of the module at runtime.
* added example how to set number of LEDs at runtime
* Example to enable/set IR remote type at runtime
* Clarification on how to use platformio_overrides
* Example for setting abl milliamp limit at runtime
* Corrected example set LED count
* Dynamic hiding of unused color controls in UI
(e.g. a PWM white bus with no auto white mode will not display the color wheel or palette list)
* Store segment capabilities
Don't use palettes if no RGB supported
Make it safe to update busses using `/json/cfg`
mainseg is not highlighted by default, but can be enabled by CSS only
Simplify some CSS (new segment box, segment brightness slider)
Started labeling CSS classes
* IR rewrite.
- added CCT (WW/CW) support
- support for applying change to main segment or all selected segments
* Remove extra setValuesFromFirstSelectedSeg()
Co-authored-by: cschwinne <dev.aircoookie@gmail.com>
* Added: CSS hover effect on buttons within modal dialogs, e.g. Info,
Nodes
* Update index.css
Co-authored-by: Tom D'Roza <Tom.D'Roza>
Co-authored-by: Christian Schwinne <cschwinne@gmail.com>
* define as float (not double)
* Avoid #define of 1 or 2 char symbols
Having this file define 'A' and 'C' pollutes
the global namespace, and causes conflicts
with other libraries that also pollute the
global namespace with short #defines.
It's easier to fix this header.
* unused variable warning
* Binary Websockets for Peek
* No IRAM_ATTR here
* Use builtin LittleFS for all ESP32 builds
* Attempt LittleFS compilation fix
* Use tasmota zip for all ESP32 builds
* Revert to Arduino Core 1 for the time being
- optimized setPixelSegment()
- moved extractModeName() to util.cpp
- optimized extractModeName()
- removed SR extensions from /json/effects endpoint (compatibility estabished)
Adds serial functionality
Can now change baud rate during runtime to be faster
Retrieve LED strip data as JSON blob
Retrieve LED strip data as BYTES (fast!)
* Overridable color order
- Use `ColorOrderMap` to hold optional color order overrides for ranges
of LEDs.
- Serialization of config to/from filesystem is complete.
- Back-end configuration is complete.
- TODO: front-end changes to the LED settings page.
* Add Color order override settings
- Adds color order override section to settings page.
* PR Feedback
- Limit max number of color order overrides to 5 on ESP8266
- Only append color overrides if they were provided in the POST of LED
settings.
* Use arduino-esp32 2.0.2 for ESP32-S2
LittleFS is merged into it.
* Fix filesystem error for ESP32-S2
Use platform of tasmota until upstream released it and
use board_build.flash_mode = qio
* Fix empty disk usage
* Add esp32s2_saola to default_envs
* Remove lorol LITTLEFS for esp32dev, too
* Revert "Remove lorol LITTLEFS for esp32dev, too"
This reverts commit 3586d5eef7.
- Use `ColorOrderMap` to hold optional color order overrides for ranges
of LEDs.
- Serialization of config to/from filesystem is complete.
- Back-end configuration is complete.
- TODO: front-end changes to the LED settings page.
* Date controlled timed presets.
* C/P fix for sunset.
* Fixed % escape character
* Date range support
* Date logic fix
Co-authored-by: cschwinne <dev.aircoookie@gmail.com>
Line 526: "now - lastRedraw" equates to a negative number and forces the screen into sleep mode
Line 646, 660: if the array size isn't at least the length of the longest name of an effect or palette, then it will not fully print. "Fireworks Starburst" is the longest one at 19 characters. this it kinda a bandaid fix because a longer name may come in the future.
* UM QuinLED-An-Penta: First version
* UM QuinLED-An-Penta: Made OLED seconds a setting; small improvements
* UM QuinLED-An-Penta: Fixed unique ID
* Merge branch 'master' of https://github.com/Aircoookie/WLED
* UM QuinLED-An-Penta: Fixed config loading
* UM QuinLED-An-Penta: Replaced ledcRead() with calculating the percentage
* UM QuinLED-An-Penta: Fixed temp sensor readings
* UM QuinLED-An-Penta: Removing OLED bus clk setting
* UM QuinLED-An-Penta: ETH support, lots of OLED improvements
* UM quinled-an-penta: v1r1 adjustments
color_blend() function only generates 256 colors from the palette before repeating. Improved the function to use either 256 max or the segment length if shorter.
settings.js for pasting data into HTML.
Reduced simple & classic flash footprint.
Split iro.js and rangetouch.js into separate requests (instead of embedding)
Fixed ESP32 crash on Colortwinkles brightness change
Fixed setting picker to black resetting hue and saturation
Fixed auto white mode not saved to config
* Multirelay button support.
Added button hook for usermods.
* Added MultiRelay relay states to JSON state object
* Move button timings to constants
No delay waiting for double press on button 0 if no macro set
Co-authored-by: cschwinne <dev.aircoookie@gmail.com>
* UM QuinLED-An-Penta: First version
* UM QuinLED-An-Penta: Made OLED seconds a setting; small improvements
* UM QuinLED-An-Penta: Fixed unique ID
* Merge branch 'master' of https://github.com/Aircoookie/WLED
* UM QuinLED-An-Penta: Fixed config loading
* UM QuinLED-An-Penta: Replaced ledcRead() with calculating the percentage
* UM QuinLED-An-Penta: Fixed temp sensor readings
* UM QuinLED-An-Penta: Removing OLED bus clk setting
* UM QuinLED-An-Penta: ETH support, lots of OLED improvements
* Add strip off refresh option in LED settings.
New strip initialization logic.
Minor code clen-up.
* Dev code removal.
* Missing ethernet include
* Renamed mainseg to selseg
* Fix for preset cycling bounds.
* "Preset 0" bugfix.
* Auto segments only if segments were not modified
Co-authored-by: cschwinne <dev.aircoookie@gmail.com>
* Avoid redundant localIP calls, each call takes 0.700 us on ESP32 240Mhz
* Fall through to check Wifi local ip if not connected to ETH
* Changed local var from ipAddress to localIP to better reflect content
* Added UDP sync groups.
* Shortened string.
* Changed sync default to group 1 only.
* Make packets with version < 9 group 1
* Send sync group options as bytes, parse in JS
Co-authored-by: cschwinne <dev.aircoookie@gmail.com>
* Improved pin manager, ethernet config
* Ethernet is configured prior even to LED pins
* Pin Manager allocation / deallocation functions
now take an "ownership" tag parameter, helping
avoid accidentally free'ing pins that were allocated
by other code
* Pin Manager now has ability to allocate multiple
pins at once; Simplifies error handling
* Fix operator precedence error
Bitwise AND has lower precedence than the
relational "greater than" operator.
* PinManager update for some user modules
* don't build everything...
* Final step to reduce RAM overhead
* update comment
* remove macros
* Remove leftover allocated
* Init ethernet after settings saved
Co-authored-by: Christian Schwinne <dev.aircoookie@gmail.com>
* added ui changes for saturation in sync
* added setters/getters for hsv settings
* added color correction logic
* faster algorithm for color conversion
* added save/load config to fs
* adjusted value scale
* move color functions to colors.cpp
* remove unchecked file
* Various small changes
Moved settings location in sync settings
Changed wording from hyperion to live
Moved code into setRealtimePixel(), reducing duplication and enabling the functionality for DMX streams
Co-authored-by: Christian Schwinne <dev.aircoookie@gmail.com>
Version bump to 0.13.0-b2 "Toki"
Fixed transition property not applying unless power/bri/color changed next
Moved transition field below segments (temporarily)
* Fix 2063 - Do not free pins unless allocated
* Fix 2064: Allocate pins used for Ethernet
* Fix obvious compilation errors.
* Fix multiple bugs...
* pinsAllocated[2] set twice due to copy/paste bug.
* wrong pin allocated for ETH_CLOCK_GPIO17_OUT due to copy/paste bug
* Stylistic change per PR review
* Stylistic change per PR review
* attempt to allocate pin for "default" button
* remove extra local variable
* check return value from ETH.begin()
Co-authored-by: Christian Schwinne <dev.aircoookie@gmail.com>
* Testing new wrapper functions to read Usermod config
* Usermod Settings polishing
- remove getBoolFromJsonKey() (no longer needed), fix getValueFromJsonKey(element, destination, defaultvalue)
- Update Usermod Settings html "number" field to use step="any", and make wider to make maximum values fully visible
- step="any" allows viewing/submitting full 7/8-digit float values, and the arrow buttons step by 1 now, instead of .00001 (which wasn't good for integers or floats)
- html wasn't generated/compressed yet
* Update usermod_v2_example.h with more complete example and documentation for Usermod Settings
- readFromConfig() has three options for how to load values from the config JSON, we need to pick one
* Update/rename usermode_rotary_brightness_color, to be used as an example of more robust parsing Usermod Settings values
* Update Usermod example, rename getValueFromJsonKey() to getJsonValue()
- chose single readFromConfig() pattern
- demonstrating 3-argument getJsonValue()
- remove leftover printf in getJsonValue()
Co-authored-by: Louis Beaudoin <louis@embedded-creations.com>
* add decodeIRJson and JSON remote option
* handle JSON API commands also
* removed code that forced IR codes in a certain range to be decoded by decodeIR24. Generate default ir.json files for currently supported remotes.
* comment out printing API commands in IR handling
* refactor decodeIRJson to change how ir.json is loaded add support for calling several c functions
* Handle setting palette when effect is still on default solid and will not display it
* remove colorUpdated notifier that was pasted in accidentally
* Update to handle both 24-key and 24-key old remotes (#1969)
* Update readme.md
* Update ir.cpp
Handle both 24-key and 24-key old in decodeIR switch statement
* Re-add JSON remote option
Co-authored-by: Scott Bailey <scottrbailey@gmail.com>
Co-authored-by: Artacus <40248830+scottrbailey@users.noreply.github.com>
- added parsing of POST fields to use proper type
- updated readFromConfig() to reflect parsing
- added a possibility to use nested object in UM settings
- internal changes and fixes
Wled has been supported by diyHue for some time, now it also supports Hue Sync (Entertainment) under UDP in the flask branch which will be the new master branch.
https://github.com/diyhue/diyHue/pull/628
Settings cosmetic changes (spaces, smaller pin inputs, moved analog legend to wiki)
Uncommented STATUSPIN code (still defined out by default)
Removed adalight pin 3 lock
Added define for PSRAM
commit 7893cb9ebc66faa39d430148e6dd66894cd2fc90
Merge: c4086b94e139d7
Author: Blaž Kristan <blaz@kristan-sp.si>
Date: Fri May 21 12:57:43 2021 +0200
Merge branch 'master' of https://github.com/scottrbailey/WLED into scottrbailey-master
commit 4e139d7c0a
Author: Artacus <40248830+scottrbailey@users.noreply.github.com>
Date: Tue May 18 12:57:20 2021 -0700
Update ir.cpp
Handle both 24-key and 24-key old in decodeIR switch statement
commit 9a405d374b
Author: Artacus <40248830+scottrbailey@users.noreply.github.com>
Date: Tue May 18 11:05:42 2021 -0700
Update readme.md
commit 94af6d0561
Merge: 1ed687abfb27c4
Author: Artacus <40248830+scottrbailey@users.noreply.github.com>
Date: Sun May 16 22:00:15 2021 -0700
Merge branch 'Aircoookie:master' into master
commit 1ed687a51a
Author: Scott Bailey <scottrbailey@gmail.com>
Date: Sun May 2 21:27:33 2021 -0700
remove colorUpdated notifier that was pasted in accidentally
commit 845dcabe0c
Author: Scott Bailey <scottrbailey@gmail.com>
Date: Sat May 1 12:53:34 2021 -0700
Handle setting palette when effect is still on default solid and will not display it
commit 90e8ae1457
Author: Scott Bailey <scottrbailey@gmail.com>
Date: Sat May 1 02:07:47 2021 -0700
refactor decodeIRJson to change how ir.json is loaded add support for calling several c functions
commit e4f9fa3117
Author: Scott Bailey <scottrbailey@gmail.com>
Date: Thu Apr 29 23:33:01 2021 -0700
comment out printing API commands in IR handling
commit 26247b247e
Author: Scott Bailey <scottrbailey@gmail.com>
Date: Thu Apr 29 23:31:30 2021 -0700
removed code that forced IR codes in a certain range to be decoded by decodeIR24. Generate default ir.json files for currently supported remotes.
commit 5acecda6a0
Author: Scott Bailey <scottrbailey@gmail.com>
Date: Thu Apr 29 11:25:24 2021 -0700
handle JSON API commands also
commit 754e3e092a
Author: Scott Bailey <scottrbailey@gmail.com>
Date: Wed Apr 28 22:53:27 2021 -0700
add decodeIRJson and JSON remote option
Fixed potential out-of-bounds write in MQTT
Fixed IR pin not changeable if IR disabled
Fixed XML API <wv> containing -1 on Manual only RGBW mode (see #888, #1783)
* Per strip "skip first LED".
Moved skip first led into bus manager.
* Update cfg.cpp
* Do not display Skip 1st on analog types
Rename skipFirstLed() to clarify what it does
Remove RGBW override
Co-authored-by: Aircoookie <dev.aircoookie@gmail.com>
Co-authored-by: Aircoookie <cschwinne@gmail.com>
- Utilizing addToConfig() & readFromConfig()
- UM configuration Settings page
- MQTT support for usermods
- A few sample usermods including rewritten Temparature and new Multi-Relay
* Add IP Address to JsonInfo
The value is added to the JSON only if the device is connected to the network, and uses the JSON key `"sip"` to match [wled00/xml.cpp](wled00/xml.cpp#L249). The overarching goal of this is to expose the IP Address to the Home Assistant WLED Integration, so that Home Assistant can provide a link to the WLED device (either directly through the Integration/Device page 🤞 or *ad hoc* in Lovelace).
* IP in JSON info
Empty string if not connected
Co-authored-by: Aircoookie <cschwinne@gmail.com>
* version set from package.json and release bin names
* support direnv virtualenv
* versioned PlatformIO environment
* matrix support for parralel CI
* gather artifacts
* release on tagging
* minor scripts formatting
* Better handling for TM1814 strips
* Call SetPixelSettings after Begin as described on the NeoPixelBus wiki
* Use NeoTm1814Settings::MaxCurrent constant
Avoid buffer overflows with longer mqtt topics
mqtDeviceTopic in wled.h is defined with a size of 33, so this should be set to 45 to accommodate the additional 12 characters - /temperature
* Fix swipe behavior on firefox when clicking on palette selection input
When clicking on the palette select element on firefox, it would often swipe to the next tab due to a bug in firefox: https://bugzilla.mozilla.org/show_bug.cgi?id=1410816
* Update UI .h files and remove console log
* Fix indentation in requestJson
* Add palette preview
Add palette and effects search
* Add palette preview
Add palette and effects search
* Add palette preview
Add palette and effects search
* Add palette preview
Add palette and effects search
* Fix error with background image
* Add missing palettes
* Add expiration to cached palette data
* Remove extra console.log
* bug fixes for palettes
* Rename "Default" effect back to "Solid"
* Fix scrolling issue when selecting an effect
* Add sticky default and sticky selected item
* Change checkboxes for radio button
* build html .h files
* Design Iteration 1
* Palette preview style changes
* Add button for clearing search field
* Use version ID for caching palette data rather than 24h expiration
Co-authored-by: Aircoookie <dev.aircoookie@gmail.com>
Increased max RAM FX usage on ESP32 to 20k.
Added relay On handling on realtime data if Off (@JDTSmith).
Added UI refreshing via websockets (@korkbaum).
* Remove -w (Suppress all warnings, including those which GNU CPP issues by default.) and add back in -Wall (Turn on all optional warnings which are desirable for normal code.) from build_flags
* Fixes warning: suggest parentheses around '+' in operand of '&' [-Wparentheses]
* Fixes warning: "CONFIG_LITTLEFS_FOR_IDF_3_2" redefined
* Fixes warning: format '%x' expects argument of type 'unsigned int', but argument 3 has type 'uint64_t {aka long long unsigned int}' [-Wformat=]
* Fixes warning: enumeration value 'onoff' not handled in switch [-Wswitch]
* Fixes warning: "ntohl" redefined, warning: "ntohs" redefined, warning: "htonl" redefined, warning: "htons" redefined
- Original fix: 858f8f4ee9
* Fixes warning: unused variable 'mainSeg' [-Wunused-variable]
* Fixes warning: unused variable 'start' [-Wunused-variable]
* (untested!) Fixes warning: operation on '...' may be undefined [-Wsequence-point]
* Fixes warning: unused variable
* Fixes warning: unused variable and warning: narrowing conversion
* Fixes warning: unused variable
* Fixes warning: unused variable
* (untested!) Fixes warning: statement has no effect [-Wunused-value]
* Fixes warning: control reaches end of non-void function
* Fixes warning: unused variable
* Fixes warning: left operand of comma operator has no effect
* Fixes warning: no return statement in function returning non-void
* (untested!) Fixes warning: ISO C++ forbids converting a string constant to 'char*' and fixes warning: unused variable 'nPins'
* Fixes warning: deleting array 'dmxData'
* Fixes warning: unused variable
* Remove all warning suppression buildflags
Co-authored-by: Louis Beaudoin <louis@embedded-creations.com>
Co-authored-by: Aircoookie <dev.aircoookie@gmail.com>
* Initial version of the PIR Staircase wipe up/down.
* Add pulldown reminder
* Workaround for missing D6 and D7 definitions on esp32dev
* Add pinouts for d1 mini (esp8266 and esp32) and NodeMCU (and Arduino)
* These IO pins on all these boards... NodeMCU and d1_mini esp32 supported. The others? Fingers crossed.
* Changed to not collide with led strip pins
* PIR on GPIO 15 and 16 on esp32 d1 mini
* Removed PIN number ifdefs, it is impossible to match all boards
* Settings in flash, info and API
* Update README.md
* Small doc changes
* Improved README
* Fixed error in reading configuration
* Add API documentation
* Documentation and code cleanup
* Add enable/disable to API settings
* Restore segment state when disabling plugin
* Add debounce
* Set segments in animation mode
* Set segments in animation mode
* Add support for HR04 sensors
* Add preliminary description for using an HR04 sensor
* Fixed typenumber and linked to datasheet
* Moved config away from defines to prevent user error
* Trigger Sensors through API
* Rename scripts folder so that it's name doesn't clash with the `pio` command (prevents platformIO in VSCode to work properly on Mac)
* Bugfix for detection problems
* Separated config from code
* Renamed Signal to Trigger pin
* Filename adjusted
* Clarifications and additions to README
* Fixed references to pio scripts
* Fixed API trigger bug
* Adjustments to README.md
* More efficient use of flash cycles, better naming
* Bugfix: bottom sensor was not read properly
* Renamed to Animated_Staircase
* Add note on ultrasonic sensor and esp32
* Better naming of defines
* Bugfix: Swipe down started with two steps.
* Removed upload port in nodemcuv2 section
Co-authored-by: Rolf <rolf@phobos.local>
Co-authored-by: Rolf <>
* Very incomplete work toward sorting.
* Sort modes and palettes upon startup so I don't have to maintain the static index array.
* Remove cpp test file I used for development
* Added ModeSortUsermod, modified the other two usermods to use it.
* Update platformio_override.ini.sample and readme for ModeSortUsermod
* restore methods accidentally removed.
- Identifying ESP32 hardware SPI by pin number is broken and flawed, replace with temporary hack instead until a better method of assigned resources can be devised
- NeoPixelBus doesn't support HSPI, only VSPI right now, so matching HSPI pins to enable a non-existent VSPI driver is broken
- ESP32 SPI peripherals can use alternate pins, so choosing to use hardware SPI only on the default pins is flawed
- Specify pins during Begin() call to allow for alternate pins and avoid driving the chip select signal
- Dotstar Software/Hardware output tested on ESP32, other SPI protocols and ESP8266 support was not tested
Prior Incrementing/decrementing by fixed steps (typically 10) means large
perceptual jumps at low brightness and small jumps at high brightness. This
change moves to a geometric progression, closer at the bottom of the range and
widely spaced at the top.
While it could be done as a relative jump (incrementing by bri/4 and
decrementing bri/5 works quite well), it makes for irregular behavior when
moving back and forth.
* Ability to lookup Usermod by id so Usermods can use other Usermods.
* Rotary Encoder UI using two Usermods
* Updates. More to come, probably.
* Updated rotary usermod to honor USE_FOUR_LINE_DISPLAY if you want to use four line display. It should be truly optional, now.
* minor logic improvement to showing the current time in clock mode.
* improved 24 hour display foratting and ability to use the FourLineDisplayUsermod without the RotaryEncoderUIUsermod (option disable sleep and clock modes).
* Improved ordering of defines in the FourLineDisplayUsermod to put options people might need to change together toward the top.
* relocate plugins. add mention of the Wire requirement.
* usermod filenames changed, updating comment in const.h
* fix usermod locations.
* fix usermods_list to include changed folder.
* Improved for both usermods: install, config, and docs. Included sample platform_override.ini.
* Updated name of SDA and SCL defines for config of display
* update docs.
* Wrong year. Fixed.
* Fix youtube link, improve config of sleep/clock when the rotary usermod isn't installed.
* Minor fixes to four line display. Addition of Auto Save v2 usermod.
* Allow config for auto-save to set the preset number to use. Load preset at startup (so brightness is set correctly).
* Updated docs for Auto Save.
* Updated docs for Auto Save.
Co-authored-by: Kevin Dorff <kevin@macbookpro-kevin-wifi.local>
* Initial support for WT32-ETH01 board
* Initial ethernet config option, doesn't save yet
* Fixed saving/restoring ethernet option, works now!
* Fixed ESP32-POE pin config (thanks to tbnobody)
* Remove esp32_eth target (use poe), minor cleanup
* Fix BTNPIN for WT32-ETH01, as found by @k7bbr
* Various fixes to ethernet option
Co-authored-by: cschwinne <dev.aircoookie@gmail.com>
* runs w/ multi and temp on my preasmbld QL-DQuad
* working build file
* runs w/ multi and temp on my preasmbld QL-DQuad
* working build file
* Remove custom info
* Added README, found the UI update wasn't necessary
* Rebase the precompiled HTML file
* Spellcheck
Co-authored-by: cheffpj2 <patrick.j.mcdonough@gmail.com>
* Fix swipe behavior on firefox when clicking on palette selection input
When clicking on the palette select element on firefox, it would often swipe to the next tab due to a bug in firefox: https://bugzilla.mozilla.org/show_bug.cgi?id=1410816
* Update UI .h files and remove console log
* Added aurora effect
* Cosmetic changes prior to PR to match some guidelines
* Update FX.cpp
Moved mode_aurora function to end of FX.cpp
* Cosmetic changes prior to PR
- Changed new palette name to have a whitespace
- Undid changes to platformio.ini
* Removed commented out test palette
* Improved memory handling
Use SEGENV to allocate and manage dynamic memory needs of effect.
Only allocate as much memory as needed for current amount of waves set.
* Improvements to Aurora effect
- Smoother on low speed
- CRGB is trivially copiable
- Replaced Red & Blue mode
- Simplified logic and mem use a tiny bit
- Aurora2 palette a bit less yellowish
Co-authored-by: cschwinne <dev.aircoookie@gmail.com>
* Adding SensorsToMqtt usermod, which allows WLED to read bmp280/SI7021/CCS811 sensors and publish it via MQTT to e.g. Home Assistant.
* undo some changes we dont want upstream
* undo some changes we dont want upstream2
Co-authored-by: Machiel Pronk <machiel.pronk89@gmail.com>
* Adding new usermod for TTGO T-DIsplay.
* Finalizing the code
* Modified and cleaned up readme.md file
* Fixes to platformio.ini to restore back to previous state
* Cleaned up comments in usermod file
* Updated readme with clarifications on how to modify the library files. Saving the platformio.ini file after uncommenting the line to add the TFT_eSPI library should download the necessary library files without needing to build (and fail) first.
* Cleanup
* Readme cleanup
* corrected error in commenting platformio.ini
* updated usermod to add more info to built-in display, revised readme, added images for readme
* readme file updates
* New Effect "TV Simulator"
based on "Fake TV Light for Engineers" by Phillip Burgess https://learn.adafruit.com/fake-tv-light-for-engineers/arduino-sketch
* removed some not-used functions
...from my 1st attempt with "Phoney TV" - but this one did not look good.
* Dynamic Effect extended with a "smooth" variant
...to close#1114 / the "Dynamice fade effect" in the projects section
Co-authored-by: Aircoookie <dev.aircoookie@gmail.com>
* New Effect "TV Simulator"
based on "Fake TV Light for Engineers" by Phillip Burgess https://learn.adafruit.com/fake-tv-light-for-engineers/arduino-sketch
* removed some not-used functions
...from my 1st attempt with "Phoney TV" - but this one did not look good.
* Created new version of tv_colors.h based on 18 movies
...and some corrections
* Add include guards for tv_colors.h and disable option
Co-authored-by: cschwinne <dev.aircoookie@gmail.com>
* Add fields for customization Blynk host
Add fields to 'Sync Interfaces' for customization Blynk host.
Now you can set you own Blynk server.
All you needs its set custom host and port to local Blync server.
* Lower blynk host length (memory usage)
Co-authored-by: cschwinne <dev.aircoookie@gmail.com>
Fixed AP hide not saving (fixes#1520)
Fixed MQTT password re-transmitted to HTML
Hide Update buttons while uploading, accept .bin
Make sure AP password is at least 8 characters long
Add support for ANAVI Miracle Controller open source hardware
development board with ESP8266. For the moment use a single LED
strip connected to LED1.
Signed-off-by: Leon Anavi <leon@anavi.org>
* Removed usermod Fix_unreachable_webserver
* Changed README. Added a compiler warning for ESP32
* Fix ESP32 compiling issue. Add instance ptr API.
* Updated usermods. Store config values. ESP32 fix.
* Store analog clock settings
* Rename JSON values
bring them visually more in line with the other settings
Co-authored-by: cschwinne <dev.aircoookie@gmail.com>
Just add a link to additional images. One may could also add this to the wiki but in my opinion the images folder is a good location for this information.
* Prevent UI from sliding when using sliders (#1400)
An iro.js version bump in commit 98e4ac6 changed names for the slider &
colorwheel classes which made the filter in function lock() fail.
Also it seems that not all elements of the Iro sliders & colorwheel have
appropriate classes set. Just changing the names still sometimes failed
when the user accidentally grabbed a part of the slider / colorwheel
that has no class name set.
To mitigate this, lock() now checks the events classlist for classes
starting with "Iro" as well as it's parents classlist if no "Iro" classes
were found
* Regenerate wled00/html_ui.h
* Added Temperature Palette
Added cpt-city temperature_gp palette. Palette is nice combination of blues to reds to yellows. Reduced original cpt-city palette to 18 lines to fit WLED constraints. Tested palette and it visually is consistent with original cpt-city colors and look and works in WLED.
* Update palettes.h
* Update palettes.h
...in cfg.cpp the if statement used "IRPIN" (which is consistent to all other PIN names), but on the declaration-side "IR_PIN" was used.
Changed all occurences of "IR_PIN" to "IRPIN".
The Quin-Dig-Quad has the relay pin on IO19 (Q3). However, it is on IO12 by default. Update the build flags for the custom32_LEDPIN_16 build to also move the relay pin to IO19 so it works properly with the board.
RGBW leds can be individually adressed through E1.31 control.
-Added option 'Multi RGBW' to the settings
-Modified e131.cpp accordingly
-Tuned other parameters to make it work
* Alexa RGBW Support
When adding an RGBW device to Alexa and then selecting a white color tone, Alexa will send CT values to the device. Having a warm white or cold white strip should use 100% of that strip and then add the RGB colors to get either a warmer color or a colder one.
* 40 keys IR Remote
Added IR remote with 40 keys to use with RGBW stripes.
* ESU8285 flash size corrected
* ESP32 fixes for Solid RGBW
...not implemented for ESP32 yet
ESP32 Solid RGBW defines
moved from env:esp32dev to env:esp32
ESP32 Solid RGBW defines
* Update readme.md
* Update readme.md
* Update readme.md
Update readme.md
* Use different IR remotes in the settings
To turn off IR remote use "0" in the settings, use 1 to 4 for different IR remote types.
* Use 5CH solid RGB stripes
adapt the logic to use CW and WW for different CT-values
* change from Opt-Out to Opt-In for solid (analoge) RGB stripes
Changed code from #define WLED_DISABLE_ANALOG_LEDS to #define WLED_USE_ANALOG_LEDS
* DEFINES for different devices added
* order of PINs alligned to hardware
* Update readme.md
* correct initialization of variable rgb[]
* SunRise Effect
NightLight used to brighten the light combined with fading from the actual (primary) color to the secondary color
* Fixed headline
RLYPIN definition dependant on WLED_USE_ANALOG_LEDS
Corrected list-item indents (readme.md)
updated to match upstream master (briLast in wled00.ino)
* Updates to adopt to upstream master
RLYPIN definition dependant on WLED_USE_ANALOG_LEDS
Fixed headline and corrected list-item indents (readme.md)
updated to match upstream master (briLast in wled00.ino)
* Sync with upstream master
* PIO ini correction
* sync of upstream readme.md
* FX intensity slider to desaturate Color in Colorloop FX
in default intensity (128) everything looks the same, decreasing the intensity will desaturate the color towards WHITE
* PIO changes
* adjusted linker scripts, debug settings etc.
* Override script updated accordingly
* ldscriipt for 1m0 adjusted
* backup files deleted
* deletion of wled00,ino.cpp
* remove travis build from PIO
* add custom builds to PIO
...to map the releases
* removed build_type = release (as this is default)
* updated to use espressif8266@2.3.3
...instead of espressif8266@2.3.2 (both on arduino 2.6.3)
* added more options to the PIO-override.ini
* analog, too
* build only 5 envs with Travis.CI
* should be include not exclude
* YAML correction
* next YAML
* UNDO
* some effects behave wrong with strips longer then 256 LEDs
This is particular true for the effects "Phased" and "Phased Noise" as well as for "Chase Rainbow".
The reason is that in this cases 256 is divided by SEGLEN and used in the formula, but with SEGLEN greater than 256 the integer result will always be ZERO.
Platformio.ini updates and streamlining (PR #1266)
my_config.h custom compile settings system (not yet used for much, adapted from PR #1266)
Linebreak after 5 quick select buttons
This returns the number of seconds remaining in the nightlight in the
"rem" field of the nightlight ("nl") state. If there is no nightlight
active, it returns -1.
The previous code only looked for certain keywords in the topic instead of comparing it completely.
For example if mqttDeviceTopic is set to "lights/colorRGB" the MQTT interface is unusable because
the search for "/col" will always return a match and therefore any MQTT command is interpreted as
a color.
The new code checks the full topic.
This controller uses ESP8285 with 2MB built-in flash.
Features:
- LED string is connected to GPIO3,
- On/off button connected to GPIO1,
- Built-in transistors to drive non-addressable R-G-B-Wc-Ww strips
(by default not connected, only pads are present).
Signed-off-by: Lech Perczak <lech.perczak@gmail.com>
- Colorful effect now supports palettes
- Added C9 2 palette (#1291)
- Improved C9 palette brightness by 12%
- Disable onboard LED if LEDs are off (PR #1245)
- Added optional status LED (PR #1264)
- Realtime max. brightness now honors brightness factor (fixes#1271)
- Updated ArduinoJSON to 6.17.0
* Disable onboard LED when LEDs are not in use
* Remove unused variable
* Only disable onboard LED if LEDPIN == LED_BUILTIN
* Change LEDPIN to LED_BUILTIN
* Rawframe edit:
* - TESTED ON WLED VS.0.10.1 - WHERE ONLY PRESET 16 SAVES SEGMENTS - some macros may not be needed if this changes.
* - Code has been modified as my usage changed, as such it has poor use of functions vs if thens, but feel free to change it for me :)
*
* Edited to SWITCH between two lighting scenes/modes : STANDBY and HIGHLIGHT
*
* Usage:
* - Standby is the default mode and Highlight is activated when the PIR detects activity.
* - PIR delay now set to same value as Nightlight feature on boot but otherwise controlled as normal.
* - Standby and Highlight brightness can be set on the fly (default values set on boot via macros calling presets).
* - Macros are used to set Standby and Highlight states (macros can load saved presets etc).
*
* - Macro short button press = Highlight state default (used on boot only and sets default brightness).
* - Macro double button press = Standby state default (used on boot only and sets default brightness).
* - Macro long button press = Highlight state (after boot).
* - Macro 16 = Standby state (after boot).
*
* ! It is advised not to set 'Apply preset at boot' or a boot macro (that activates a preset) as we will call our own macros on boot.
*
* - When the strip is off before PIR activates the strip will return to off for Standby mode, and vice versa.
* - When the strip is turned off while in Highlight mode, it will return to standby mode. (This behaviour could be changed easily if for some reason you wanted the lights to go out when the pir is activated).
* - Macros can be chained so you could do almost anything, such as have standby mode also turn on the nightlight function with a new time delay.
*
* Segment Notes:
* - It's easier to save the segment selections in preset than apply via macro while we a limited to preset 16. (Ie, instead of selecting sections at the point of activating standby/highlight modes).
* - Because only preset 16 saves segments, for now we are having to use additional macros to control segments where they are involved. Macros can be chained so this works but it would be better if macros also accepted json-api commands. (Testing http api segment behaviour of SS with SB left me a little confused).
*
* Future:
* - Maybe a second timer/timetable that turns on/off standby mode also after set inactivity period / date & times. For now this can be achieved others ways so may not be worth eating more processing power.
* A separate socket for UDP api has been added. This uses the same API as HTML. Commands for Loxone were added to the API.
* html files for udp api newly generated
* codm pixel controller board configurations added to platformio.ini file
* Parser for LX/LY commands adapted. Calculation of the values corrected. Segment handling for LX/LY removed.
* Lox parser moved to own file. Lox parser added to the JSON api. Within a segment LX and LY are now supported.
* serial port removed
* F() macro added
Co-authored-by: Marius Groos <marius.groos@codm.de>
* Add touch option to button handler
* Check if touch is pressed in setup
* Add TOUCHPIN build env and override example
Co-authored-by: Aircoookie <dev.aircoookie@gmail.com>
* Allow modem sleep if power off and sleep permitted
* Only add auto modem sleep handling for ESP8266
* Add comment and remove redundant condition
Co-authored-by: Aircoookie <cschwinne@gmail.com>
* Change Temperature usermod to use async reading to avoid blocking
* Fix comparison on wait time
* Add
* Simplify logic in the loop method
* Optimize calls to minimize latency, inform user how long till first measurement
* disable usermod if sensor not found
* Added debug statements on init, update readme
* fix spelling error of celsius
* Akemi on the welcome screen
* Move style element to CSS
* Use smaller Akemi image, improve margin, rounded buttons
* New WLED logo on welcome page
Co-authored-by: cschwinne <dev.aircoookie@gmail.com>
* New Segments are now initialized with default speed and intensity
* Open releases in new tab (#1152)
* open releases in new tab
* Revert "open releases in new tab"
This reverts commit 6e3940c8eb.
* open releases in new tab
Co-authored-by: Woody <>
Co-authored-by: Woody <27882680+WoodyLetsCode@users.noreply.github.com>
* Use maximum gzip compression
* Revert extra changes
* Remove extra code used when testing brotli compression
* Remove extra space on unrelated changes
* initial word clock usermod
Based on code provided by Aircoookie I added my code to create a word clock using a 8x8 RGB matrix
* construction source files
files for laser or 3d printing enclosures
* Update word-clock-matrix.cpp
fixed missed localTime var and removed brightness schedule to use timed macros
Co-authored-by: Aircoookie <dev.aircoookie@gmail.com>
Fix a typo in one of the json vars
Fix an odd issue that would occur if sunrise or sunset occurs in the first hour after midnight UTC. (The Dusk2Dawn lib would return a value greater than 1440.)
* Add segment mirror option (#1010)
* Update new pull with playlist and palette changes
* Revert "Update new pull with playlist and palette changes"
This reverts commit 9802a7c4e2.
The existing code was very buggy - a 512 channel ArtNet packet sent data to
171 LEDs, not 170. Also the second ArtNet universe was off-by-one.
The math was very confusing with so many branches. The reduces the
amount of code and amount of branching.
Tested with Resolume + my own ArtNet software + 252 LEDs for ArtNet.
Tested with LedFx for e1.31
* Use string derived from serverDescription for wifi.hostname()
The code was sending illegal hostname strings to WiFi.hostname() (which is then submitted to DHCP and often times to DNS.) A valid hostname contains only alphanumeric characters and hyphens (though it can't start with a hypen.) This change simply alters the value passed to wifi.hostname() by replacing all non alphanum chars with hyphens while ensuring the first char is never a hyphen. If the resulting hostname is empty, it uses the escapedMac value (which I'm assuming is initialized by the time this code executes.)
This change would result issue #1033
* replace string with char array
prefix wled
improve documentation
Co-authored-by: garyd9 <garyd9@hotmail.com>
Co-authored-by: Gary Dezern <gdezern@internal.youforgot.net>
The version requirement for the ESPAsyncUDP lib_dep has been causing failed builds in platformio and Travis-CI since 7/6/2020. Removing the version requirement fixes this issue.
Please see the error below:
`Looking for ESPAsyncUDP library in registry
Found: https://platformio.org/lib/show/359/ESPAsyncUDP
LibraryManager: Installing id=359 @ 697c75a025
UndefinedPackageVersion: Could not find a version that satisfies the requirement '697c75a025' for your system 'linux_x86_64':`
- Added Sunrise nightlight mode
- Added Chunchun effect
- Added `LO` (live override) command to HTTP API
- Added `mode` to `nl` object of JSON state API, deprecating `fade`
- Added light color scheme support to web UI (click sun next to brightness slider)
- Added option to hide labels in web UI (click flame icon next to intensity slider)
- Added hex color input (click palette icon next to palette select) (resolves#506)
- Added support for RGB sliders (need to set in localstorage)
- Added support for custom background color or image (need to set in localstorage)
- Added option to hide bottom tab bar in PC mode (need to set in localstorage)
- Fixed transition lag with multiple segments (fixes#985)
- Changed Nightlight wording (resolves#940)
Replace outdated CSS in HTML by style.css import
Fix missing button double press in time settings
FIx missing meta utf-8 in WiFi and UI settings
Modify cdata.js to add an info header to the top of auto-generated files
* nicer readme
- added emojis
- changed the first sentence (information about WS2801)
* added new images
* moved main image
* Delete wled_logo.png
* mail to image
* Some design changes in readme
- added images
- added discord banner
- replaced email with image (protection for spam bots)
* removed mail image
* Delete mail.png
* Added compatible LED Strips table
I added this, because I thought for a long time that WLED doesn't support WS2801.
I didn't read the wiki. And so I think this could be useful for many other people.
* Added emojy for Compatible LED Strips
* compressed images
* Changed path to compressed images
* Delete macbook-pro-space-gray-on-the-wooden-table.jpg
* Delete walking-with-iphone-x.jpg
* Adding new usermod for TTGO T-DIsplay.
* Finalizing the code
* Modified and cleaned up readme.md file
* Fixes to platformio.ini to restore back to previous state
* Cleaned up comments in usermod file
* Updated readme with clarifications on how to modify the library files. Saving the platformio.ini file after uncommenting the line to add the TFT_eSPI library should download the necessary library files without needing to build (and fail) first.
* Cleanup
* Readme cleanup
* corrected error in commenting platformio.ini
* Adding new usermod for TTGO T-DIsplay.
* Finalizing the code
* Modified and cleaned up readme.md file
* Fixes to platformio.ini to restore back to previous state
* Cleaned up comments in usermod file
output a configurable universe (E1.31 or ArtNet) via MAX485 module that connects its DI to D4 on d1_mini.
as this function competes with DMX output for the same hardware, the universe to proxy acts as a switch.
0 = DMX OUTPUT (of configured WLED LEDs, which is the classic behaviour)
1-63999 = DMX PROXY (selected universe, ArtNet is limited up to 32768)
Here are a few suggestions to make it easier for you to contribute!
### Code style
When in doubt, it is easiest to replicate the code style you find in the files you want to edit :)
Below are the guidelines we use in the WLED repository.
#### Indentation
We use tabs for Indentation in Web files (.html/.css/.js) and spaces (2 per indentation level) for all other files.
You are all set if you have enabled `Editor: Detect Indentation` in VS Code.
#### Blocks
Whether the opening bracket of e.g. an `if` block is in the same line as the condition or in a separate line is up to your discretion. If there is only one statement, leaving out block braches is acceptable.
Good:
```cpp
if(a==b){
doStuff(a);
}
```
```cpp
if(a==b)
{
doStuff(a);
}
```
```cpp
if(a==b)doStuff(a);
```
There should always be a space between a keyword and its condition and between the condition and brace.
Within the condition, no space should be between the paranthesis and variables.
Spaces between variables and operators are up to the authors discretion.
There should be no space between function names and their argument parenthesis.
Good:
```cpp
if(a==b){
doStuff(a);
}
```
Not good:
```cpp
if(a==b){
doStuff(a);
}
```
#### Comments
Comments should have a space between the delimiting characters (e.g. `//`) and the comment text.
Note: This is a recent change, the majority of the codebase still has comments without spaces.
Good:
```
// This is a comment.
/* This is a CSS inline comment */
/*
* This is a comment
* wrapping over multiple lines,
* used in WLED for file headers and function explanations
*/
<!-- This is an HTML comment -->
```
There is no set character limit for a comment within a line,
though as a rule of thumb you should wrap your comment if it exceeds the width of your editor window.
Inline comments are OK if they describe that line only and are not exceedingly wide.
; default_envs = nodemcuv2, esp8266_2m, esp01_1m_full, esp32dev, esp32_eth # ESP32 variant builds are temporarily excluded from CI due to toolchain issues on the GitHub Actions Linux environment
;-Dregister= # remove warnings in C++17 due to use of deprecated register keyword by the FastLED library ;; warning: this breaks framework code on ESP32-C3 and ESP32-S2
-DWLED_USE_MY_CONFIG
; -D USERMOD_SENSORSTOMQTT
#For ADS1115 sensor uncomment following
; -D USERMOD_ADS1115
; -D USERMOD_ANIMARTRIX
ldscript_512k=eagle.flash.512k.ld ;for older versions change this to eagle.flash.512k0.ld
ldscript_1m0m=eagle.flash.1m.ld ;for older versions change this to eagle.flash.1m0.ld
-DARDUINO_USB_MODE=0 ;; this flag is mandatory for ESP32-S2 !
;; please make sure that the following flags are properly set (to 0 or 1) by your board.json, or included in your custom platformio_override.ini entry:
;; ARDUINO_USB_CDC_ON_BOOT
lib_deps=
https://github.com/pbolduc/AsyncTCP.git @ 1.2.0
${env.lib_deps}
[esp32c3]
;; generic definitions for all ESP32-C3 boards
platform=espressif32@5.3.0
platform_packages=
build_flags=-g
-DARDUINO_ARCH_ESP32
-DARDUINO_ARCH_ESP32C3
-DCONFIG_IDF_TARGET_ESP32C3=1
-D CONFIG_ASYNC_TCP_USE_WDT=0
-DCO
-DARDUINO_USB_MODE=1 ;; this flag is mandatory for ESP32-C3
;; please make sure that the following flags are properly set (to 0 or 1) by your board.json, or included in your custom platformio_override.ini entry:
;; please make sure that the following flags are properly set (to 0 or 1) by your board.json, or included in your custom platformio_override.ini entry:
A fast and feature-rich implementation of an ESP8266/ESP32 webserver to control NeoPixel (WS2812B, WS2811, SK6812, APA102) LEDs!
A fast and feature-rich implementation of an ESP8266/ESP32 webserver to control NeoPixel (WS2812B, WS2811, SK6812) LEDs or also SPI based chipsets like the WS2801 and APA102!
### Features:
- WS2812FX library integrated for over 100 special effects
## ⚙️ Features
- WS2812FX library with more than 100 special effects
- FastLED noise effects and 50 palettes
- Modern UI with color, effect and segment controls
- Segments to set different effects and colors to parts of the LEDs
- Settings page - configuration over network
- Segments to set different effects and colors to user defined parts of the LED string
- Settings page - configuration via the network
- Access Point and station mode - automatic failsafe AP
- Up to 10 LED outputs per instance
- Support for RGBW strips
-16 user presets to save and load colors/effects easily, supports cycling through them.
-Macro functions to automatically execute API calls
-Up to 250 user presets to save and load colors/effects easily, supports cycling through them.
-Presets can be used to automatically execute API calls
- Nightlight function (gradually dims down)
- Full OTA software updatability (HTTP + ArduinoOTA), password protectable
- Configurable analog clock + support for the Cronixie kit by Diamex
- Configurable Auto Brightness limit for safer operation
- Configurable analog clock (Cronixie, 7-segment and EleksTube IPS clock support via usermods)
- Configurable Auto Brightness limit for safe operation
- Filesystem-based config for easier backup of presets and settings
### Supported light control interfaces:
- WLED app for Android and iOS
## 💡 Supported light control interfaces
- WLED app for [Android](https://play.google.com/store/apps/details?id=com.aircoookie.WLED) and [iOS](https://apps.apple.com/us/app/wled/id1475695033)
- JSON and HTTP request APIs
- MQTT
-Blynk IoT
-E1.31
- Hyperion
- MQTT
-E1.31, Art-Net, DDP and TPM2.net
-[diyHue](https://github.com/diyhue/diyHue) (Wled is supported by diyHue, including Hue Sync Entertainment under udp. Thanks to [Gregory Mallios](https://github.com/gmallios))
- Simple timers/schedules (time from NTP, timezones/DST supported)
### Quick start guide and documentation:
## 📲 Quick start guide and documentation
See the [wiki](https://github.com/Aircoookie/WLED/wiki)!
See the [documentation on our official site](https://kno.wled.ge)!
DrZzs has made some excellent video guides:
[Introduction, hardware and installation](https://www.youtube.com/watch?v=tXvtxwK3jRk)
[Settings, tips and tricks](https://www.youtube.com/watch?v=6eCE2BpLaUQ)
[On this page](https://kno.wled.ge/basics/tutorials/) you can find excellent tutorials and tools to help you get your new project up and running!
If you'd rather read, here is a very [detailed step-by-step beginner tutorial](https://tynick.com/blog/11-03-2019/getting-started-with-wled-on-esp8266/) by tynick!
Join the Discord [server](https://discord.gg/KuqP7NE) to discuss everything about WLED!
Check out the WLED [Discourse forum](https://wled.discourse.group)!
You can also send me mails to [dev.aircoookie@gmail.com](mailto:dev.aircoookie@gmail.com), but please only do so if you want to talk to me privately.
If WLED really brightens up your every day, you can [](https://paypal.me/aircoookie)
You can also send me mails to [dev.aircoookie@gmail.com](mailto:dev.aircoookie@gmail.com), but please, only do so if you want to talk to me privately.
If WLED really brightens up your day, you can [](https://paypal.me/aircoookie)
*Disclaimer:*
If you are sensitive to photoeleptic seizures it is not recommended that you use this software.
In case you still want to try, don't use strobe, lighting or noise modes or high effect speed settings.
As per the MIT license, i assume no liability for any damage to you or any other person or equipment.
If you are prone to photosensitive epilepsy, we recommended you do **not** use this software.
If you still want to try, don't use strobe, lighting or noise modes or high effect speed settings.
As per the MIT license, I assume no liability for any damage to you or any other person or equipment.
Usermod to allow WLED to receive via UDP port from RGB.NET (and therefore add as a device to be controlled within artemis on PC)
This is only a very simple code to support a single led strip, it does not support the full function of the RGB.NET sketch for esp8266 only what is needed to be used with Artemis. It will show as a ws281x device in artemis when you provide the correct hostname or ip. Artemis queries the number of LEDs via the web interface (/config) but communication to set the LEDs is all done via the UDP interface.
To install, copy the usermod.cpp file to wled00 folder and recompile
- These must be added under `lib_deps` in your `platform.ini` (or `platform_override.ini`).
- Data is published over MQTT - make sure you've enabled the MQTT sync interface.
- This usermod also writes to serial (GPIO1 on ESP8266). Please make sure nothing else is listening to the serial TX pin or your board will get confused by log messages!
In addition to outputting via MQTT, you can read the values from the Info Screen on the dashboard page of the device's web interface.
Methods also exist to read the read/calculated values from other WLED modules through code.
-`getTemperatureC()`
-`getTemperatureF()`
-`getHumidity()`
-`getPressure()`
-`getDewPointC()`
-`getDewPointF()`
-`getHeatIndexC()`
-`getHeatIndexF()`
# Compiling
To enable, compile with `USERMOD_BME280` defined (e.g. in `platformio_override.ini`)
```ini
[env:usermod_bme280_d1_mini]
extends=env:d1_mini
build_flags=
${common.build_flags_esp8266}
-D USERMOD_BME280
lib_deps=
${esp8266.lib_deps}
BME280@~3.0.0
Wire
```
# MQTT
MQTT topics are as follows (`<deviceTopic>` is set in MQTT section of Sync Setup menu):
Measurement type | MQTT topic
--- | ---
Temperature | `<deviceTopic>/temperature`
Humidity | `<deviceTopic>/humidity`
Pressure | `<deviceTopic>/pressure`
Heat index | `<deviceTopic>/heat_index`
Dew point | `<deviceTopic>/dew_point`
If you are using Home Assistant, and `Home Assistant Discovery` is turned on, Home Assistant should automatically detect a new device, provided you have the MQTT integration installed. The device is separate from the main WLED device and will contain sensors for Pressure, Humidity, Temperature, Dew Point and Heat Index.
# Revision History
Jul 2022
- Added Home Assistant Discovery
- Added API interface to output data
- Removed compile-time variables
- Added usermod menu interface
- Added value outputs to info screen
- Updated `readme.md`
- Registered usermod
- Implemented PinManager for usermod
- Implemented reallocation of pins without reboot
Apr 2021
- Added `Publish Always` option
Dec 2020
- Ported to V2 Usermod format
- Customizable `measure intervals`
- Customizable number of `decimal places` in published sensor values
- Pressure measured in units of hPa instead of Pa
- Calculation of heat index (apparent temperature) and dew point
-`16x oversampling` of sensor during measurement
- Values only published if they are different from the previous value
// default settings values could be set here (or below using the 3-argument getJsonValue()) instead of in the class definition or constructor
// setting them inside readFromConfig() is slightly more robust, handling the rare but plausible use case of single value being missing after boot (e.g. if the cfg.json was manually edited and a value was removed)
JsonObjecttop=root[FPSTR(_name)];
if(top.isNull()){
DEBUG_PRINT(F(_name));
DEBUG_PRINTLN(F(": No config found. (Using defaults.)"));
For this to work, the positive side of the (18650) battery must be connected to pin `A0` of the d1 mini/esp8266 with a 100k Ohm resistor (see [Useful Links](#useful-links)).
If you have an ESP32 board, connect the positive side of the battery to ADC1 (GPIO32 - GPIO39)
// between 0 and 1, to control strength of voltage smoothing filter
floatalpha=0.05f;
// multiplier for the voltage divider that is in place between ADC pin and battery, default will be 2 but might be adapted to readout voltages over ~5v ESP32 or ~6.6v ESP8266
// use calibrated millivolts analogread on esp32 (150 mV ~ 2450 mV default attentuation) and divide by 1000 to get from milivolts to volts and multiply by voltage multiplier and apply calibration value
// use analog read on esp8266 ( 0V ~ 1V no attenuation options) and divide by ADC precision 1023 and multiply by voltage multiplier and apply calibration value
#else //ESP8266 boards have only one analog input pin A0
pinMode(batteryPin,INPUT);
voltage=readVoltage();
#endif
nextReadTime=millis()+readingInterval;
lastReadTime=millis();
initDone=true;
}
/*
* connected() is called every time the WiFi is (re)connected
* Use it to initialize network interfaces
*/
voidconnected()
{
//Serial.println("Connected to WiFi!");
}
/*
* loop() is called continuously. Here you can check for events, read sensors, etc.
*
*/
voidloop()
{
if(strip.isUpdating())return;
lowPowerIndicator();
// check the battery level every USERMOD_BATTERY_MEASUREMENT_INTERVAL (ms)
if(millis()<nextReadTime)return;
nextReadTime=millis()+readingInterval;
lastReadTime=millis();
if(batteryPin<0)return;// nothing to read
initializing=false;
rawValue=readVoltage();
// filter with exponential smoothing because ADC in esp32 is fluctuating too much for a good single readout
voltage=voltage+alpha*(rawValue-voltage);
// check if voltage is within specified voltage range, allow 10% over/under voltage - removed cause this just makes it hard for people to troubleshoot as the voltage in the web gui will say invalid instead of displaying a voltage
// the loop generates: oappend(SET_F("addOption(bd, 'preset name', preset id);"));
// for(int8_t i=1; i < 42; i++) {
// oappend(SET_F("addOption(bd, 'Preset#"));
// oappendi(i);
// oappend(SET_F("',"));
// oappendi(i);
// oappend(SET_F(");"));
// }
}
/*
* readFromConfig() can be used to read back the custom settings you added with addToConfig().
* This is called by WLED when settings are loaded (currently this only happens immediately after boot, or after saving on the Usermod Settings page)
*
* readFromConfig() is called BEFORE setup(). This means you can use your persistent values in setup() (e.g. pin assignments, buffer sizes),
* but also that if you want to write persistent values to a dynamic buffer, you'd need to allocate it here instead of in setup.
* If you don't know what that is, don't fret. It most likely doesn't affect your use case :)
*
* Return true in case the config values returned from Usermod Settings were complete, or false if you'd like WLED to save your defaults to disk (so any missing values are editable in Usermod Settings)
*
* getJsonValue() returns false if the value is missing, or copies the value into the variable provided and returns true if the value is present
* The configComplete variable is true only if the "exampleUsermod" object and all values are present. If any values are missing, WLED will know to call addToConfig() to save them
*
* This function is guaranteed to be called on boot, but could also be called every time settings are updated
*/
boolreadFromConfig(JsonObject&root)
{
#ifdef ARDUINO_ARCH_ESP32
int8_tnewBatteryPin=batteryPin;
#endif
JsonObjectbattery=root[FPSTR(_name)];
if(battery.isNull())
{
DEBUG_PRINT(FPSTR(_name));
DEBUG_PRINTLN(F(": No config found. (Using defaults.)"));
// default settings values could be set here (or below using the 3-argument getJsonValue()) instead of in the class definition or constructor
// setting them inside readFromConfig() is slightly more robust, handling the rare but plausible use case of single value being missing after boot (e.g. if the cfg.json was manually edited and a value was removed)
This usermod will read from an attached DHT22 or DHT11 humidity and temperature sensor.
The sensor readings are displayed in the Info section of the web UI (and optionally sent to an MQTT broker).
If sensor is not detected after 10 update intervals, the usermod will be disabled.
If enabled, measured temperature and humidity will be published to the following MQTT topics
*`{devceTopic}/dht/temperature`
*`{devceTopic}/dht/humidity`
## Installation
Copy the example `platformio_override.ini` to the root directory. This file should be placed in the same directory as `platformio.ini`.
### Define Your Options
*`USERMOD_DHT` - define this to include this user mod wled00\usermods_list.cpp
*`USERMOD_DHT_DHTTYPE` - DHT model: 11, 21, 22 for DHT11, DHT21, or DHT22, defaults to 22/DHT22
*`USERMOD_DHT_PIN` - pin to which DTH is connected, defaults to Q2 pin on QuinLed Dig-Uno's board
*`USERMOD_DHT_CELSIUS` - define this to report temperatures in degrees Celsius, otherwise Fahrenheit will be reported
*`USERMOD_DHT_MEASUREMENT_INTERVAL` - the number of milliseconds between measurements, defaults to 60000 ms
*`USERMOD_DHT_FIRST_MEASUREMENT_AT` - the number of milliseconds after boot to take first measurement, defaults to 90000 ms
*`USERMOD_DHT_MQTT` - publish measurements to an MQTT broker
*`USERMOD_DHT_STATS` - For debug, report delay stats
## Project link
* [QuinLED-Dig-Uno](https://quinled.info/2018/09/15/quinled-dig-uno/) - Project link
### PlatformIO requirements
If you are using `platformio_override.ini`, you should be able to refresh the task list and see your custom task, for example `env:d1_mini_usermod_dht_C`. If not, you can add the libraries and dependencies into `platformio.ini` as you see fit.
## Change Log
2022-10-15
* Add ability to publish sensor readings to an MQTT broker
* fix compilation error for sample [env:d1_mini_usermod_dht_C] task
2020-02-04
* Change default QuinLed pin to Q2
* Instead of trying to keep updates at constant cadence, space out readings by measurement interval. Hopefully, this helps eliminate occasional bursts of readings with errors
* Add some more (optional) stats
2020-02-03
* Due to poor readouts on ESP32 with previous DHT library, rewrote to use https://github.com/alwynallan/DHT_nonblocking
* The new library serializes/delays up to 5ms for the sensor readout
* v2 usermods are class inheritance based and can (but don't have to) implement more functions, each of them is shown in this example.
* Multiple v2 usermods can be added to one compilation easily.
*
* Creating a usermod:
* This file serves as an example. If you want to create a usermod, it is recommended to use usermod_v2_empty.h from the usermods folder as a template.
* Please remember to rename the class and file to a descriptive name.
* You may also use multiple .h and .cpp files.
*
* Using a usermod:
* 1. Copy the usermod into the sketch folder (same folder as wled00.ino)
* 2. Register the usermod by adding #include "usermod_filename.h" in the top and registerUsermod(new MyUsermodClass()) in the bottom of usermods_list.cpp
*/
//class name. Use something descriptive and leave the ": public Usermod" part :)
classMyExampleUsermod:publicUsermod{
private:
// Private class members. You can declare variables and functions only accessible to your usermod here
boolenabled=false;
boolinitDone=false;
unsignedlonglastTime=0;
// set your config variables to their boot default value (this can also be done in readFromConfig() or a constructor if you prefer)
booltestBool=false;
unsignedlongtestULong=42424242;
floattestFloat=42.42;
StringtestString="Forty-Two";
// These config variables have defaults set inside readFromConfig()
inttestInt;
longtestLong;
int8_ttestPins[2];
// string that are used multiple time (this will save some flash memory)
staticconstchar_name[];
staticconstchar_enabled[];
// any private methods should go here (non-inline methosd should be defined out of class)
voidpublishMqtt(constchar*state,boolretain=false);// example for publishing MQTT message
public:
// non WLED related methods, may be used for data exchange between usermods (non-inline methods should be defined out of class)
/**
* Enable/Disable the usermod
*/
inlinevoidenable(boolenable){enabled=enable;}
/**
* Get usermod enabled/disabled state
*/
inlineboolisEnabled(){returnenabled;}
// in such case add the following to another usermod:
// in private vars:
// #ifdef USERMOD_EXAMPLE
// MyExampleUsermod* UM;
// #endif
// in setup()
// #ifdef USERMOD_EXAMPLE
// UM = (MyExampleUsermod*) usermods.lookup(USERMOD_ID_EXAMPLE);
// #endif
// somewhere in loop() or other member method
// #ifdef USERMOD_EXAMPLE
// if (UM != nullptr) isExampleEnabled = UM->isEnabled();
// if (!isExampleEnabled) UM->enable(true);
// #endif
// methods called by WLED (can be inlined as they are called only once but if you call them explicitly define them out of class)
/*
* setup() is called once at boot. WiFi is not yet connected at this point.
* readFromConfig() is called prior to setup()
* You can use it to initialize variables, sensors or similar.
*/
voidsetup()override{
// do your set-up here
//Serial.println("Hello from my usermod!");
initDone=true;
}
/*
* connected() is called every time the WiFi is (re)connected
* Use it to initialize network interfaces
*/
voidconnected()override{
//Serial.println("Connected to WiFi!");
}
/*
* loop() is called continuously. Here you can check for events, read sensors, etc.
*
* Tips:
* 1. You can use "if (WLED_CONNECTED)" to check for a successful network connection.
* Additionally, "if (WLED_MQTT_CONNECTED)" is available to check for a connection to an MQTT broker.
*
* 2. Try to avoid using the delay() function. NEVER use delays longer than 10 milliseconds.
* Instead, use a timer check as shown here.
*/
voidloop()override{
// if usermod is disabled or called during strip updating just exit
// NOTE: on very long strips strip.isUpdating() may always return true so update accordingly
if(!enabled||strip.isUpdating())return;
// do your magic here
if(millis()-lastTime>1000){
//Serial.println("I'm alive!");
lastTime=millis();
}
}
/*
* addToJsonInfo() can be used to add custom entries to the /json/info part of the JSON API.
* Creating an "u" object allows you to add custom key/value pairs to the Info section of the WLED web UI.
* Below it is shown how this could be used for e.g. a light sensor
*/
voidaddToJsonInfo(JsonObject&root)override
{
// if "u" object does not exist yet wee need to create it
//save these vars persistently whenever settings are saved
top["great"]=userVar0;
top["testBool"]=testBool;
top["testInt"]=testInt;
top["testLong"]=testLong;
top["testULong"]=testULong;
top["testFloat"]=testFloat;
top["testString"]=testString;
JsonArraypinArray=top.createNestedArray("pin");
pinArray.add(testPins[0]);
pinArray.add(testPins[1]);
}
/*
* readFromConfig() can be used to read back the custom settings you added with addToConfig().
* This is called by WLED when settings are loaded (currently this only happens immediately after boot, or after saving on the Usermod Settings page)
*
* readFromConfig() is called BEFORE setup(). This means you can use your persistent values in setup() (e.g. pin assignments, buffer sizes),
* but also that if you want to write persistent values to a dynamic buffer, you'd need to allocate it here instead of in setup.
* If you don't know what that is, don't fret. It most likely doesn't affect your use case :)
*
* Return true in case the config values returned from Usermod Settings were complete, or false if you'd like WLED to save your defaults to disk (so any missing values are editable in Usermod Settings)
*
* getJsonValue() returns false if the value is missing, or copies the value into the variable provided and returns true if the value is present
* The configComplete variable is true only if the "exampleUsermod" object and all values are present. If any values are missing, WLED will know to call addToConfig() to save them
*
* This function is guaranteed to be called on boot, but could also be called every time settings are updated
*/
boolreadFromConfig(JsonObject&root)override
{
// default settings values could be set here (or below using the 3-argument getJsonValue()) instead of in the class definition or constructor
// setting them inside readFromConfig() is slightly more robust, handling the rare but plausible use case of single value being missing after boot (e.g. if the cfg.json was manually edited and a value was removed)
* appendConfigData() is called when user enters usermod settings page
* it may add additional metadata for certain entry fields (adding drop down is possible)
* be careful not to add too much as oappend() buffer is limited to 3k
*/
voidappendConfigData()override
{
oappend(SET_F("addInfo('"));oappend(String(FPSTR(_name)).c_str());oappend(SET_F(":great"));oappend(SET_F("',1,'<i>(this is a great config value)</i>');"));
oappend(SET_F("addInfo('"));oappend(String(FPSTR(_name)).c_str());oappend(SET_F(":testString"));oappend(SET_F("',1,'enter any string you want');"));
This usermod allows WLED to run on the EleksTube IPS clock.
It enables running all WLED effects on the background SK6812 lighting, while displaying digit bitmaps on the 6 IPS screens.
Code is largely based on https://github.com/SmittyHalibut/EleksTubeHAX by Mark Smith!
Supported:
- Display with custom bitmaps (.bmp) or raw RGB565 images (.bin) from filesystem
- Background lighting
- All 4 hardware buttons
- RTC (with RTC usermod)
- Standard WLED time features (NTP, DST, timezones)
Not supported:
- On-device setup with buttons (WiFi setup only)
Your images must be 1-135 pixels wide and 1-240 pixels high.
BMP 1, 4, 8, and 24 bits per pixel formats are supported.
## Installation
Compile and upload to clock using the `elekstube_ips` PlatformIO environment
Once uploaded (the clock can be flashed like any ESP32 module), go to `[WLED-IP]/edit` and upload the 0-9.bin files from [here](https://github.com/Aircoookie/NixieThemes/tree/master/themes/RealisticNixie/bin).
You can find more clockfaces in the [NixieThemes](https://github.com/Aircoookie/NixieThemes/) repo.
Use LED pin 12, relay pin 27 and button pin 34.
## Use of RGB565 images
Binary 16-bit per pixel RGB565 format `.bin` and `.clk` images are now supported. This has the benefit of using only 2/3rds of the file space a 24 BPP `.bmp` occupies.
The drawback is this format cannot be handled by common image programs and an extra conversion step is needed.
You can use https://lvgl.io/tools/imageconverter to convert your .bmp to a .bin file (settings `True color` and `Binary RGB565`).
Thank you to @RedNax67 for adding .bin and .clk support.
For most clockface designs, using 4 or 8 BPP BMP format will reduce file size even more:
| Bits per pixel | File size in kB (for 135x240 img) | % of 24 BPP BMP | Max unique colors
| --- | --- | --- | --- |
24 | 98 | 100% | 16M (66K)
16 (.clk) | 64.8 | 66% | 66K
8 | 33.7 | 34% | 256
4 | 16.4 | 17% | 16
1 | 4.9 | 5% | 2
Comparison 1 vs. 4 vs. 8 vs. 24 BPP. With this clockface on the actual clock, 4 bit looks good, and 8 bit is almost indistinguishable from 24 bit.
**Attention: This usermod compiles only for ESP8266**
This usermod-v2 modification performs a ping request to a local IP address every 60 seconds. This ensures WLED net services remain accessible in some problematic WLAN environments.
The modification works with static or DHCP IP address configuration.
_Story:_
Unfortunately, with many ESP projects where a web server or other network services are running, after some time, the connecton to the web server is lost.
The connection can be reestablished with a ping request from the device.
With this modification, in the worst case, the network functions are not available until the next ping request. (60 seconds)
## Webinterface
The number of pings and reconnects is displayed on the info page in the web interface.
The ping delay can be changed. Changes persist after a reboot.
| PingDelayMs | 5000 to 18000000 | Deactivdate/activate the sensor |
Changes also persist after a reboot.
## Installation
1. Copy the file `usermod_Fix_unreachable_netservices.h` to the `wled00` directory.
2. Register the usermod by adding `#include "usermod_Fix_unreachable_netservices.h"` in the top and `registerUsermod(new FixUnreachableNetServices());` in the bottom of `usermods_list.cpp`.
Example **usermods_list.cpp**:
```cpp
#include"wled.h"
/*
* Register your v2 usermods here!
* (for v1 usermods using just usermod.cpp, you can ignore this file)
*/
/*
* Add/uncomment your usermod filename here (and once more below)
* v2 usermods are class inheritance based and can (but don't have to) implement more functions, each of them is shown in this example.
* Multiple v2 usermods can be added to one compilation easily.
*
* Creating a usermod:
* This file serves as an example. If you want to create a usermod, it is recommended to use usermod_v2_empty.h from the usermods folder as a template.
* Please remember to rename the class and file to a descriptive name.
* You may also use multiple .h and .cpp files.
*
* Using a usermod:
* 1. Copy the usermod into the sketch folder (same folder as wled00.ino)
* 2. Register the usermod by adding #include "usermod_filename.h" in the top and registerUsermod(new MyUsermodClass()) in the bottom of usermods_list.cpp
*/
classFixUnreachableNetServices:publicUsermod
{
private:
//Private class members. You can declare variables and functions only accessible to your usermod here
unsignedlongm_lastTime=0;
// declare required variables
unsignedlongm_pingDelayMs=60000;
unsignedlongm_connectedWiFi=0;
ping_optionm_pingOpt;
unsignedintm_pingCount=0;
boolm_updateConfig=false;
public:
//Functions called by WLED
/**
* setup() is called once at boot. WiFi is not yet connected at this point.
* You can use it to initialize variables, sensors or similar.
*/
voidsetup()
{
//Serial.println("Hello from my usermod!");
}
/**
* connected() is called every time the WiFi is (re)connected
The JSON IR remote enables users to customize IR remote behavior without writing custom code and compiling.
It also allows using any remote compatible with your IR receiver. Using the JSON IR remote, you can
map buttons from any remote to any HTTP request API or JSON API command.
## Usage
* Upload the IR config file, named _ir.json_ to your board using the [ip address]/edit url. Pick from one of the included files or create your own.
* On the config > LED settings page, set the correct IR pin.
* On the config > Sync Interfaces page, select "JSON Remote" as the Infrared remote.
## Modification
* See if there is a json file with the same number of buttons as your remote. Many remotes will have the same internals and emit the same codes but have different labels.
* In the ir.json file, each key will be the hex encoded IR code.
* The "cmd" property will be the HTTP Request API or JSON API to execute when that button is pressed.
* A limited number of c functions are supported (!incBrightness, !decBrightness, !presetFallback)
* When using !presetFallback, include properties PL (preset to load), FX (effect to fall back to) and FP (palette to fall back to)
* If the command is _repeatable_ and does not contain the "~" character, add a "rpt": true property.
* Other properties are ignored, but having a label property may help when editing.
"label": "Preset 1 or fallback to Saw - Party"}, // c function
}
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.