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
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
- Fixed preset only disabling on second effect/color change
#### Build 2106241
- BREAKING: Added ability for usermods to force a config save if config incomplete. `readFromConfig()` needs to return a `bool` to indicate if the config is complete
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.
-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:
-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:
;; ARDUINO_USB_CDC_ON_BOOT
lib_deps=
${env.lib_deps}
makuna/NeoPixelBus @ 2.6.9
https://github.com/pbolduc/AsyncTCP.git @ 1.2.0
[esp32s3]
;; generic definitions for all ESP32-S3 boards
build_flags=-g
-DESP32
-DARDUINO_ARCH_ESP32
-DARDUINO_ARCH_ESP32S3
-DCONFIG_IDF_TARGET_ESP32S3
-D CONFIG_ASYNC_TCP_USE_WDT=0
-DCO
;; 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:
-D ARDUINO_USB_CDC_ON_BOOT=0 -D ARDUINO_USB_MSC_ON_BOOT=0 -D ARDUINO_DFU_ON_BOOT=0 -D ARDUINO_USB_MODE=1 ;; for boards with serial-to-USB chip
;-D ARDUINO_USB_CDC_ON_BOOT=1 -D ARDUINO_USB_MSC_ON_BOOT=0 -D ARDUINO_DFU_ON_BOOT=0 ; -D ARDUINO_USB_MODE=0 ;; for boards with USB-OTG connector only (USBCDC or "TinyUSB")
;-D WLED_DEBUG
lib_deps=${esp32s3.lib_deps}
board_build.partitions=tools/WLED_ESP32_8MB.csv
board_build.f_flash=80000000L
board_build.flash_mode=qio
; board_build.flash_mode = dio ;; try this if you have problems at startup
monitor_filters=esp32_exception_decoder
[env:esp32s3dev_8MB_PSRAM]
;; ESP32-TinyS3 development board, with 8MB FLASH and 8MB PSRAM (memory_type: qio_opi, qio_qspi, or opi_opi)
;board = um_tinys3 ; -> needs workaround from https://github.com/Aircoookie/WLED/pull/2905#issuecomment-1328049860
;board = esp32s3box ; -> error: 'esp32_adc2gpio' was not declared in this scope
board=esp32-s3-devkitc-1 ; -> compiles, but does not support PSRAM
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
- 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
- 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
@@ -36,6 +37,7 @@ A fast and feature-rich implementation of an ESP8266/ESP32 webserver to control
- MQTT
- Blynk IoT
- 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))
- Alexa voice control (including dimming and color)
@@ -47,54 +49,37 @@ A fast and feature-rich implementation of an ESP8266/ESP32 webserver to control
## 📲 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)!
[On this page](https://github.com/Aircoookie/WLED/wiki/Learning-the-ropes) you can find excellent tutorials made by the community and helpful tools to help you get your new lamp up and running!
[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!
Analog/non-addressable | any | Requires additional circuitry
## 🧊 Compatible PC RGB Fans and ARGB accessories
Brand | Model | Comments
|---|---|---|
Corsair | HD120 Fan | Uses WS2812B, data-in only
PCCOOLER | Moonlight 5-pack Fans | Uses WS2812B, includes Data-out connector to keep each fan uniquely addressable if wired in series like traditional LED strips
Any | 5v 3-pin ARGB for PC | Any PC RGB device that supports the 5v 3-pin ARGB motherboard header should work fine with WLED. All the major motherboard vendors support the Corsair HD120 and PCCOOLER fans listed, so we can safely assume any device that supports motherboard ARGB 5V 3-Pin standard will work with WLED.
## 💾 Compatible hardware
See [here](https://kno.wled.ge/basics/compatible-hardware)!
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 photosensitive epilepsy 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.
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
top[F("help4Pins")]=F("SCL,SDA");// help for Settings page
DEBUG_PRINTLN(F("BME280 config saved."));
}
// Read Usermod Config Settings
boolreadFromConfig(JsonObject&root)
{
// 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)
int8_tnewPin[2];for(bytei=0;i<2;i++)newPin[i]=ioPin[i];// prepare to note changed pins
JsonObjecttop=root[FPSTR(_name)];
if(top.isNull()){
DEBUG_PRINT(F(_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
top["great"]=userVar0;//save this var persistently whenever settings are saved
top["great"]=userVar0;//save these vars persistently whenever settings are saved
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 once immediately after boot)
* 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
*/
voidreadFromConfig(JsonObject&root)
boolreadFromConfig(JsonObject&root)
{
JsonObjecttop=root["top"];
userVar0=top["great"]|42;//The value right of the pipe "|" is the default value in case your setting was not present in cfg.json (e.g. first boot)
// 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 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.
This usermod-v2 modification performs a ping request to the local IP address every 60 seconds. By this procedure the net services of WLED remains accessible in some problematic WLAN environments.
**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.
**Webinterface**: The number of pings and reconnects is displayed on the info page in the web interface.
_Story:_
Unfortunately, with all ESP projects where a web server or other network services are running, I have the problem that after some time the web server is no longer accessible. Now I found out that the connection is at least reestablished when a ping request is executed by the device.
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 for 60 seconds until the next ping request.
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.
#warning "Usermod FixUnreachableNetServices works only with ESP8266 builds"
classFixUnreachableNetServices:publicUsermod
{
};
#endif
#if defined(ESP8266)
#include<ping.h>
/*
@@ -23,116 +31,141 @@
* 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;
classFixUnreachableNetServices:publicUsermod
{
private:
//Private class members. You can declare variables and functions only accessible to your usermod here
unsignedlongm_lastTime=0;
// desclare required variables
constunsignedintPingDelayMs=60000;
unsignedlongm_connectedWiFi=0;
ping_optionm_pingOpt;
unsignedintm_pingCount=0;
// declare required variables
unsignedlongm_pingDelayMs=60000;
unsignedlongm_connectedWiFi=0;
ping_optionm_pingOpt;
unsignedintm_pingCount=0;
boolm_updateConfig=false;
public:
//Functions called by WLED
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!");
}
/**
* 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
* Use it to initialize network interfaces
*/
voidconnected()
{
//Serial.println("Connected to WiFi!");
/*
* connected() is called every time the WiFi is (re)connected
* Use it to initialize network interfaces
*/
voidconnected(){
//Serial.println("Connected to WiFi!");
++m_connectedWiFi;
++m_connectedWiFi;
// initialize ping_options structure
memset(&m_pingOpt,0,sizeof(structping_option));
m_pingOpt.count=1;
m_pingOpt.ip=WiFi.localIP();
// initialize ping_options structure
memset(&m_pingOpt,0,sizeof(structping_option));
m_pingOpt.count=1;
m_pingOpt.ip=WiFi.localIP();
}
}
/*
* 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.
This modification performs a ping request to the local IP address every 60 seconds. By this procedure the web server remains accessible in some problematic WLAN environments.
The modification works with static or DHCP IP address configuration
_Story:_
Unfortunately, with all ESP projects where a web server or other network services are running, I have the problem that after some time the web server is no longer accessible. Now I found out that the connection is at least reestablished when a ping request is executed by the device.
With this modification, in the worst case, the network functions are not available for 60 seconds until the next ping request.
## Installation
Copy and replace the file `usermod.cpp` in wled00 directory.
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.
This simple usermod allows attaching a PIR sensor like the AM312 and publish the readings over MQTT. A message is sent when motion is detected as well as when motion has stopped.
This usermod has only been tested with the AM312 sensor though should work for any other PIR sensor. Note that this does not control the LED strip directly, it only publishes MQTT readings for use with other integrations like Home Assistant.
## Installation
Copy and replace the file `usermod.cpp` in wled00 directory.
I use the PIR Sensor to automatically turn on the WLED analog clock in my home office room when I am there.
The LED strip is switched [using a relay](https://github.com/Aircoookie/WLED/wiki/Control-a-relay-with-WLED) to keep the power consumption low when it is switched off.
## Webinterface
## Webinterface
The info page in the web interface shows the items below
- the state of the sensor. By clicking on the state the sensor can be deactivated/activated.
**I recommend to deactivate the sensor before installing an OTA update**.
| PIRenabled | bool | Deactivdate/activate the sensor |
| PIRoffSec | 60 to 43200 | Off timer seconds |
The info page in the web interface shows the remaining time of the off timer. Usermod can also be temporarily disbled/enabled from the info page by clicking PIR button.
## Sensor connection
My setup uses an HC-SR501 sensor, a HC-SR505 should also work.
My setup uses an HC-SR501 or HC-SR602 sensor, an HC-SR505 should also work.
The usermod uses GPIO13 (D1 mini pin D7) for the sensor signal.
The usermod uses GPIO13 (D1 mini pin D7) by default for the sensor signal, but can be changed in the Usermod settings page.
[This example page](http://www.esp8266learning.com/wemos-mini-pir-sensor-example.php) describes how to connect the sensor.
Use the potentiometers on the sensor to set the time-delay to the minimum and the sensitivity to about half, or slightly above.
Use the potentiometers on the sensor to set the timedelay to the minimum and the sensitivity to about half, or slightly above.
You can also use usermod's off timer instead of sensor's. In such case rotate the potentiometer to its shortest time possible (or use SR602 which lacks such potentiometer).
## Usermod installation
1. Copy the file `usermod_PIR_sensor_switch.h` to the `wled00` directory.
2. Register the usermod by adding `#include "usermod_PIR_sensor_switch.h"` in the top and `registerUsermod(new PIRsensorSwitch());` in the bottom of `usermods_list.cpp`.
**NOTE:** Usermod has been included in master branch of WLED so it can be compiled in directly just by defining `-D USERMOD_PIRSWITCH` and optionaly `-D PIR_SENSOR_PIN=16` to override default pin. You can also change the default off time by adding `-D PIR_SENSOR_OFF_SEC=30`.
Example **usermods_list.cpp**:
## API to enable/disable the PIR sensor from outside. For example from another usermod:
To query or change the PIR sensor state the methods `bool PIRsensorEnabled()` and `void EnablePIRsensor(bool enable)` are available.
When the PIR sensor state changes an MQTT message is broadcasted with topic `wled/deviceMAC/motion` and message `on` or `off`.
Usermod can also be configured to send just the MQTT message but not change WLED state using settings page as well as responding to motion only at night
(assuming NTP and lattitude/longitude are set to determine sunrise/sunset times).
### There are two options to get access to the usermod instance:
1. Include `usermod_PIR_sensor_switch.h`**before** you include other usermods in `usermods_list.cpp'
or
2. Use `#include "usermod_PIR_sensor_switch.h"` at the top of the `usermod.h` where you need it.
**Example usermod.h :**
```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)
In this mode IR sensor will disable PIR when light ON by remote controller and enable PIR when light OFF.
Usermod can be configured via the Usermods settings page.
1. Copy the file `usermod_PIR_sensor_switch.h` to the `wled00` directory.
2. Register the usermod by adding `#include "usermod_PIR_sensor_switch.h"` in the top and `registerUsermod(new PIRsensorSwitch());` in the bottom of `usermods_list.cpp`.
3. Add to the line 237, on `wled.h` in the `wled00` directory:
*`PIRenabled` - enable/disable usermod
*`pin` - dynamically change GPIO pin where PIRsensor is attached to ESP
*`PIRoffSec` - number of seconds after PIR sensor deactivates when usermod triggers Off preset (or turns WLED off)
*`on-preset` - preset triggered when PIR activates (if this is 0 it will just turn WLED on)
*`off-preset` - preset triggered when PIR deactivates (if this is 0 it will just turn WLED off)
*`nighttime-only` - enable triggering only between sunset and sunrise (you will need to set up _NTP_, _Lat_&_Lon_ in Time & Macro settings)
*`mqtt-only` - send only MQTT messages, do not interact with WLED
*`off-only` - only trigger presets or turn WLED on/off if WLED is not already on (displaying effect)
*`notifications` - enable or disable sending notifications to other WLED instances using Sync button
`WLED_GLOBAL bool m_PIRenabled _INIT(true); // enable PIR sensor`
4. On `ir.cpp` in the `wled00` directory, add to the IR controller's mapping (beyond line 200):
- To the off button:
`m_PIRenabled = true;`
- To the on button:
`m_PIRenabled = false;`
5. Edit line 40, on `usermod_PIR_sensor_switch.h` in the `wled00` directory:
`\\bool m_PIRenabled = true;`
Have fun - @gegu
Have fun - @gegu&@blazoncek
## Change log
2021-04
* Adaptation for runtime configuration.
2021-11
* Added information about dynamic configuration options
* Added option to temporary enable/disble usermod from WLED UI (Info dialog)
2022-11
* Added compile time option for off timer.
* Added Home Assistant autodiscovery MQTT broadcast.
* 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
v2 Usermod to to control PWM fan with RPM feedback and temperature control
This usermod requires the Dallas Temperature usermod to obtain temperature information. If it's not available, the fan will run at 100% speed.
If the fan does not have _tachometer_ (RPM) output you can set the _tachometer-pin_ to -1 to disable that feature.
You can also set the thershold temperature at which fan runs at lowest speed. If the measured temperature is 3°C greater than the threshold temperature, the fan will run at 100%.
If the _tachometer_ is supported, the current speed (in RPM) will be displayed on the WLED Info page.
## Installation
Add the compile-time option `-D USERMOD_PWM_FAN` to your `platformio.ini` (or `platformio_override.ini`) or use `#define USERMOD_PWM_FAN` in `myconfig.h`.
You will also need `-D USERMOD_DALLASTEMPERATURE`.
### Define Your Options
All of the parameters are configured during run-time using Usermods settings page.
This includes:
* PWM output pin (can be configured at compile time `-D PWM_PIN=xx`)
* tachometer input pin (can be configured at compile time `-D TACHO_PIN=xx`)
* sampling frequency in seconds
* threshold temperature in degees C
_NOTE:_ You may also need to tweak Dallas Temperature usermod sampling frequency to match PWM fan sampling frequency.
### PlatformIO requirements
No special requirements.
## Control PWM fan speed using JSON API
e.g. you can use `{"PWM-fan":{"speed":30,"lock":true}}` to lock fan speed to 30 percent of maximum. (replace 30 with an arbitrary value between 0 and 100)
If you include `speed` property you can set fan speed as a percentage (%) of maximum speed.
If you include `lock` property you can lock (_true_) or unlock (_false_) the fan speed.
If the fan speed is unlocked, it will revert to temperature controlled speed on the next update cycle. Once fan speed is locked it will remain so until it is unlocked by the next API call.
uint8_tnumberOfInterrupsInOneSingleRotation=2;// Number of interrupts ESP32 sees on tacho signal on a single fan rotation. All the fans I've seen trigger two interrups.
uint8_tpwmValuePct=0;
// strings to reduce flash memory usage (used more than twice)
These files allow WLED 0.9.1 to report the temp sensor on the Quinled board to MQTT. I use it to report the board temp to Home Assistant via MQTT, so it will send notifications if something happens and the board start to heat up.
This code uses Aircookie's WLED software. It has a premade file for user modifications. I use it to publish the temperature from the dallas temperature sensor on the Quinled board. The entries for the top of the WLED00 file, initializes the required libraries, and variables for the sensor. The .ino file waits for 60 seconds, and checks to see if the MQTT server is connected (thanks Aircoookie). It then poles the sensor, and published it using the MQTT service already running, using the main topic programmed in the WLED UI.
Installation of file: Copy and replace file in wled00 directory
## Project link
* [QuinLED-Dig-Uno](https://quinled.info/2018/09/15/quinled-dig-uno/) - Project link
### Platformio requirements
Uncomment `DallasTemperature@~3.8.0`,`OneWire@~2.3.5 under``[common]` section in `platformio.ini`:
Gets the time from I2C RTC module on boot. This allows clock operation if WiFi is not available.
The stored time is updated each time NTP is synced.
## Installation
Add the build flag `-D USERMOD_RTC` to your platformio environment.
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.