code spell checking - part3 (usermods)
if you can spell Fahrenheit, you can't spell Celsius. And vice versa :-)
This commit is contained in:
@@ -317,7 +317,7 @@ class Animated_Staircase : public Usermod {
|
|||||||
seg.setOption(SEG_OPTION_ON, true);
|
seg.setOption(SEG_OPTION_ON, true);
|
||||||
}
|
}
|
||||||
strip.trigger(); // force strip update
|
strip.trigger(); // force strip update
|
||||||
stateChanged = true; // inform external dvices/UI of change
|
stateChanged = true; // inform external devices/UI of change
|
||||||
colorUpdated(CALL_MODE_DIRECT_CHANGE);
|
colorUpdated(CALL_MODE_DIRECT_CHANGE);
|
||||||
DEBUG_PRINTLN(F("Animated Staircase disabled."));
|
DEBUG_PRINTLN(F("Animated Staircase disabled."));
|
||||||
}
|
}
|
||||||
@@ -501,7 +501,7 @@ class Animated_Staircase : public Usermod {
|
|||||||
bottomEchoPin = top[FPSTR(_bottomEcho_pin)] | bottomEchoPin;
|
bottomEchoPin = top[FPSTR(_bottomEcho_pin)] | bottomEchoPin;
|
||||||
|
|
||||||
topMaxDist = top[FPSTR(_topEchoCm)] | topMaxDist;
|
topMaxDist = top[FPSTR(_topEchoCm)] | topMaxDist;
|
||||||
topMaxDist = min(150,max(30,(int)topMaxDist)); // max distnace ~1.5m (a lag of 9ms may be expected)
|
topMaxDist = min(150,max(30,(int)topMaxDist)); // max distance ~1.5m (a lag of 9ms may be expected)
|
||||||
bottomMaxDist = top[FPSTR(_bottomEchoCm)] | bottomMaxDist;
|
bottomMaxDist = top[FPSTR(_bottomEchoCm)] | bottomMaxDist;
|
||||||
bottomMaxDist = min(150,max(30,(int)bottomMaxDist)); // max distance ~1.5m (a lag of 9ms may be expected)
|
bottomMaxDist = min(150,max(30,(int)bottomMaxDist)); // max distance ~1.5m (a lag of 9ms may be expected)
|
||||||
|
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ Maximum distance for ultrasonic sensor can be configured as the time needed for
|
|||||||
You _may_ need to use 10k pull-down resistors on the selected PIR pins, depending on the sensor.
|
You _may_ need to use 10k pull-down resistors on the selected PIR pins, depending on the sensor.
|
||||||
|
|
||||||
## WLED configuration
|
## WLED configuration
|
||||||
1. In the WLED UI, confgure a segment for each step. The lowest step of the stairs is the
|
1. In the WLED UI, configure a segment for each step. The lowest step of the stairs is the
|
||||||
lowest segment id.
|
lowest segment id.
|
||||||
2. Save your segments into a preset.
|
2. Save your segments into a preset.
|
||||||
3. Ideally, add the preset in the config > LED setup menu to the "apply
|
3. Ideally, add the preset in the config > LED setup menu to the "apply
|
||||||
@@ -91,7 +91,7 @@ To enable the usermod again, use `"enabled":true`.
|
|||||||
Alternatively you can use _Usermod_ Settings page where you can change other parameters as well.
|
Alternatively you can use _Usermod_ Settings page where you can change other parameters as well.
|
||||||
|
|
||||||
### Changing animation parameters and detection range of the ultrasonic HC-SR04 sensor
|
### Changing animation parameters and detection range of the ultrasonic HC-SR04 sensor
|
||||||
Using _Usermod_ Settings page you can define different usermod parameters, includng sensor pins, delay between segment activation etc.
|
Using _Usermod_ Settings page you can define different usermod parameters, including sensor pins, delay between segment activation etc.
|
||||||
|
|
||||||
When an ultrasonic sensor is enabled you can enter maximum detection distance in centimeters separately for top and bottom sensors.
|
When an ultrasonic sensor is enabled you can enter maximum detection distance in centimeters separately for top and bottom sensors.
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ The luminance is displayed in both the Info section of the web UI, as well as pu
|
|||||||
- This must be added under `lib_deps` in your `platformio.ini` (or `platformio_override.ini`).
|
- This must be added under `lib_deps` in your `platformio.ini` (or `platformio_override.ini`).
|
||||||
- Data is published over MQTT - make sure you've enabled the MQTT sync interface.
|
- Data is published over MQTT - make sure you've enabled the MQTT sync interface.
|
||||||
|
|
||||||
## Compiliation
|
## Compilation
|
||||||
|
|
||||||
To enable, compile with `USERMOD_BH1750` defined (e.g. in `platformio_override.ini`)
|
To enable, compile with `USERMOD_BH1750` defined (e.g. in `platformio_override.ini`)
|
||||||
```ini
|
```ini
|
||||||
|
|||||||
@@ -28,7 +28,7 @@
|
|||||||
#define USERMOD_BH1750_FIRST_MEASUREMENT_AT 10000
|
#define USERMOD_BH1750_FIRST_MEASUREMENT_AT 10000
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// only report if differance grater than offset value
|
// only report if difference grater than offset value
|
||||||
#ifndef USERMOD_BH1750_OFFSET_VALUE
|
#ifndef USERMOD_BH1750_OFFSET_VALUE
|
||||||
#define USERMOD_BH1750_OFFSET_VALUE 2 // WLEDMM this makes more sense
|
#define USERMOD_BH1750_OFFSET_VALUE 2 // WLEDMM this makes more sense
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ private:
|
|||||||
|
|
||||||
// set the default pins based on the architecture, these get overridden by Usermod menu settings
|
// set the default pins based on the architecture, these get overridden by Usermod menu settings
|
||||||
#ifdef ESP8266
|
#ifdef ESP8266
|
||||||
//uint8_t RST_PIN = 16; // Uncoment for Heltec WiFi-Kit-8
|
//uint8_t RST_PIN = 16; // Un-comment for Heltec WiFi-Kit-8
|
||||||
#endif
|
#endif
|
||||||
int8_t ioPin[2] = {i2c_scl, i2c_sda}; // I2C pins: SCL, SDA...defaults to Arch hardware pins but overridden at setup()
|
int8_t ioPin[2] = {i2c_scl, i2c_sda}; // I2C pins: SCL, SDA...defaults to Arch hardware pins but overridden at setup()
|
||||||
bool initDone = false;
|
bool initDone = false;
|
||||||
@@ -80,7 +80,7 @@ private:
|
|||||||
static const char _name[];
|
static const char _name[];
|
||||||
static const char _enabled[];
|
static const char _enabled[];
|
||||||
|
|
||||||
// Read the BME280/BMP280 Sensor (which one runs depends on whether Celsius or Farenheit being set in Usermod Menu)
|
// Read the BME280/BMP280 Sensor (which one runs depends on whether Celsius or Fahrenheit being set in Usermod Menu)
|
||||||
void UpdateBME280Data(int SensorType)
|
void UpdateBME280Data(int SensorType)
|
||||||
{
|
{
|
||||||
float _temperature, _humidity, _pressure;
|
float _temperature, _humidity, _pressure;
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ If you have an ESP32 board, connect the positive side of the battery to ADC1 (GP
|
|||||||
- 💯 Displays current battery voltage
|
- 💯 Displays current battery voltage
|
||||||
- 🚥 Displays battery level
|
- 🚥 Displays battery level
|
||||||
- 🚫 Auto-off with configurable Threshold
|
- 🚫 Auto-off with configurable Threshold
|
||||||
- 🚨 Low power indicator with many configuration posibilities
|
- 🚨 Low power indicator with many configuration possibilities
|
||||||
|
|
||||||
## 🎈 Installation
|
## 🎈 Installation
|
||||||
|
|
||||||
@@ -41,7 +41,7 @@ define `USERMOD_BATTERY` in `wled00/my_config.h`
|
|||||||
| `USERMOD_BATTERY_MEASUREMENT_INTERVAL` | ms | battery check interval. defaults to 30 seconds |
|
| `USERMOD_BATTERY_MEASUREMENT_INTERVAL` | ms | battery check interval. defaults to 30 seconds |
|
||||||
| `USERMOD_BATTERY_MIN_VOLTAGE` | v | minimum battery voltage. default is 2.6 (18650 battery standard) |
|
| `USERMOD_BATTERY_MIN_VOLTAGE` | v | minimum battery voltage. default is 2.6 (18650 battery standard) |
|
||||||
| `USERMOD_BATTERY_MAX_VOLTAGE` | v | maximum battery voltage. default is 4.2 (18650 battery standard) |
|
| `USERMOD_BATTERY_MAX_VOLTAGE` | v | maximum battery voltage. default is 4.2 (18650 battery standard) |
|
||||||
| `USERMOD_BATTERY_TOTAL_CAPACITY` | mAh | the capacity of all cells in parralel sumed up |
|
| `USERMOD_BATTERY_TOTAL_CAPACITY` | mAh | the capacity of all cells in parallel summed up |
|
||||||
| `USERMOD_BATTERY_CALIBRATION` | | offset / calibration number, fine tune the measured voltage by the microcontroller |
|
| `USERMOD_BATTERY_CALIBRATION` | | offset / calibration number, fine tune the measured voltage by the microcontroller |
|
||||||
| Auto-Off | --- | --- |
|
| Auto-Off | --- | --- |
|
||||||
| `USERMOD_BATTERY_AUTO_OFF_ENABLED` | true/false | enables auto-off |
|
| `USERMOD_BATTERY_AUTO_OFF_ENABLED` | true/false | enables auto-off |
|
||||||
|
|||||||
@@ -49,7 +49,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
// how many seconds after boot to take first measurement, 90 seconds
|
// how many seconds after boot to take first measurement, 90 seconds
|
||||||
// 90 gives enough time to OTA update firmware if this crashses
|
// 90 gives enough time to OTA update firmware if this crashes
|
||||||
#ifndef USERMOD_DHT_FIRST_MEASUREMENT_AT
|
#ifndef USERMOD_DHT_FIRST_MEASUREMENT_AT
|
||||||
#define USERMOD_DHT_FIRST_MEASUREMENT_AT 90000
|
#define USERMOD_DHT_FIRST_MEASUREMENT_AT 90000
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -58,7 +58,7 @@ class MyExampleUsermod : public Usermod {
|
|||||||
long testLong;
|
long testLong;
|
||||||
int8_t testPins[2];
|
int8_t testPins[2];
|
||||||
|
|
||||||
// any private methods should go here (non-inline methosd should be defined out of class)
|
// any private methods should go here (non-inline method should be defined out of class)
|
||||||
void publishMqtt(const char* state, bool retain = false); // example for publishing MQTT message
|
void publishMqtt(const char* state, bool retain = false); // example for publishing MQTT message
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -15,23 +15,23 @@ OneWire oneWire(13);
|
|||||||
DallasTemperature sensor(&oneWire);
|
DallasTemperature sensor(&oneWire);
|
||||||
long temptimer = millis();
|
long temptimer = millis();
|
||||||
long lastMeasure = 0;
|
long lastMeasure = 0;
|
||||||
#define Celsius // Show temperature mesaurement in Celcius otherwise is in Fahrenheit
|
#define Celsius // Show temperature measurement in Celsius otherwise is in Fahrenheit
|
||||||
|
|
||||||
// If display does not work or looks corrupted check the
|
// If display does not work or looks corrupted check the
|
||||||
// constructor reference:
|
// constructor reference:
|
||||||
// https://github.com/olikraus/u8g2/wiki/u8x8setupcpp
|
// https://github.com/olikraus/u8g2/wiki/u8x8setupcpp
|
||||||
// or check the gallery:
|
// or check the gallery:
|
||||||
// https://github.com/olikraus/u8g2/wiki/gallery
|
// https://github.com/olikraus/u8g2/wiki/gallery
|
||||||
// --> First choise of cheap I2C OLED 128X32 0.91"
|
// --> First choice of cheap I2C OLED 128X32 0.91"
|
||||||
U8X8_SSD1306_128X32_UNIVISION_HW_I2C u8x8(U8X8_PIN_NONE, U8X8_PIN_SCL, U8X8_PIN_SDA); // Pins are Reset, SCL, SDA
|
U8X8_SSD1306_128X32_UNIVISION_HW_I2C u8x8(U8X8_PIN_NONE, U8X8_PIN_SCL, U8X8_PIN_SDA); // Pins are Reset, SCL, SDA
|
||||||
// --> Second choise of cheap I2C OLED 128X64 0.96" or 1.3"
|
// --> Second choice of cheap I2C OLED 128X64 0.96" or 1.3"
|
||||||
//U8X8_SSD1306_128X64_NONAME_HW_I2C u8x8(U8X8_PIN_NONE, U8X8_PIN_SCL, U8X8_PIN_SDA); // Pins are Reset, SCL, SDA
|
//U8X8_SSD1306_128X64_NONAME_HW_I2C u8x8(U8X8_PIN_NONE, U8X8_PIN_SCL, U8X8_PIN_SDA); // Pins are Reset, SCL, SDA
|
||||||
// gets called once at boot. Do all initialization that doesn't depend on
|
// gets called once at boot. Do all initialization that doesn't depend on
|
||||||
// network here
|
// network here
|
||||||
void userSetup() {
|
void userSetup() {
|
||||||
sensor.begin(); //Start Dallas temperature sensor
|
sensor.begin(); //Start Dallas temperature sensor
|
||||||
u8x8.begin();
|
u8x8.begin();
|
||||||
//u8x8.setFlipMode(1); //Uncoment if using WLED Wemos shield
|
//u8x8.setFlipMode(1); //Un-comment if using WLED Wemos shield
|
||||||
u8x8.setPowerSave(0);
|
u8x8.setPowerSave(0);
|
||||||
u8x8.setContrast(10); //Contrast setup will help to preserve OLED lifetime. In case OLED need to be brighter increase number up to 255
|
u8x8.setContrast(10); //Contrast setup will help to preserve OLED lifetime. In case OLED need to be brighter increase number up to 255
|
||||||
u8x8.setFont(u8x8_font_chroma48medium8_r);
|
u8x8.setFont(u8x8_font_chroma48medium8_r);
|
||||||
@@ -71,7 +71,7 @@ void userLoop() {
|
|||||||
if (mqtt != nullptr)
|
if (mqtt != nullptr)
|
||||||
{
|
{
|
||||||
sensor.requestTemperatures();
|
sensor.requestTemperatures();
|
||||||
//Gets prefered temperature scale based on selection in definitions section
|
//Gets preferred temperature scale based on selection in definitions section
|
||||||
#ifdef Celsius
|
#ifdef Celsius
|
||||||
float board_temperature = sensor.getTempCByIndex(0);
|
float board_temperature = sensor.getTempCByIndex(0);
|
||||||
#else
|
#else
|
||||||
@@ -138,11 +138,11 @@ void userLoop() {
|
|||||||
// First row with Wifi name
|
// First row with Wifi name
|
||||||
u8x8.setCursor(1, 0);
|
u8x8.setCursor(1, 0);
|
||||||
u8x8.print(knownSsid.substring(0, u8x8.getCols() > 1 ? u8x8.getCols() - 2 : 0));
|
u8x8.print(knownSsid.substring(0, u8x8.getCols() > 1 ? u8x8.getCols() - 2 : 0));
|
||||||
// Print `~` char to indicate that SSID is longer, than owr dicplay
|
// Print `~` char to indicate that SSID is longer than our display
|
||||||
if (knownSsid.length() > u8x8.getCols())
|
if (knownSsid.length() > u8x8.getCols())
|
||||||
u8x8.print("~");
|
u8x8.print("~");
|
||||||
|
|
||||||
// Second row with IP or Psssword
|
// Second row with IP or Password
|
||||||
u8x8.setCursor(1, 1);
|
u8x8.setCursor(1, 1);
|
||||||
// Print password in AP mode and if led is OFF.
|
// Print password in AP mode and if led is OFF.
|
||||||
if (apActive && bri == 0)
|
if (apActive && bri == 0)
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
void UpdateBME280Data();
|
void UpdateBME280Data();
|
||||||
|
|
||||||
#define Celsius // Show temperature mesaurement in Celcius otherwise is in Fahrenheit
|
#define Celsius // Show temperature measurement in Celsius otherwise is in Fahrenheit
|
||||||
BME280I2C bme; // Default : forced mode, standby time = 1000 ms
|
BME280I2C bme; // Default : forced mode, standby time = 1000 ms
|
||||||
// Oversampling = pressure ×1, temperature ×1, humidity ×1, filter off,
|
// Oversampling = pressure ×1, temperature ×1, humidity ×1, filter off,
|
||||||
|
|
||||||
@@ -20,14 +20,14 @@ uint8_t SDA_PIN = 21;
|
|||||||
#else //ESP8266 boards
|
#else //ESP8266 boards
|
||||||
uint8_t SCL_PIN = 5;
|
uint8_t SCL_PIN = 5;
|
||||||
uint8_t SDA_PIN = 4;
|
uint8_t SDA_PIN = 4;
|
||||||
// uint8_t RST_PIN = 16; // Uncoment for Heltec WiFi-Kit-8
|
// uint8_t RST_PIN = 16; // Un-comment for Heltec WiFi-Kit-8
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//The SCL and SDA pins are defined here.
|
//The SCL and SDA pins are defined here.
|
||||||
//ESP8266 Wemos D1 mini board use SCL=5 SDA=4 while ESP32 Wemos32 mini board use SCL=22 SDA=21
|
//ESP8266 Wemos D1 mini board use SCL=5 SDA=4 while ESP32 Wemos32 mini board use SCL=22 SDA=21
|
||||||
#define U8X8_PIN_SCL SCL_PIN
|
#define U8X8_PIN_SCL SCL_PIN
|
||||||
#define U8X8_PIN_SDA SDA_PIN
|
#define U8X8_PIN_SDA SDA_PIN
|
||||||
//#define U8X8_PIN_RESET RST_PIN // Uncoment for Heltec WiFi-Kit-8
|
//#define U8X8_PIN_RESET RST_PIN // Un-comment for Heltec WiFi-Kit-8
|
||||||
|
|
||||||
// If display does not work or looks corrupted check the
|
// If display does not work or looks corrupted check the
|
||||||
// constructor reference:
|
// constructor reference:
|
||||||
@@ -36,9 +36,9 @@ uint8_t SDA_PIN = 4;
|
|||||||
// https://github.com/olikraus/u8g2/wiki/gallery
|
// https://github.com/olikraus/u8g2/wiki/gallery
|
||||||
// --> First choise of cheap I2C OLED 128X32 0.91"
|
// --> First choise of cheap I2C OLED 128X32 0.91"
|
||||||
U8X8_SSD1306_128X32_UNIVISION_HW_I2C u8x8(U8X8_PIN_NONE, U8X8_PIN_SCL, U8X8_PIN_SDA); // Pins are Reset, SCL, SDA
|
U8X8_SSD1306_128X32_UNIVISION_HW_I2C u8x8(U8X8_PIN_NONE, U8X8_PIN_SCL, U8X8_PIN_SDA); // Pins are Reset, SCL, SDA
|
||||||
// --> Second choise of cheap I2C OLED 128X64 0.96" or 1.3"
|
// --> Second choice of cheap I2C OLED 128X64 0.96" or 1.3"
|
||||||
//U8X8_SSD1306_128X64_NONAME_HW_I2C u8x8(U8X8_PIN_NONE, U8X8_PIN_SCL, U8X8_PIN_SDA); // Pins are Reset, SCL, SDA
|
//U8X8_SSD1306_128X64_NONAME_HW_I2C u8x8(U8X8_PIN_NONE, U8X8_PIN_SCL, U8X8_PIN_SDA); // Pins are Reset, SCL, SDA
|
||||||
// --> Third choise of Heltec WiFi-Kit-8 OLED 128X32 0.91"
|
// --> Third choice of Heltec WiFi-Kit-8 OLED 128X32 0.91"
|
||||||
//U8X8_SSD1306_128X32_UNIVISION_HW_I2C u8x8(U8X8_PIN_RESET, U8X8_PIN_SCL, U8X8_PIN_SDA); // Constructor for Heltec WiFi-Kit-8
|
//U8X8_SSD1306_128X32_UNIVISION_HW_I2C u8x8(U8X8_PIN_RESET, U8X8_PIN_SCL, U8X8_PIN_SDA); // Constructor for Heltec WiFi-Kit-8
|
||||||
// gets called once at boot. Do all initialization that doesn't depend on network here
|
// gets called once at boot. Do all initialization that doesn't depend on network here
|
||||||
|
|
||||||
@@ -181,11 +181,11 @@ void userLoop() {
|
|||||||
// First row with Wifi name
|
// First row with Wifi name
|
||||||
u8x8.setCursor(1, 0);
|
u8x8.setCursor(1, 0);
|
||||||
u8x8.print(knownSsid.substring(0, u8x8.getCols() > 1 ? u8x8.getCols() - 2 : 0));
|
u8x8.print(knownSsid.substring(0, u8x8.getCols() > 1 ? u8x8.getCols() - 2 : 0));
|
||||||
// Print `~` char to indicate that SSID is longer, than owr dicplay
|
// Print `~` char to indicate that SSID is longer than our display
|
||||||
if (knownSsid.length() > u8x8.getCols())
|
if (knownSsid.length() > u8x8.getCols())
|
||||||
u8x8.print("~");
|
u8x8.print("~");
|
||||||
|
|
||||||
// Second row with IP or Psssword
|
// Second row with IP or Password
|
||||||
u8x8.setCursor(1, 1);
|
u8x8.setCursor(1, 1);
|
||||||
// Print password in AP mode and if led is OFF.
|
// Print password in AP mode and if led is OFF.
|
||||||
if (apActive && bri == 0)
|
if (apActive && bri == 0)
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
**Attention: This usermod compiles only for ESP8266**
|
**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.
|
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 WiFi environments.
|
||||||
|
|
||||||
The modification works with static or DHCP IP address configuration.
|
The modification works with static or DHCP IP address configuration.
|
||||||
|
|
||||||
@@ -24,7 +24,7 @@ The usermod supports the following state changes:
|
|||||||
|
|
||||||
| JSON key | Value range | Description |
|
| JSON key | Value range | Description |
|
||||||
|-------------|------------------|---------------------------------|
|
|-------------|------------------|---------------------------------|
|
||||||
| PingDelayMs | 5000 to 18000000 | Deactivdate/activate the sensor |
|
| PingDelayMs | 5000 to 18000000 | Deactivate/activate the sensor |
|
||||||
|
|
||||||
Changes also persist after a reboot.
|
Changes also persist after a reboot.
|
||||||
|
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ You can also use usermod's off timer instead of sensor's. In such case rotate th
|
|||||||
|
|
||||||
## Usermod installation
|
## Usermod installation
|
||||||
|
|
||||||
**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`.
|
**NOTE:** Usermod has been included in master branch of WLED so it can be compiled in directly just by defining `-D USERMOD_PIRSWITCH` and optionally `-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`.
|
||||||
|
|
||||||
## API to enable/disable the PIR sensor from outside. For example from another usermod:
|
## API to enable/disable the PIR sensor from outside. For example from another usermod:
|
||||||
|
|
||||||
@@ -31,7 +31,7 @@ To query or change the PIR sensor state the methods `bool PIRsensorEnabled()` an
|
|||||||
|
|
||||||
When the PIR sensor state changes an MQTT message is broadcasted with topic `wled/deviceMAC/motion` and message `on` or `off`.
|
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
|
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).
|
(assuming NTP and latitude/longitude are set to determine sunrise/sunset times).
|
||||||
|
|
||||||
### There are two options to get access to the usermod instance:
|
### There are two options to get access to the usermod instance:
|
||||||
|
|
||||||
@@ -85,7 +85,7 @@ Have fun - @gegu & @blazoncek
|
|||||||
|
|
||||||
2021-11
|
2021-11
|
||||||
* Added information about dynamic configuration options
|
* Added information about dynamic configuration options
|
||||||
* Added option to temporary enable/disble usermod from WLED UI (Info dialog)
|
* Added option to temporary enable/disable usermod from WLED UI (Info dialog)
|
||||||
|
|
||||||
2022-11
|
2022-11
|
||||||
* Added compile time option for off timer.
|
* Added compile time option for off timer.
|
||||||
|
|||||||
@@ -205,7 +205,7 @@ private:
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Read and update PIR sensor state.
|
* Read and update PIR sensor state.
|
||||||
* Initilize/reset switch off timer
|
* Initialize/reset switch off timer
|
||||||
*/
|
*/
|
||||||
bool updatePIRsensorState()
|
bool updatePIRsensorState()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ 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.
|
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.
|
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%.
|
You can also set the threshold 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.
|
If the _tachometer_ is supported, the current speed (in RPM) will be displayed on the WLED Info page.
|
||||||
|
|
||||||
@@ -22,7 +22,7 @@ This includes:
|
|||||||
* PWM output pin (can be configured at compile time `-D PWM_PIN=xx`)
|
* 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`)
|
* tachometer input pin (can be configured at compile time `-D TACHO_PIN=xx`)
|
||||||
* sampling frequency in seconds
|
* sampling frequency in seconds
|
||||||
* threshold temperature in degees C
|
* threshold temperature in degrees Celsius
|
||||||
|
|
||||||
_NOTE:_ You may also need to tweak Dallas Temperature usermod sampling frequency to match PWM fan sampling frequency.
|
_NOTE:_ You may also need to tweak Dallas Temperature usermod sampling frequency to match PWM fan sampling frequency.
|
||||||
|
|
||||||
|
|||||||
@@ -30,7 +30,7 @@
|
|||||||
#define USERMOD_SN_PHOTORESISTOR_RESISTOR_VALUE 10000.0f
|
#define USERMOD_SN_PHOTORESISTOR_RESISTOR_VALUE 10000.0f
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// only report if differance grater than offset value
|
// only report if difference grater than offset value
|
||||||
#ifndef USERMOD_SN_PHOTORESISTOR_OFFSET_VALUE
|
#ifndef USERMOD_SN_PHOTORESISTOR_OFFSET_VALUE
|
||||||
#define USERMOD_SN_PHOTORESISTOR_OFFSET_VALUE 5
|
#define USERMOD_SN_PHOTORESISTOR_OFFSET_VALUE 5
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
* This file allows you to add own functionality to WLED more easily
|
* This file allows you to add own functionality to WLED more easily
|
||||||
* See: https://github.com/Aircoookie/WLED/wiki/Add-own-functionality
|
* See: https://github.com/Aircoookie/WLED/wiki/Add-own-functionality
|
||||||
* EEPROM bytes 2750+ are reserved for your custom use case. (if you extend #define EEPSIZE in const.h)
|
* EEPROM bytes 2750+ are reserved for your custom use case. (if you extend #define EEPSIZE in const.h)
|
||||||
* bytes 2400+ are currently ununsed, but might be used for future wled features
|
* bytes 2400+ are currently unused, but might be used for future wled features
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -144,7 +144,7 @@ void userLoop() {
|
|||||||
// First row with Wifi name
|
// First row with Wifi name
|
||||||
tft.setCursor(1, 1);
|
tft.setCursor(1, 1);
|
||||||
tft.print(knownSsid.substring(0, tftcharwidth > 1 ? tftcharwidth - 1 : 0));
|
tft.print(knownSsid.substring(0, tftcharwidth > 1 ? tftcharwidth - 1 : 0));
|
||||||
// Print `~` char to indicate that SSID is longer, than our dicplay
|
// Print `~` char to indicate that SSID is longer than our display
|
||||||
if (knownSsid.length() > tftcharwidth)
|
if (knownSsid.length() > tftcharwidth)
|
||||||
tft.print("~");
|
tft.print("~");
|
||||||
|
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ Copy the example `platformio_override.ini` to the root directory. This file sho
|
|||||||
* `USERMOD_DALLASTEMPERATURE` - enables this user mod wled00/usermods_list.cpp
|
* `USERMOD_DALLASTEMPERATURE` - enables this user mod wled00/usermods_list.cpp
|
||||||
* `USERMOD_DALLASTEMPERATURE_MEASUREMENT_INTERVAL` - number of milliseconds between measurements, defaults to 60000 ms (60s)
|
* `USERMOD_DALLASTEMPERATURE_MEASUREMENT_INTERVAL` - number of milliseconds between measurements, defaults to 60000 ms (60s)
|
||||||
|
|
||||||
All parameters can be configured at runtime via the Usermods settings page, including pin, temperature in degrees Celsius or Farenheit and measurement interval.
|
All parameters can be configured at runtime via the Usermods settings page, including pin, temperature in degrees Celsius or Fahrenheit and measurement interval.
|
||||||
|
|
||||||
## Project link
|
## Project link
|
||||||
|
|
||||||
|
|||||||
@@ -34,30 +34,30 @@ uint8_t DALLAS_PIN =23;
|
|||||||
uint8_t SCL_PIN = 5;
|
uint8_t SCL_PIN = 5;
|
||||||
uint8_t SDA_PIN = 4;
|
uint8_t SDA_PIN = 4;
|
||||||
uint8_t DALLAS_PIN =13;
|
uint8_t DALLAS_PIN =13;
|
||||||
// uint8_t RST_PIN = 16; // Uncoment for Heltec WiFi-Kit-8
|
// uint8_t RST_PIN = 16; // Un-comment for Heltec WiFi-Kit-8
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//The SCL and SDA pins are defined here.
|
//The SCL and SDA pins are defined here.
|
||||||
//ESP8266 Wemos D1 mini board use SCL=5 SDA=4 while ESP32 Wemos32 mini board use SCL=22 SDA=21
|
//ESP8266 Wemos D1 mini board use SCL=5 SDA=4 while ESP32 Wemos32 mini board use SCL=22 SDA=21
|
||||||
#define U8X8_PIN_SCL SCL_PIN
|
#define U8X8_PIN_SCL SCL_PIN
|
||||||
#define U8X8_PIN_SDA SDA_PIN
|
#define U8X8_PIN_SDA SDA_PIN
|
||||||
//#define U8X8_PIN_RESET RST_PIN // Uncoment for Heltec WiFi-Kit-8
|
//#define U8X8_PIN_RESET RST_PIN // Un-comment for Heltec WiFi-Kit-8
|
||||||
|
|
||||||
// Dallas sensor reading timer
|
// Dallas sensor reading timer
|
||||||
long temptimer = millis();
|
long temptimer = millis();
|
||||||
long lastMeasure = 0;
|
long lastMeasure = 0;
|
||||||
#define Celsius // Show temperature mesaurement in Celcius otherwise is in Fahrenheit
|
#define Celsius // Show temperature measurement in Celsius otherwise is in Fahrenheit
|
||||||
|
|
||||||
// If display does not work or looks corrupted check the
|
// If display does not work or looks corrupted check the
|
||||||
// constructor reference:
|
// constructor reference:
|
||||||
// https://github.com/olikraus/u8g2/wiki/u8x8setupcpp
|
// https://github.com/olikraus/u8g2/wiki/u8x8setupcpp
|
||||||
// or check the gallery:
|
// or check the gallery:
|
||||||
// https://github.com/olikraus/u8g2/wiki/gallery
|
// https://github.com/olikraus/u8g2/wiki/gallery
|
||||||
// --> First choise of cheap I2C OLED 128X32 0.91"
|
// --> First choice of cheap I2C OLED 128X32 0.91"
|
||||||
U8X8_SSD1306_128X32_UNIVISION_HW_I2C u8x8(U8X8_PIN_NONE, U8X8_PIN_SCL, U8X8_PIN_SDA); // Pins are Reset, SCL, SDA
|
U8X8_SSD1306_128X32_UNIVISION_HW_I2C u8x8(U8X8_PIN_NONE, U8X8_PIN_SCL, U8X8_PIN_SDA); // Pins are Reset, SCL, SDA
|
||||||
// --> Second choise of cheap I2C OLED 128X64 0.96" or 1.3"
|
// --> Second choice of cheap I2C OLED 128X64 0.96" or 1.3"
|
||||||
//U8X8_SSD1306_128X64_NONAME_HW_I2C u8x8(U8X8_PIN_NONE, U8X8_PIN_SCL, U8X8_PIN_SDA); // Pins are Reset, SCL, SDA
|
//U8X8_SSD1306_128X64_NONAME_HW_I2C u8x8(U8X8_PIN_NONE, U8X8_PIN_SCL, U8X8_PIN_SDA); // Pins are Reset, SCL, SDA
|
||||||
// --> Third choise of Heltec WiFi-Kit-8 OLED 128X32 0.91"
|
// --> Third choice of Heltec WiFi-Kit-8 OLED 128X32 0.91"
|
||||||
//U8X8_SSD1306_128X32_UNIVISION_HW_I2C u8x8(U8X8_PIN_RESET, U8X8_PIN_SCL, U8X8_PIN_SDA); // Constructor for Heltec WiFi-Kit-8
|
//U8X8_SSD1306_128X32_UNIVISION_HW_I2C u8x8(U8X8_PIN_RESET, U8X8_PIN_SCL, U8X8_PIN_SDA); // Constructor for Heltec WiFi-Kit-8
|
||||||
// gets called once at boot. Do all initialization that doesn't depend on network here
|
// gets called once at boot. Do all initialization that doesn't depend on network here
|
||||||
void userSetup() {
|
void userSetup() {
|
||||||
@@ -97,7 +97,7 @@ void userLoop() {
|
|||||||
|
|
||||||
//----> Dallas temperature sensor MQTT publishing
|
//----> Dallas temperature sensor MQTT publishing
|
||||||
temptimer = millis();
|
temptimer = millis();
|
||||||
// Timer to publishe new temperature every 60 seconds
|
// Timer to publish new temperature every 60 seconds
|
||||||
if (temptimer - lastMeasure > 60000)
|
if (temptimer - lastMeasure > 60000)
|
||||||
{
|
{
|
||||||
lastMeasure = temptimer;
|
lastMeasure = temptimer;
|
||||||
@@ -106,7 +106,7 @@ void userLoop() {
|
|||||||
if (mqtt != nullptr)
|
if (mqtt != nullptr)
|
||||||
{
|
{
|
||||||
// Serial.println(Dallas(DALLAS_PIN,0));
|
// Serial.println(Dallas(DALLAS_PIN,0));
|
||||||
//Gets prefered temperature scale based on selection in definitions section
|
//Gets preferred temperature scale based on selection in definitions section
|
||||||
#ifdef Celsius
|
#ifdef Celsius
|
||||||
int16_t board_temperature = Dallas(DALLAS_PIN,0);
|
int16_t board_temperature = Dallas(DALLAS_PIN,0);
|
||||||
#else
|
#else
|
||||||
@@ -173,11 +173,11 @@ void userLoop() {
|
|||||||
// First row with Wifi name
|
// First row with Wifi name
|
||||||
u8x8.setCursor(1, 0);
|
u8x8.setCursor(1, 0);
|
||||||
u8x8.print(knownSsid.substring(0, u8x8.getCols() > 1 ? u8x8.getCols() - 2 : 0));
|
u8x8.print(knownSsid.substring(0, u8x8.getCols() > 1 ? u8x8.getCols() - 2 : 0));
|
||||||
// Print `~` char to indicate that SSID is longer, than owr dicplay
|
// Print `~` char to indicate that SSID is longer than our display
|
||||||
if (knownSsid.length() > u8x8.getCols())
|
if (knownSsid.length() > u8x8.getCols())
|
||||||
u8x8.print("~");
|
u8x8.print("~");
|
||||||
|
|
||||||
// Second row with IP or Psssword
|
// Second row with IP or Password
|
||||||
u8x8.setCursor(1, 1);
|
u8x8.setCursor(1, 1);
|
||||||
// Print password in AP mode and if led is OFF.
|
// Print password in AP mode and if led is OFF.
|
||||||
if (apActive && bri == 0)
|
if (apActive && bri == 0)
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
void UpdateBME280Data();
|
void UpdateBME280Data();
|
||||||
|
|
||||||
#define Celsius // Show temperature mesaurement in Celcius otherwise is in Fahrenheit
|
#define Celsius // Show temperature measurement in Celsius otherwise is in Fahrenheit
|
||||||
BME280I2C bme; // Default : forced mode, standby time = 1000 ms
|
BME280I2C bme; // Default : forced mode, standby time = 1000 ms
|
||||||
// Oversampling = pressure ×1, temperature ×1, humidity ×1, filter off,
|
// Oversampling = pressure ×1, temperature ×1, humidity ×1, filter off,
|
||||||
|
|
||||||
@@ -16,25 +16,25 @@ uint8_t SDA_PIN = 21;
|
|||||||
#else //ESP8266 boards
|
#else //ESP8266 boards
|
||||||
uint8_t SCL_PIN = 5;
|
uint8_t SCL_PIN = 5;
|
||||||
uint8_t SDA_PIN = 4;
|
uint8_t SDA_PIN = 4;
|
||||||
// uint8_t RST_PIN = 16; // Uncoment for Heltec WiFi-Kit-8
|
// uint8_t RST_PIN = 16; // Un-comment for Heltec WiFi-Kit-8
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//The SCL and SDA pins are defined here.
|
//The SCL and SDA pins are defined here.
|
||||||
//ESP8266 Wemos D1 mini board use SCL=5 SDA=4 while ESP32 Wemos32 mini board use SCL=22 SDA=21
|
//ESP8266 Wemos D1 mini board use SCL=5 SDA=4 while ESP32 Wemos32 mini board use SCL=22 SDA=21
|
||||||
#define U8X8_PIN_SCL SCL_PIN
|
#define U8X8_PIN_SCL SCL_PIN
|
||||||
#define U8X8_PIN_SDA SDA_PIN
|
#define U8X8_PIN_SDA SDA_PIN
|
||||||
//#define U8X8_PIN_RESET RST_PIN // Uncoment for Heltec WiFi-Kit-8
|
//#define U8X8_PIN_RESET RST_PIN // Un-comment for Heltec WiFi-Kit-8
|
||||||
|
|
||||||
// If display does not work or looks corrupted check the
|
// If display does not work or looks corrupted check the
|
||||||
// constructor reference:
|
// constructor reference:
|
||||||
// https://github.com/olikraus/u8g2/wiki/u8x8setupcpp
|
// https://github.com/olikraus/u8g2/wiki/u8x8setupcpp
|
||||||
// or check the gallery:
|
// or check the gallery:
|
||||||
// https://github.com/olikraus/u8g2/wiki/gallery
|
// https://github.com/olikraus/u8g2/wiki/gallery
|
||||||
// --> First choise of cheap I2C OLED 128X32 0.91"
|
// --> First choice of cheap I2C OLED 128X32 0.91"
|
||||||
U8X8_SSD1306_128X32_UNIVISION_HW_I2C u8x8(U8X8_PIN_NONE, U8X8_PIN_SCL, U8X8_PIN_SDA); // Pins are Reset, SCL, SDA
|
U8X8_SSD1306_128X32_UNIVISION_HW_I2C u8x8(U8X8_PIN_NONE, U8X8_PIN_SCL, U8X8_PIN_SDA); // Pins are Reset, SCL, SDA
|
||||||
// --> Second choise of cheap I2C OLED 128X64 0.96" or 1.3"
|
// --> Second choice of cheap I2C OLED 128X64 0.96" or 1.3"
|
||||||
//U8X8_SSD1306_128X64_NONAME_HW_I2C u8x8(U8X8_PIN_NONE, U8X8_PIN_SCL, U8X8_PIN_SDA); // Pins are Reset, SCL, SDA
|
//U8X8_SSD1306_128X64_NONAME_HW_I2C u8x8(U8X8_PIN_NONE, U8X8_PIN_SCL, U8X8_PIN_SDA); // Pins are Reset, SCL, SDA
|
||||||
// --> Third choise of Heltec WiFi-Kit-8 OLED 128X32 0.91"
|
// --> Third choice of Heltec WiFi-Kit-8 OLED 128X32 0.91"
|
||||||
//U8X8_SSD1306_128X32_UNIVISION_HW_I2C u8x8(U8X8_PIN_RESET, U8X8_PIN_SCL, U8X8_PIN_SDA); // Constructor for Heltec WiFi-Kit-8
|
//U8X8_SSD1306_128X32_UNIVISION_HW_I2C u8x8(U8X8_PIN_RESET, U8X8_PIN_SCL, U8X8_PIN_SDA); // Constructor for Heltec WiFi-Kit-8
|
||||||
// gets called once at boot. Do all initialization that doesn't depend on network here
|
// gets called once at boot. Do all initialization that doesn't depend on network here
|
||||||
|
|
||||||
@@ -179,11 +179,11 @@ void userLoop() {
|
|||||||
// First row with Wifi name
|
// First row with Wifi name
|
||||||
u8x8.setCursor(1, 0);
|
u8x8.setCursor(1, 0);
|
||||||
u8x8.print(knownSsid.substring(0, u8x8.getCols() > 1 ? u8x8.getCols() - 2 : 0));
|
u8x8.print(knownSsid.substring(0, u8x8.getCols() > 1 ? u8x8.getCols() - 2 : 0));
|
||||||
// Print `~` char to indicate that SSID is longer, than owr dicplay
|
// Print `~` char to indicate that SSID is longer, than our display
|
||||||
if (knownSsid.length() > u8x8.getCols())
|
if (knownSsid.length() > u8x8.getCols())
|
||||||
u8x8.print("~");
|
u8x8.print("~");
|
||||||
|
|
||||||
// Second row with IP or Psssword
|
// Second row with IP or Password
|
||||||
u8x8.setCursor(1, 1);
|
u8x8.setCursor(1, 1);
|
||||||
// Print password in AP mode and if led is OFF.
|
// Print password in AP mode and if led is OFF.
|
||||||
if (apActive && bri == 0)
|
if (apActive && bri == 0)
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# Audioreactive usermod
|
# Audioreactive usermod
|
||||||
|
|
||||||
Enabless controlling LEDs via audio input. Audio source can be a microphone or analog-in (AUX) using an appropriate adapter.
|
Enables controlling LEDs via audio input. Audio source can be a microphone or analog-in (AUX) using an appropriate adapter.
|
||||||
Supported microphones range from analog (MAX4466, MAX9814, ...) to digital (INMP441, ICS-43434, ...).
|
Supported microphones range from analog (MAX4466, MAX9814, ...) to digital (INMP441, ICS-43434, ...).
|
||||||
|
|
||||||
Does audio processing and provides data structure that specially written effects can use.
|
Does audio processing and provides data structure that specially written effects can use.
|
||||||
@@ -19,7 +19,7 @@ This usermod is an evolution of [SR-WLED](https://github.com/atuline/WLED), and
|
|||||||
## Supported MCUs
|
## Supported MCUs
|
||||||
This audioreactive usermod works best on "classic ESP32" (dual core), and on ESP32-S3 which also has dual core and hardware floating point support.
|
This audioreactive usermod works best on "classic ESP32" (dual core), and on ESP32-S3 which also has dual core and hardware floating point support.
|
||||||
|
|
||||||
It will compile succesfully for ESP32-S2 and ESP32-C3, however might not work well, as other WLED functions will become slow. Audio processing requires a lot of computing power, which can be problematic on smaller MCUs like -S2 and -C3.
|
It will compile successfully for ESP32-S2 and ESP32-C3, however might not work well, as other WLED functions will become slow. Audio processing requires a lot of computing power, which can be problematic on smaller MCUs like -S2 and -C3.
|
||||||
|
|
||||||
Analog audio is only possible on "classic" ESP32, but not on other MCUs like ESP32-S3.
|
Analog audio is only possible on "classic" ESP32, but not on other MCUs like ESP32-S3.
|
||||||
|
|
||||||
@@ -35,7 +35,7 @@ Customised _arduinoFFT_ library for use with this usermod can be found at https:
|
|||||||
|
|
||||||
### using latest (develop) _arduinoFFT_ library
|
### using latest (develop) _arduinoFFT_ library
|
||||||
Alternatively, you can use the latest arduinoFFT development version.
|
Alternatively, you can use the latest arduinoFFT development version.
|
||||||
ArduinoFFT `develop` library is slightly more accurate, and slighly faster than our customised library, however also needs additional 2kB RAM.
|
ArduinoFFT `develop` library is slightly more accurate, and slightly faster than our customised library, however also needs additional 2kB RAM.
|
||||||
|
|
||||||
* `build_flags` = `-D USERMOD_AUDIOREACTIVE` `-D UM_AUDIOREACTIVE_USE_NEW_FFT`
|
* `build_flags` = `-D USERMOD_AUDIOREACTIVE` `-D UM_AUDIOREACTIVE_USE_NEW_FFT`
|
||||||
* `lib_deps`= `https://github.com/kosme/arduinoFFT#develop @ 1.9.2`
|
* `lib_deps`= `https://github.com/kosme/arduinoFFT#develop @ 1.9.2`
|
||||||
@@ -63,7 +63,7 @@ You can use the following additional flags in your `build_flags`
|
|||||||
* `-D SR_GAIN=x` : Default "gain" setting (60)
|
* `-D SR_GAIN=x` : Default "gain" setting (60)
|
||||||
* `-D I2S_USE_RIGHT_CHANNEL`: Use RIGHT instead of LEFT channel (not recommended unless you strictly need this).
|
* `-D I2S_USE_RIGHT_CHANNEL`: Use RIGHT instead of LEFT channel (not recommended unless you strictly need this).
|
||||||
* `-D I2S_USE_16BIT_SAMPLES`: Use 16bit instead of 32bit for internal sample buffers. Reduces sampling quality, but frees some RAM ressources (not recommended unless you absolutely need this).
|
* `-D I2S_USE_16BIT_SAMPLES`: Use 16bit instead of 32bit for internal sample buffers. Reduces sampling quality, but frees some RAM ressources (not recommended unless you absolutely need this).
|
||||||
* `-D I2S_GRAB_ADC1_COMPLETELY`: Experimental: continously sample analog ADC microphone. Only effective on ESP32. WARNING this _will_ cause conflicts(lock-up) with any analogRead() call.
|
* `-D I2S_GRAB_ADC1_COMPLETELY`: Experimental: continuously sample analog ADC microphone. Only effective on ESP32. WARNING this _will_ cause conflicts(lock-up) with any analogRead() call.
|
||||||
* `-D MIC_LOGGER` : (debugging) Logs samples from the microphone to serial USB. Use with serial plotter (Arduino IDE)
|
* `-D MIC_LOGGER` : (debugging) Logs samples from the microphone to serial USB. Use with serial plotter (Arduino IDE)
|
||||||
* `-D SR_DEBUG` : (debugging) Additional error diagnostics and debug info on serial USB.
|
* `-D SR_DEBUG` : (debugging) Additional error diagnostics and debug info on serial USB.
|
||||||
|
|
||||||
|
|||||||
@@ -50,5 +50,5 @@ This usermod listens on `[mqttDeviceTopic]/switch/0/set` (where 0 is replaced wi
|
|||||||
Feedback about the current state is provided at `[mqttDeviceTopic]/switch/0/state`.
|
Feedback about the current state is provided at `[mqttDeviceTopic]/switch/0/state`.
|
||||||
|
|
||||||
### Home Assistant auto-discovery
|
### Home Assistant auto-discovery
|
||||||
Auto-discovery information is automatically published and you shoudn't have to do anything to register the switches in Home Assistant.
|
Auto-discovery information is automatically published and you shouldn't have to do anything to register the switches in Home Assistant.
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
This usermod-v2 modification allows the connection of multiple relays, each with individual delay and on/off mode.
|
This usermod-v2 modification allows the connection of multiple relays, each with individual delay and on/off mode.
|
||||||
Usermod supports PCF8574 I2C port expander to reduce GPIO use.
|
Usermod supports PCF8574 I2C port expander to reduce GPIO use.
|
||||||
PCF8574 supports 8 outputs and each output corresponds to a relay in WLED (relay 0 = port 0, etc). I you are using more than 8 relays with multiple PCF8574 make sure their addresses are set conscutively (e.g. 0x20 and 0x21). You can set address of first expander in settings.
|
PCF8574 supports 8 outputs and each output corresponds to a relay in WLED (relay 0 = port 0, etc). I you are using more than 8 relays with multiple PCF8574 make sure their addresses are set in sequence (e.g. 0x20 and 0x21). You can set address of first expander in settings.
|
||||||
(**NOTE:** Will require Wire library and global I2C pins defined.)
|
(**NOTE:** Will require Wire library and global I2C pins defined.)
|
||||||
|
|
||||||
## HTTP API
|
## HTTP API
|
||||||
|
|||||||
@@ -196,7 +196,7 @@ class MultiRelay : public Usermod {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
// class implementetion
|
// class implementation
|
||||||
|
|
||||||
void MultiRelay::publishMqtt(int relay) {
|
void MultiRelay::publishMqtt(int relay) {
|
||||||
#ifndef WLED_DISABLE_MQTT
|
#ifndef WLED_DISABLE_MQTT
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ The number of individual LEDs per segment. 7 segments per digit.
|
|||||||
#### perPeriod -- ssLEDPerPeriod
|
#### perPeriod -- ssLEDPerPeriod
|
||||||
The number of individual LEDs per period. A ':' (colon) has two periods.
|
The number of individual LEDs per period. A ':' (colon) has two periods.
|
||||||
#### startIdx -- ssStartLED
|
#### startIdx -- ssStartLED
|
||||||
Index of the LED the display starts at. Enabless a seven segment display to be in the middle of a string.
|
Index of the LED the display starts at. Enables a seven segment display to be in the middle of a string.
|
||||||
#### timeEnable -- ssTimeEnabled
|
#### timeEnable -- ssTimeEnabled
|
||||||
When true, when displayMask is configured for a time output and no message is set, the time will be displayed.
|
When true, when displayMask is configured for a time output and no message is set, the time will be displayed.
|
||||||
#### scrollSpd -- ssScrollSpeed
|
#### scrollSpd -- ssScrollSpeed
|
||||||
|
|||||||
@@ -409,7 +409,7 @@ public:
|
|||||||
|
|
||||||
if (mqttGroupTopic[0] != 0)
|
if (mqttGroupTopic[0] != 0)
|
||||||
{
|
{
|
||||||
//subcribe for sevenseg messages on the group topic
|
//subscribe for sevenseg messages on the group topic
|
||||||
sprintf_P(subBuffer, PSTR("%s/%S/+/set"), mqttGroupTopic, _str_sevenSeg);
|
sprintf_P(subBuffer, PSTR("%s/%S/+/set"), mqttGroupTopic, _str_sevenSeg);
|
||||||
mqtt->subscribe(subBuffer, 2);
|
mqtt->subscribe(subBuffer, 2);
|
||||||
}
|
}
|
||||||
@@ -417,7 +417,7 @@ public:
|
|||||||
|
|
||||||
bool onMqttMessage(char *topic, char *payload)
|
bool onMqttMessage(char *topic, char *payload)
|
||||||
{
|
{
|
||||||
//If topic beings iwth sevenSeg cut it off, otherwise not our message.
|
//If topic beings with sevenSeg cut it off, otherwise not our message.
|
||||||
size_t topicPrefixLen = strlen_P(PSTR("/sevenSeg/"));
|
size_t topicPrefixLen = strlen_P(PSTR("/sevenSeg/"));
|
||||||
if (strncmp_P(topic, PSTR("/sevenSeg/"), topicPrefixLen) == 0)
|
if (strncmp_P(topic, PSTR("/sevenSeg/"), topicPrefixLen) == 0)
|
||||||
topic += topicPrefixLen;
|
topic += topicPrefixLen;
|
||||||
|
|||||||
@@ -470,14 +470,14 @@ public:
|
|||||||
|
|
||||||
if (mqttGroupTopic[0] != 0)
|
if (mqttGroupTopic[0] != 0)
|
||||||
{
|
{
|
||||||
//subcribe for sevenseg messages on the group topic
|
//subscribe for sevenseg messages on the group topic
|
||||||
sprintf_P(subBuffer, PSTR("%s/%S/+/set"), mqttGroupTopic, _str_name);
|
sprintf_P(subBuffer, PSTR("%s/%S/+/set"), mqttGroupTopic, _str_name);
|
||||||
mqtt->subscribe(subBuffer, 2);
|
mqtt->subscribe(subBuffer, 2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool onMqttMessage(char *topic, char *payload) {
|
bool onMqttMessage(char *topic, char *payload) {
|
||||||
//If topic beings iwth sevenSeg cut it off, otherwise not our message.
|
//If topic begins with sevenSeg cut it off, otherwise not our message.
|
||||||
size_t topicPrefixLen = strlen_P(PSTR("/wledSS/"));
|
size_t topicPrefixLen = strlen_P(PSTR("/wledSS/"));
|
||||||
if (strncmp_P(topic, PSTR("/wledSS/"), topicPrefixLen) == 0) {
|
if (strncmp_P(topic, PSTR("/wledSS/"), topicPrefixLen) == 0) {
|
||||||
topic += topicPrefixLen;
|
topic += topicPrefixLen;
|
||||||
|
|||||||
@@ -331,7 +331,7 @@ void ShtUsermod::loop()
|
|||||||
/**
|
/**
|
||||||
* Whenever MQTT is connected, publish HA autodiscovery topics.
|
* Whenever MQTT is connected, publish HA autodiscovery topics.
|
||||||
*
|
*
|
||||||
* Is only donce once.
|
* Is only done once.
|
||||||
*
|
*
|
||||||
* @see Usermod::onMqttConnect()
|
* @see Usermod::onMqttConnect()
|
||||||
* @see UsermodManager::onMqttConnect()
|
* @see UsermodManager::onMqttConnect()
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ private:
|
|||||||
unsigned char Enc_B;
|
unsigned char Enc_B;
|
||||||
unsigned char Enc_A_prev = 0;
|
unsigned char Enc_A_prev = 0;
|
||||||
|
|
||||||
// private class memebers configurable by Usermod Settings (defaults set inside readFromConfig())
|
// private class members configurable by Usermod Settings (defaults set inside readFromConfig())
|
||||||
int8_t pins[3]; // pins[0] = DT from encoder, pins[1] = CLK from encoder, pins[2] = CLK from encoder (optional)
|
int8_t pins[3]; // pins[0] = DT from encoder, pins[1] = CLK from encoder, pins[2] = CLK from encoder (optional)
|
||||||
int fadeAmount; // how many points to fade the Neopixel with each step
|
int fadeAmount; // how many points to fade the Neopixel with each step
|
||||||
|
|
||||||
@@ -162,7 +162,7 @@ public:
|
|||||||
* - configComplete is used to return false if any value is missing, not just if the main object is missing
|
* - configComplete is used to return false if any value is missing, not just if the main object is missing
|
||||||
* - The defaults are loaded every time readFromConfig() is run, not just once after boot
|
* - The defaults are loaded every time readFromConfig() is run, not just once after boot
|
||||||
*
|
*
|
||||||
* This ensures that missing values are added to the config, with their default values, in the rare but plauible cases of:
|
* This ensures that missing values are added to the config, with their default values, in the rare but plausible cases of:
|
||||||
* - a single value being missing at boot, e.g. if the Usermod was upgraded and a new setting was added
|
* - a single value being missing at boot, e.g. if the Usermod was upgraded and a new setting was added
|
||||||
* - a single value being missing after boot (e.g. if the cfg.json was manually edited and a value was removed)
|
* - a single value being missing after boot (e.g. if the cfg.json was manually edited and a value was removed)
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -109,7 +109,7 @@ class AutoSaveUsermod : public Usermod {
|
|||||||
// network here
|
// network here
|
||||||
void setup() {
|
void setup() {
|
||||||
#ifdef USERMOD_FOUR_LINE_DISPLAY
|
#ifdef USERMOD_FOUR_LINE_DISPLAY
|
||||||
// This Usermod has enhanced funcionality if
|
// This Usermod has enhanced functionality if
|
||||||
// FourLineDisplayUsermod is available.
|
// FourLineDisplayUsermod is available.
|
||||||
display = (FourLineDisplayUsermod*) usermods.lookup(USERMOD_ID_FOUR_LINE_DISP);
|
display = (FourLineDisplayUsermod*) usermods.lookup(USERMOD_ID_FOUR_LINE_DISP);
|
||||||
#endif
|
#endif
|
||||||
@@ -156,7 +156,7 @@ class AutoSaveUsermod : public Usermod {
|
|||||||
|
|
||||||
if (autoSaveAfter && now > autoSaveAfter) {
|
if (autoSaveAfter && now > autoSaveAfter) {
|
||||||
autoSaveAfter = 0;
|
autoSaveAfter = 0;
|
||||||
// Time to auto save. You may have some flickry?
|
// Time to auto save. You may have some flickery?
|
||||||
saveSettings();
|
saveSettings();
|
||||||
displayOverlay();
|
displayOverlay();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ This file should be placed in the same directory as `platformio.ini`.
|
|||||||
* `FLD_PIN_SCL` - The display SCL pin, defaults to 5
|
* `FLD_PIN_SCL` - The display SCL pin, defaults to 5
|
||||||
* `FLD_PIN_SDA` - The display SDA pin, defaults to 4
|
* `FLD_PIN_SDA` - The display SDA pin, defaults to 4
|
||||||
|
|
||||||
All of the parameters can be configured via the Usermods settings page, inluding GPIO pins.
|
All of the parameters can be configured via the Usermods settings page, including GPIO pins.
|
||||||
|
|
||||||
### PlatformIO requirements
|
### PlatformIO requirements
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
// for WLED.
|
// for WLED.
|
||||||
//
|
//
|
||||||
// Dependencies
|
// Dependencies
|
||||||
// * This usermod REQURES the ModeSortUsermod
|
// * This usermod REQUIRES the ModeSortUsermod
|
||||||
// * This Usermod works best, by far, when coupled
|
// * This Usermod works best, by far, when coupled
|
||||||
// with RotaryEncoderUIUsermod.
|
// with RotaryEncoderUIUsermod.
|
||||||
//
|
//
|
||||||
@@ -398,7 +398,7 @@ class FourLineDisplayUsermod : public Usermod {
|
|||||||
drawString(getCols() - 1, 0, "~");
|
drawString(getCols() - 1, 0, "~");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Second row with IP or Psssword
|
// Second row with IP or Password
|
||||||
drawGlyph(0, lineHeight, 68, u8x8_font_open_iconic_embedded_1x1); // wifi icon
|
drawGlyph(0, lineHeight, 68, u8x8_font_open_iconic_embedded_1x1); // wifi icon
|
||||||
// Print password in AP mode and if led is OFF.
|
// Print password in AP mode and if led is OFF.
|
||||||
if (apActive && bri == 0) {
|
if (apActive && bri == 0) {
|
||||||
|
|||||||
@@ -1339,7 +1339,7 @@ void FourLineDisplayUsermod::sleepOrClock(bool sleepEnable) {
|
|||||||
bool FourLineDisplayUsermod::handleButton(uint8_t b) {
|
bool FourLineDisplayUsermod::handleButton(uint8_t b) {
|
||||||
yield();
|
yield();
|
||||||
if (!enabled
|
if (!enabled
|
||||||
|| b // butto 0 only
|
|| b // button 0 only
|
||||||
|| buttonType[b] == BTN_TYPE_SWITCH
|
|| buttonType[b] == BTN_TYPE_SWITCH
|
||||||
|| buttonType[b] == BTN_TYPE_NONE
|
|| buttonType[b] == BTN_TYPE_NONE
|
||||||
|| buttonType[b] == BTN_TYPE_RESERVED
|
|| buttonType[b] == BTN_TYPE_RESERVED
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ curl --location --request GET 'http://[]/printer/objects/query?virtual_sdcard=pr
|
|||||||
## Usage
|
## Usage
|
||||||
Compile the source with the buildflag `-D USERMOD_KLIPPER_PERCENTAGE` added.
|
Compile the source with the buildflag `-D USERMOD_KLIPPER_PERCENTAGE` added.
|
||||||
|
|
||||||
You can also use the WLBD bot in the Discord by simply extending an exsisting build enviroment:
|
You can also use the WLBD bot in the Discord by simply extending an existing build environment:
|
||||||
```
|
```
|
||||||
[env:esp32klipper]
|
[env:esp32klipper]
|
||||||
extends = env:esp32dev
|
extends = env:esp32dev
|
||||||
@@ -23,7 +23,7 @@ build_flags = ${common.build_flags_esp32} -D USERMOD_KLIPPER_PERCENTAGE
|
|||||||
Checkbox to enable or disable the overlay
|
Checkbox to enable or disable the overlay
|
||||||
|
|
||||||
### Klipper IP:
|
### Klipper IP:
|
||||||
IP adress of your Klipper instance you want to poll. ESP has to be restarted after change
|
IP address of your Klipper instance you want to poll. ESP has to be restarted after change
|
||||||
|
|
||||||
### Direction :
|
### Direction :
|
||||||
0 = normal
|
0 = normal
|
||||||
|
|||||||
@@ -79,7 +79,7 @@ public:
|
|||||||
httpGet(wifiClient, errorMessage);
|
httpGet(wifiClient, errorMessage);
|
||||||
if (strcmp(errorMessage, "") == 0)
|
if (strcmp(errorMessage, "") == 0)
|
||||||
{
|
{
|
||||||
PSRAMDynamicJsonDocument klipperDoc(4096); // in practive about 2673
|
PSRAMDynamicJsonDocument klipperDoc(4096); // in practice about 2673
|
||||||
DeserializationError error = deserializeJson(klipperDoc, wifiClient);
|
DeserializationError error = deserializeJson(klipperDoc, wifiClient);
|
||||||
if (error)
|
if (error)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -7,4 +7,4 @@ Contains a modification to use WLED in combination with the Ping Pong Ball LED C
|
|||||||
To install this Usermod, you instruct PlatformIO to compile the Project with the USERMOD_PING_PONG_CLOCK flag.
|
To install this Usermod, you instruct PlatformIO to compile the Project with the USERMOD_PING_PONG_CLOCK flag.
|
||||||
WLED then automatically provides you with various settings on the Usermod Page.
|
WLED then automatically provides you with various settings on the Usermod Page.
|
||||||
|
|
||||||
Note: Depending on the size of your clock, you may have to update the led indices for the indivdual numbers and the base indices.
|
Note: Depending on the size of your clock, you may have to update the led indices for the individual numbers and the base indices.
|
||||||
|
|||||||
@@ -18,15 +18,15 @@ private:
|
|||||||
|
|
||||||
// ---- Variables for correct LED numbering below, edit only if your clock is built different ----
|
// ---- Variables for correct LED numbering below, edit only if your clock is built different ----
|
||||||
|
|
||||||
int baseH = 43; // Adress for the one place of the hours
|
int baseH = 43; // Address for the one place of the hours
|
||||||
int baseHH = 7; // Adress for the tens place of the hours
|
int baseHH = 7; // Address for the tens place of the hours
|
||||||
int baseM = 133; // Adress for the one place of the minutes
|
int baseM = 133; // Address for the one place of the minutes
|
||||||
int baseMM = 97; // Adress for the tens place of the minutes
|
int baseMM = 97; // Address for the tens place of the minutes
|
||||||
int colon1 = 79; // Adress for the first colon led
|
int colon1 = 79; // Address for the first colon led
|
||||||
int colon2 = 80; // Adress for the second colon led
|
int colon2 = 80; // Address for the second colon led
|
||||||
|
|
||||||
// Matrix for the illumination of the numbers
|
// Matrix for the illumination of the numbers
|
||||||
// Note: These only define the increments of the base adress. e.g. to define the second Minute you have to add the baseMM to every led position
|
// Note: These only define the increments of the base address. e.g. to define the second Minute you have to add the baseMM to every led position
|
||||||
const int numbers[10][10] =
|
const int numbers[10][10] =
|
||||||
{
|
{
|
||||||
{ 0, 1, 4, 6, 13, 15, 18, 19, -1, -1 }, // 0: null
|
{ 0, 1, 4, 6, 13, 15, 18, 19, -1, -1 }, // 0: null
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
// Change between modes by pressing a button.
|
// Change between modes by pressing a button.
|
||||||
//
|
//
|
||||||
// Dependencies
|
// Dependencies
|
||||||
// * This usermod REQURES the ModeSortUsermod
|
// * This usermod REQUIRES the ModeSortUsermod
|
||||||
// * This Usermod works best coupled with
|
// * This Usermod works best coupled with
|
||||||
// FourLineDisplayUsermod.
|
// FourLineDisplayUsermod.
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
//
|
//
|
||||||
// Inspired by the original v2 usermods
|
// Inspired by the original v2 usermods
|
||||||
// * usermod_v2_rotaty_encoder_ui
|
// * usermod_v2_rotary_encoder_ui
|
||||||
//
|
//
|
||||||
// v2 usermod that provides a rotary encoder-based UI.
|
// v2 usermod that provides a rotary encoder-based UI.
|
||||||
//
|
//
|
||||||
@@ -79,7 +79,7 @@ static int re_qstringCmp(const void *ap, const void *bp) {
|
|||||||
// Lowercase
|
// Lowercase
|
||||||
bVal -= 32;
|
bVal -= 32;
|
||||||
}
|
}
|
||||||
// Relly we shouldn't ever get to '\0'
|
// Really we shouldn't ever get to '\0'
|
||||||
if (aVal == '"' || bVal == '"' || aVal == '\0' || bVal == '\0') {
|
if (aVal == '"' || bVal == '"' || aVal == '\0' || bVal == '\0') {
|
||||||
// We're done. one is a substring of the other
|
// We're done. one is a substring of the other
|
||||||
// or something happenend and the quote didn't stop us.
|
// or something happenend and the quote didn't stop us.
|
||||||
@@ -542,7 +542,7 @@ void RotaryEncoderUIUsermod::loop()
|
|||||||
bool changedState = false;
|
bool changedState = false;
|
||||||
char lineBuffer[64] = { '\0' };
|
char lineBuffer[64] = { '\0' };
|
||||||
do {
|
do {
|
||||||
// finde new state
|
// find new state
|
||||||
switch (newState) {
|
switch (newState) {
|
||||||
case 0: strcpy_P(lineBuffer, PSTR("Brightness")); changedState = true; break;
|
case 0: strcpy_P(lineBuffer, PSTR("Brightness")); changedState = true; break;
|
||||||
case 1: if (!extractModeSlider(effectCurrent, 0, lineBuffer, 63)) newState++; else changedState = true; break; // speed
|
case 1: if (!extractModeSlider(effectCurrent, 0, lineBuffer, 63)) newState++; else changedState = true; break; // speed
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ active: enable/disable usermod
|
|||||||
diplayItIs: enable/disable display of "Es ist" on the clock
|
diplayItIs: enable/disable display of "Es ist" on the clock
|
||||||
ledOffset: number of LEDs before the wordclock LEDs
|
ledOffset: number of LEDs before the wordclock LEDs
|
||||||
|
|
||||||
### Update for alternatative wiring pattern
|
### Update for alternative wiring pattern
|
||||||
Based on this fantastic work I added an alternative wiring pattern.
|
Based on this fantastic work I added an alternative wiring pattern.
|
||||||
The original used a long wire to connect DO to DI, from one line to the next line.
|
The original used a long wire to connect DO to DI, from one line to the next line.
|
||||||
|
|
||||||
|
|||||||
@@ -7,8 +7,8 @@
|
|||||||
* See: https://github.com/Aircoookie/WLED/wiki/Add-own-functionality
|
* See: https://github.com/Aircoookie/WLED/wiki/Add-own-functionality
|
||||||
*
|
*
|
||||||
* This usermod can be used to drive a wordclock with a 11x10 pixel matrix with WLED. There are also 4 additional dots for the minutes.
|
* This usermod can be used to drive a wordclock with a 11x10 pixel matrix with WLED. There are also 4 additional dots for the minutes.
|
||||||
* The visualisation is desribed in 4 mask with LED numbers (single dots for minutes, minutes, hours and "clock/Uhr").
|
* The visualisation is described in 4 mask with LED numbers (single dots for minutes, minutes, hours and "clock/Uhr").
|
||||||
* There are 2 parameters to chnage the behaviour:
|
* There are 2 parameters to change the behaviour:
|
||||||
*
|
*
|
||||||
* active: enable/disable usermod
|
* active: enable/disable usermod
|
||||||
* diplayItIs: enable/disable display of "Es ist" on the clock.
|
* diplayItIs: enable/disable display of "Es ist" on the clock.
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# Controlling Wiz lights
|
# Controlling Wiz lights
|
||||||
|
|
||||||
Enabless controlling [WiZ](https://www.wizconnected.com/en/consumer/) lights that are part of the same network as the WLED controller.
|
Enables controlling [WiZ](https://www.wizconnected.com/en/consumer/) lights that are part of the same network as the WLED controller.
|
||||||
|
|
||||||
The mod takes the colors from the first few pixels and sends them to the lights.
|
The mod takes the colors from the first few pixels and sends them to the lights.
|
||||||
|
|
||||||
@@ -8,7 +8,7 @@ The mod takes the colors from the first few pixels and sends them to the lights.
|
|||||||
|
|
||||||
- Interval (ms)
|
- Interval (ms)
|
||||||
- How frequently to update the WiZ lights, in milliseconds.
|
- How frequently to update the WiZ lights, in milliseconds.
|
||||||
- Setting it too low may causse the ESP to become unresponsive.
|
- Setting it too low may cause the ESP to become unresponsive.
|
||||||
- Send Delay (ms)
|
- Send Delay (ms)
|
||||||
- An optional millisecond delay after updating each WiZ light.
|
- An optional millisecond delay after updating each WiZ light.
|
||||||
- Can help smooth out effects when using a large number of WiZ lights
|
- Can help smooth out effects when using a large number of WiZ lights
|
||||||
|
|||||||
Reference in New Issue
Block a user