From 01dd41c78da82e68bd20dfef8067a5dafc69241e Mon Sep 17 00:00:00 2001 From: lost-hope Date: Wed, 10 May 2023 19:46:48 +0200 Subject: [PATCH 1/4] intital commit --- usermods/mcu_temp/mcuTemp.h | 139 +++++++++ usermods/mcu_temp/readme.md | 11 + wled00/const.h | 573 ++++++++++++++++++------------------ wled00/usermods_list.cpp | 294 +++++++++--------- 4 files changed, 583 insertions(+), 434 deletions(-) create mode 100644 usermods/mcu_temp/mcuTemp.h create mode 100644 usermods/mcu_temp/readme.md diff --git a/usermods/mcu_temp/mcuTemp.h b/usermods/mcu_temp/mcuTemp.h new file mode 100644 index 0000000000..65b8a8049b --- /dev/null +++ b/usermods/mcu_temp/mcuTemp.h @@ -0,0 +1,139 @@ +#pragma once + +#include "wled.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + + uint8_t temprature_sens_read(); + +#ifdef __cplusplus +} +#endif + +uint8_t temprature_sens_read(); +// class name. Use something descriptive and leave the ": public Usermod" part :) +class mcuTemp : public Usermod +{ + +private: + float mcutemp = 0; + + // any private methods should go here (non-inline methosd should be defined out of class) + void publishMqtt(const char *state, bool retain = false); // example for publishing MQTT message + +public: + mcuTemp(const char *name, bool enabled) : Usermod(name, enabled) {} // WLEDMM + + void setup() + { + } + + void connected() + { + } + + void loop() + { + // if usermod is disabled or called during strip updating just exit + // NOTE: on very long strips strip.isUpdating() may always return true so update accordingly + if (!enabled || strip.isUpdating()) + return; + +#ifdef ESP8266 // ESP8266 +// does not seem possible +#else +#if defined(CONFIG_IDF_TARGET_ESP32C3) // ESP32C3 + +#elif defined(CONFIG_IDF_TARGET_ESP32S2) // ESP32S2 + +#elif defined(CONFIG_IDF_TARGET_ESP32S3) // ESP32S3 + +#else // ESP32 + mcutemp = roundf(((temprature_sens_read() - 32) / 1.8) * 100) / 100; +#endif +#endif + + if (millis() - lastTime > 1000) + { + char array[10]; + snprintf(array, sizeof(array), "%f", mcutemp); + publishMqtt(array); + lastTime = millis(); + } + } + /* + * addToJsonInfo() can be used to add custom entries to the /json/info part of the JSON API. + * Creating an "u" object allows you to add custom key/value pairs to the Info section of the WLED web UI. + * Below it is shown how this could be used for e.g. a light sensor + */ + void addToJsonInfo(JsonObject &root) + { + // if "u" object does not exist yet wee need to create it + JsonObject user = root["u"]; + if (user.isNull()) + user = root.createNestedObject("u"); + + // this code adds "u":{"ExampleUsermod":[20," lux"]} to the info object + // int reading = 20; + JsonArray lightArr = user.createNestedArray(FPSTR(_name)); // name + lightArr.add(mcutemp); // value + lightArr.add(F(" °C")); // unit + + // if you are implementing a sensor usermod, you may publish sensor data + // JsonObject sensor = root[F("sensor")]; + // if (sensor.isNull()) sensor = root.createNestedObject(F("sensor")); + // temp = sensor.createNestedArray(F("light")); + // temp.add(reading); + // temp.add(F("lux")); + } + + void addToJsonState(JsonObject &root) + { + } + void readFromJsonState(JsonObject &root) + { + } + + void addToConfig(JsonObject &root) + { + } + + bool readFromConfig(JsonObject &root) + { + return true; + } + + void appendConfigData() + { + } + + void handleOverlayDraw() + { + } + + /* + * getId() allows you to optionally give your V2 usermod an unique ID (please define it in const.h!). + * This could be used in the future for the system to determine whether your usermod is installed. + */ + uint16_t getId() + { + return USERMOD_ID_MCUTEMP; + } +}; + +void mcuTemp::publishMqtt(const char *state, bool retain) +{ +#ifndef WLED_DISABLE_MQTT + // Check if MQTT Connected, otherwise it will crash the 8266 + if (WLED_MQTT_CONNECTED) + { + char subuf[64]; + strcpy(subuf, mqttDeviceTopic); + strcat_P(subuf, PSTR("/mcutemp")); + mqtt->publish(subuf, 0, retain, state); + } +#endif +} diff --git a/usermods/mcu_temp/readme.md b/usermods/mcu_temp/readme.md new file mode 100644 index 0000000000..6fe10d36c5 --- /dev/null +++ b/usermods/mcu_temp/readme.md @@ -0,0 +1,11 @@ +# MCU Temp Usermod +This usermod adds the temperature readout to the Info tab and also publishes that over the topic `mcutemp` topic. + +ATM only ESP32 is supported. +A shown temp of 53,33°C might indicate that the internal temp is not supported. + +ESP8266 do not have a internal temp sensor + +ESP32C3, ESP32S2 and ESP32S3 seem to have a internal temp sensor, but i dont know yet how to get their values. + +Buildflag: `-D USERMOD_MCUTEMP` diff --git a/wled00/const.h b/wled00/const.h index aace524a82..cd5976c695 100644 --- a/wled00/const.h +++ b/wled00/const.h @@ -5,72 +5,72 @@ * Readability defines and their associated numerical values + compile-time constants */ -#define GRADIENT_PALETTE_COUNT 62 //WLEDMM netmindz ar palette +3, ewowi Random Smooth palette +1 +#define GRADIENT_PALETTE_COUNT 62 // WLEDMM netmindz ar palette +3, ewowi Random Smooth palette +1 -//Defaults +// Defaults #define DEFAULT_CLIENT_SSID "Your_Network" -#define DEFAULT_AP_SSID "WLED-AP" -#define DEFAULT_AP_PASS "wled1234" -#define DEFAULT_OTA_PASS "wledota" +#define DEFAULT_AP_SSID "WLED-AP" +#define DEFAULT_AP_PASS "wled1234" +#define DEFAULT_OTA_PASS "wledota" -//increase if you need more +// increase if you need more #ifndef WLED_MAX_USERMODS - #ifdef ESP8266 - #define WLED_MAX_USERMODS 4 - #else - #define WLED_MAX_USERMODS 6 - #endif +#ifdef ESP8266 +#define WLED_MAX_USERMODS 4 +#else +#define WLED_MAX_USERMODS 6 +#endif #endif #ifndef WLED_MAX_BUSSES - #ifdef ESP8266 - #define WLED_MAX_BUSSES 3 - #define WLED_MIN_VIRTUAL_BUSSES 2 - #else - #if defined(CONFIG_IDF_TARGET_ESP32C3) // 2 RMT, 6 LEDC, only has 1 I2S but NPB does not support it ATM - #define WLED_MAX_BUSSES 3 // will allow 2 digital & 1 analog (or the other way around) - #define WLED_MIN_VIRTUAL_BUSSES 3 - #elif defined(CONFIG_IDF_TARGET_ESP32S2) // 4 RMT, 8 LEDC, only has 1 I2S bus, supported in NPB - #if defined(USERMOD_AUDIOREACTIVE) // requested by @softhack007 https://github.com/blazoncek/WLED/issues/33 - #define WLED_MAX_BUSSES 6 // will allow 4 digital & 2 analog - #define WLED_MIN_VIRTUAL_BUSSES 4 - #else - #define WLED_MAX_BUSSES 7 // will allow 5 digital & 2 analog - #define WLED_MIN_VIRTUAL_BUSSES 3 - #endif - #elif defined(CONFIG_IDF_TARGET_ESP32S3) // 4 RMT, 8 LEDC, has 2 I2S but NPB does not support them ATM - #define WLED_MAX_BUSSES 6 // will allow 4 digital & 2 analog - #define WLED_MIN_VIRTUAL_BUSSES 4 - #else - #if defined(USERMOD_AUDIOREACTIVE) // requested by @softhack007 https://github.com/blazoncek/WLED/issues/33 - #define WLED_MAX_BUSSES 8 - #define WLED_MIN_VIRTUAL_BUSSES 2 - #else - #define WLED_MAX_BUSSES 10 - #define WLED_MIN_VIRTUAL_BUSSES 0 - #endif - #endif - #endif +#ifdef ESP8266 +#define WLED_MAX_BUSSES 3 +#define WLED_MIN_VIRTUAL_BUSSES 2 +#else +#if defined(CONFIG_IDF_TARGET_ESP32C3) // 2 RMT, 6 LEDC, only has 1 I2S but NPB does not support it ATM +#define WLED_MAX_BUSSES 3 // will allow 2 digital & 1 analog (or the other way around) +#define WLED_MIN_VIRTUAL_BUSSES 3 +#elif defined(CONFIG_IDF_TARGET_ESP32S2) // 4 RMT, 8 LEDC, only has 1 I2S bus, supported in NPB +#if defined(USERMOD_AUDIOREACTIVE) // requested by @softhack007 https://github.com/blazoncek/WLED/issues/33 +#define WLED_MAX_BUSSES 6 // will allow 4 digital & 2 analog +#define WLED_MIN_VIRTUAL_BUSSES 4 +#else +#define WLED_MAX_BUSSES 7 // will allow 5 digital & 2 analog +#define WLED_MIN_VIRTUAL_BUSSES 3 +#endif +#elif defined(CONFIG_IDF_TARGET_ESP32S3) // 4 RMT, 8 LEDC, has 2 I2S but NPB does not support them ATM +#define WLED_MAX_BUSSES 6 // will allow 4 digital & 2 analog +#define WLED_MIN_VIRTUAL_BUSSES 4 +#else +#if defined(USERMOD_AUDIOREACTIVE) // requested by @softhack007 https://github.com/blazoncek/WLED/issues/33 +#define WLED_MAX_BUSSES 8 +#define WLED_MIN_VIRTUAL_BUSSES 2 +#else +#define WLED_MAX_BUSSES 10 +#define WLED_MIN_VIRTUAL_BUSSES 0 +#endif +#endif +#endif +#else +#ifdef ESP8266 +#if WLED_MAX_BUSES > 5 +#error Maximum number of buses is 5. +#endif +#define WLED_MIN_VIRTUAL_BUSSES (5 - WLED_MAX_BUSSES) #else - #ifdef ESP8266 - #if WLED_MAX_BUSES > 5 - #error Maximum number of buses is 5. - #endif - #define WLED_MIN_VIRTUAL_BUSSES (5-WLED_MAX_BUSSES) - #else - #if WLED_MAX_BUSES > 10 - #error Maximum number of buses is 10. - #endif - #define WLED_MIN_VIRTUAL_BUSSES (10-WLED_MAX_BUSSES) - #endif +#if WLED_MAX_BUSES > 10 +#error Maximum number of buses is 10. +#endif +#define WLED_MIN_VIRTUAL_BUSSES (10 - WLED_MAX_BUSSES) +#endif #endif #ifndef WLED_MAX_BUTTONS - #ifdef ESP8266 - #define WLED_MAX_BUTTONS 2 - #else - #define WLED_MAX_BUTTONS 4 - #endif +#ifdef ESP8266 +#define WLED_MAX_BUTTONS 2 +#else +#define WLED_MAX_BUTTONS 4 +#endif #endif #ifdef ESP8266 @@ -80,14 +80,14 @@ #endif #if defined(WLED_MAX_LEDMAPS) && (WLED_MAX_LEDMAPS > 32 || WLED_MAX_LEDMAPS < 10) - #undef WLED_MAX_LEDMAPS +#undef WLED_MAX_LEDMAPS #endif #ifndef WLED_MAX_LEDMAPS - #ifdef ESP8266 - #define WLED_MAX_LEDMAPS 10 - #else - #define WLED_MAX_LEDMAPS 16 - #endif +#ifdef ESP8266 +#define WLED_MAX_LEDMAPS 10 +#else +#define WLED_MAX_LEDMAPS 16 +#endif #endif //Usermod IDs @@ -137,78 +137,79 @@ #define USERMOD_ID_WEATHER 91 //Usermod "usermod_v2_weather.h" #define USERMOD_ID_GAMES 92 //Usermod "usermod_v2_games.h" #define USERMOD_ID_ANIMARTRIX 93 //Usermod "usermod_v2_animartrix.h" - -//Access point behavior -#define AP_BEHAVIOR_BOOT_NO_CONN 0 //Open AP when no connection after boot -#define AP_BEHAVIOR_NO_CONN 1 //Open when no connection (either after boot or if connection is lost) -#define AP_BEHAVIOR_ALWAYS 2 //Always open -#define AP_BEHAVIOR_BUTTON_ONLY 3 //Only when button pressed for 6 sec - -//Notifier callMode -#define CALL_MODE_INIT 0 //no updates on init, can be used to disable updates -#define CALL_MODE_DIRECT_CHANGE 1 -#define CALL_MODE_BUTTON 2 //default button actions applied to selected segments -#define CALL_MODE_NOTIFICATION 3 -#define CALL_MODE_NIGHTLIGHT 4 -#define CALL_MODE_NO_NOTIFY 5 -#define CALL_MODE_FX_CHANGED 6 //no longer used -#define CALL_MODE_HUE 7 -#define CALL_MODE_PRESET_CYCLE 8 -#define CALL_MODE_BLYNK 9 //no longer used -#define CALL_MODE_ALEXA 10 -#define CALL_MODE_WS_SEND 11 //special call mode, not for notifier, updates websocket only -#define CALL_MODE_BUTTON_PRESET 12 //button/IR JSON preset/macro - -//RGB to RGBW conversion mode -#define RGBW_MODE_MANUAL_ONLY 0 // No automatic white channel calculation. Manual white channel slider -#define RGBW_MODE_AUTO_BRIGHTER 1 // New algorithm. Adds as much white as the darkest RGBW channel -#define RGBW_MODE_AUTO_ACCURATE 2 // New algorithm. Adds as much white as the darkest RGBW channel and subtracts this amount from each RGB channel -#define RGBW_MODE_DUAL 3 // Manual slider + auto calculation. Automatically calculates only if manual slider is set to off (0) -#define RGBW_MODE_MAX 4 // Sets white to the value of the brightest RGB channel (good for white-only LEDs without any RGB) -//#define RGBW_MODE_LEGACY 4 // Old floating algorithm. Too slow for realtime and palette support (unused) -#define AW_GLOBAL_DISABLED 255 // Global auto white mode override disabled. Per-bus setting is used - -//realtime modes -#define REALTIME_MODE_INACTIVE 0 -#define REALTIME_MODE_GENERIC 1 -#define REALTIME_MODE_UDP 2 -#define REALTIME_MODE_HYPERION 3 -#define REALTIME_MODE_E131 4 -#define REALTIME_MODE_ADALIGHT 5 -#define REALTIME_MODE_ARTNET 6 -#define REALTIME_MODE_TPM2NET 7 -#define REALTIME_MODE_DDP 8 -#define REALTIME_MODE_DMX 9 - -//realtime override modes -#define REALTIME_OVERRIDE_NONE 0 -#define REALTIME_OVERRIDE_ONCE 1 -#define REALTIME_OVERRIDE_ALWAYS 2 - -//E1.31 DMX modes -#define DMX_MODE_DISABLED 0 //not used -#define DMX_MODE_SINGLE_RGB 1 //all LEDs same RGB color (3 channels) -#define DMX_MODE_SINGLE_DRGB 2 //all LEDs same RGB color and master dimmer (4 channels) -#define DMX_MODE_EFFECT 3 //trigger standalone effects of WLED (15 channels) -#define DMX_MODE_EFFECT_W 7 //trigger standalone effects of WLED (18 channels) -#define DMX_MODE_MULTIPLE_RGB 4 //every LED is addressed with its own RGB (ledCount * 3 channels) -#define DMX_MODE_MULTIPLE_DRGB 5 //every LED is addressed with its own RGB and share a master dimmer (ledCount * 3 + 1 channels) -#define DMX_MODE_MULTIPLE_RGBW 6 //every LED is addressed with its own RGBW (ledCount * 4 channels) -#define DMX_MODE_EFFECT_SEGMENT 8 //trigger standalone effects of WLED (15 channels per segement) -#define DMX_MODE_EFFECT_SEGMENT_W 9 //trigger standalone effects of WLED (18 channels per segement) -#define DMX_MODE_PRESET 10 //apply presets (1 channel) - -//Light capability byte (unused) 0bRCCCTTTT -//bits 0/1/2/3: specifies a type of LED driver. A single "driver" may have different chip models but must have the same protocol/behavior -//bits 4/5/6: specifies the class of LED driver - 0b000 (dec. 0-15) unconfigured/reserved -// - 0b001 (dec. 16-31) digital (data pin only) -// - 0b010 (dec. 32-47) analog (PWM) -// - 0b011 (dec. 48-63) digital (data + clock / SPI) -// - 0b100 (dec. 64-79) unused/reserved -// - 0b101 (dec. 80-95) virtual network busses -// - 0b110 (dec. 96-111) unused/reserved -// - 0b111 (dec. 112-127) unused/reserved -//bit 7 is reserved and set to 0 +#define USERMOD_ID_MCUTEMP 41 // Usermod mcuTemp + +// Access point behavior +#define AP_BEHAVIOR_BOOT_NO_CONN 0 // Open AP when no connection after boot +#define AP_BEHAVIOR_NO_CONN 1 // Open when no connection (either after boot or if connection is lost) +#define AP_BEHAVIOR_ALWAYS 2 // Always open +#define AP_BEHAVIOR_BUTTON_ONLY 3 // Only when button pressed for 6 sec + +// Notifier callMode +#define CALL_MODE_INIT 0 // no updates on init, can be used to disable updates +#define CALL_MODE_DIRECT_CHANGE 1 +#define CALL_MODE_BUTTON 2 // default button actions applied to selected segments +#define CALL_MODE_NOTIFICATION 3 +#define CALL_MODE_NIGHTLIGHT 4 +#define CALL_MODE_NO_NOTIFY 5 +#define CALL_MODE_FX_CHANGED 6 // no longer used +#define CALL_MODE_HUE 7 +#define CALL_MODE_PRESET_CYCLE 8 +#define CALL_MODE_BLYNK 9 // no longer used +#define CALL_MODE_ALEXA 10 +#define CALL_MODE_WS_SEND 11 // special call mode, not for notifier, updates websocket only +#define CALL_MODE_BUTTON_PRESET 12 // button/IR JSON preset/macro + +// RGB to RGBW conversion mode +#define RGBW_MODE_MANUAL_ONLY 0 // No automatic white channel calculation. Manual white channel slider +#define RGBW_MODE_AUTO_BRIGHTER 1 // New algorithm. Adds as much white as the darkest RGBW channel +#define RGBW_MODE_AUTO_ACCURATE 2 // New algorithm. Adds as much white as the darkest RGBW channel and subtracts this amount from each RGB channel +#define RGBW_MODE_DUAL 3 // Manual slider + auto calculation. Automatically calculates only if manual slider is set to off (0) +#define RGBW_MODE_MAX 4 // Sets white to the value of the brightest RGB channel (good for white-only LEDs without any RGB) +// #define RGBW_MODE_LEGACY 4 // Old floating algorithm. Too slow for realtime and palette support (unused) +#define AW_GLOBAL_DISABLED 255 // Global auto white mode override disabled. Per-bus setting is used + +// realtime modes +#define REALTIME_MODE_INACTIVE 0 +#define REALTIME_MODE_GENERIC 1 +#define REALTIME_MODE_UDP 2 +#define REALTIME_MODE_HYPERION 3 +#define REALTIME_MODE_E131 4 +#define REALTIME_MODE_ADALIGHT 5 +#define REALTIME_MODE_ARTNET 6 +#define REALTIME_MODE_TPM2NET 7 +#define REALTIME_MODE_DDP 8 +#define REALTIME_MODE_DMX 9 + +// realtime override modes +#define REALTIME_OVERRIDE_NONE 0 +#define REALTIME_OVERRIDE_ONCE 1 +#define REALTIME_OVERRIDE_ALWAYS 2 + +// E1.31 DMX modes +#define DMX_MODE_DISABLED 0 // not used +#define DMX_MODE_SINGLE_RGB 1 // all LEDs same RGB color (3 channels) +#define DMX_MODE_SINGLE_DRGB 2 // all LEDs same RGB color and master dimmer (4 channels) +#define DMX_MODE_EFFECT 3 // trigger standalone effects of WLED (15 channels) +#define DMX_MODE_EFFECT_W 7 // trigger standalone effects of WLED (18 channels) +#define DMX_MODE_MULTIPLE_RGB 4 // every LED is addressed with its own RGB (ledCount * 3 channels) +#define DMX_MODE_MULTIPLE_DRGB 5 // every LED is addressed with its own RGB and share a master dimmer (ledCount * 3 + 1 channels) +#define DMX_MODE_MULTIPLE_RGBW 6 // every LED is addressed with its own RGBW (ledCount * 4 channels) +#define DMX_MODE_EFFECT_SEGMENT 8 // trigger standalone effects of WLED (15 channels per segement) +#define DMX_MODE_EFFECT_SEGMENT_W 9 // trigger standalone effects of WLED (18 channels per segement) +#define DMX_MODE_PRESET 10 // apply presets (1 channel) + +// Light capability byte (unused) 0bRCCCTTTT +// bits 0/1/2/3: specifies a type of LED driver. A single "driver" may have different chip models but must have the same protocol/behavior +// bits 4/5/6: specifies the class of LED driver - 0b000 (dec. 0-15) unconfigured/reserved +// - 0b001 (dec. 16-31) digital (data pin only) +// - 0b010 (dec. 32-47) analog (PWM) +// - 0b011 (dec. 48-63) digital (data + clock / SPI) +// - 0b100 (dec. 64-79) unused/reserved +// - 0b101 (dec. 80-95) virtual network busses +// - 0b110 (dec. 96-111) unused/reserved +// - 0b111 (dec. 112-127) unused/reserved +// bit 7 is reserved and set to 0 #define TYPE_NONE 0 //light is not configured #define TYPE_RESERVED 1 //unused. Might indicate a "virtual" light @@ -226,49 +227,51 @@ #define TYPE_SK6812_RGBW 30 #define TYPE_TM1814 31 //"Analog" types (PWM) (32-47) -#define TYPE_ONOFF 40 //binary output (relays etc.) -#define TYPE_ANALOG_1CH 41 //single channel PWM. Uses value of brightest RGBW channel -#define TYPE_ANALOG_2CH 42 //analog WW + CW -#define TYPE_ANALOG_3CH 43 //analog RGB -#define TYPE_ANALOG_4CH 44 //analog RGBW -#define TYPE_ANALOG_5CH 45 //analog RGB + WW + CW -//Digital types (data + clock / SPI) (48-63) -#define TYPE_WS2801 50 -#define TYPE_APA102 51 -#define TYPE_LPD8806 52 -#define TYPE_P9813 53 -#define TYPE_LPD6803 54 -//Network types (master broadcast) (80-95) -#define TYPE_NET_DDP_RGB 80 //network DDP RGB bus (master broadcast bus) -#define TYPE_NET_E131_RGB 81 //network E131 RGB bus (master broadcast bus, unused) -#define TYPE_NET_ARTNET_RGB 82 //network ArtNet RGB bus (master broadcast bus, unused) -#define TYPE_NET_DDP_RGBW 88 //network DDP RGBW bus (master broadcast bus) - -#define IS_DIGITAL(t) ((t) & 0x10) //digital are 16-31 and 48-63 -#define IS_PWM(t) ((t) > 40 && (t) < 46) -#define NUM_PWM_PINS(t) ((t) - 40) //for analog PWM 41-45 only -#define IS_2PIN(t) ((t) > 47) - -//Color orders -#define COL_ORDER_GRB 0 //GRB(w),defaut -#define COL_ORDER_RGB 1 //common for WS2811 -#define COL_ORDER_BRG 2 -#define COL_ORDER_RBG 3 -#define COL_ORDER_BGR 4 -#define COL_ORDER_GBR 5 -#define COL_ORDER_MAX 5 - - -//Button type -#define BTN_TYPE_NONE 0 -#define BTN_TYPE_RESERVED 1 -#define BTN_TYPE_PUSH 2 -#define BTN_TYPE_PUSH_ACT_HIGH 3 -#define BTN_TYPE_SWITCH 4 -#define BTN_TYPE_PIR_SENSOR 5 -#define BTN_TYPE_TOUCH 6 -#define BTN_TYPE_ANALOG 7 -#define BTN_TYPE_ANALOG_INVERTED 8 +#define TYPE_ONOFF 40 // binary output (relays etc.) +#define TYPE_ANALOG_1CH 41 // single channel PWM. Uses value of brightest RGBW channel +#define TYPE_ANALOG_2CH 42 // analog WW + CW +#define TYPE_ANALOG_3CH 43 // analog RGB +#define TYPE_ANALOG_4CH 44 // analog RGBW +#define TYPE_ANALOG_5CH 45 // analog RGB + WW + CW +// Digital types (data + clock / SPI) (48-63) +#define TYPE_WS2801 50 +#define TYPE_APA102 51 +#define TYPE_LPD8806 52 +#define TYPE_P9813 53 +#define TYPE_LPD6803 54 +// Network types (master broadcast) (80-95) +#define TYPE_NET_DDP_RGB 80 // network DDP RGB bus (master broadcast bus) +#define TYPE_NET_E131_RGB 81 // network E131 RGB bus (master broadcast bus, unused) +#define TYPE_NET_ARTNET_RGB 82 // network ArtNet RGB bus (master broadcast bus, unused) +#define TYPE_NET_DDP_RGBW 88 // network DDP RGBW bus (master broadcast bus) + +#define IS_DIGITAL(t) ((t)&0x10) // digital are 16-31 and 48-63 +#define IS_PWM(t) ((t) > 40 && (t) < 46) +#define NUM_PWM_PINS(t) ((t)-40) // for analog PWM 41-45 only +#define IS_2PIN(t) ((t) > 47) + +// Color orders +#define COL_ORDER_GRB 0 // GRB(w),defaut +#define COL_ORDER_RGB 1 // common for WS2811 +#define COL_ORDER_BRG 2 +#define COL_ORDER_RBG 3 +#define COL_ORDER_BGR 4 +#define COL_ORDER_GBR 5 +#define COL_ORDER_MAX 5 + +// Button type +#define BTN_TYPE_NONE 0 +#define BTN_TYPE_RESERVED 1 +#define BTN_TYPE_PUSH 2 +#define BTN_TYPE_PUSH_ACT_HIGH 3 +#define BTN_TYPE_SWITCH 4 +#define BTN_TYPE_PIR_SENSOR 5 +#define BTN_TYPE_TOUCH 6 +#define BTN_TYPE_ANALOG 7 +#define BTN_TYPE_ANALOG_INVERTED 8 + +// Ethernet board types +#define WLED_NUM_ETH_TYPES 9 //Ethernet board types #define WLED_NUM_ETH_TYPES 11 @@ -285,125 +288,115 @@ #define WLED_ETH_ABCWLEDV43ETH 9 #define WLED_ETH_SERG74 10 -//Hue error codes -#define HUE_ERROR_INACTIVE 0 -#define HUE_ERROR_UNAUTHORIZED 1 -#define HUE_ERROR_LIGHTID 3 -#define HUE_ERROR_PUSHLINK 101 -#define HUE_ERROR_JSON_PARSING 250 -#define HUE_ERROR_TIMEOUT 251 -#define HUE_ERROR_ACTIVE 255 - -//Segment option byte bits -#define SEG_OPTION_SELECTED 0 -#define SEG_OPTION_REVERSED 1 -#define SEG_OPTION_ON 2 -#define SEG_OPTION_MIRROR 3 //Indicates that the effect will be mirrored within the segment -#define SEG_OPTION_FREEZE 4 //Segment contents will not be refreshed -#define SEG_OPTION_RESET 5 //Segment runtime requires reset -#define SEG_OPTION_TRANSITIONAL 6 -#define SEG_OPTION_REVERSED_Y 7 -#define SEG_OPTION_MIRROR_Y 8 -#define SEG_OPTION_TRANSPOSED 9 - -//Segment differs return byte -#define SEG_DIFFERS_BRI 0x01 // opacity -#define SEG_DIFFERS_OPT 0x02 // all segment options except: selected, reset & transitional -#define SEG_DIFFERS_COL 0x04 // colors -#define SEG_DIFFERS_FX 0x08 // effect/mode parameters -#define SEG_DIFFERS_BOUNDS 0x10 // segment start/stop ounds -#define SEG_DIFFERS_GSO 0x20 // grouping, spacing & offset -#define SEG_DIFFERS_SEL 0x80 // selected - -//Playlist option byte -#define PL_OPTION_SHUFFLE 0x01 +// Segment option byte bits +#define SEG_OPTION_SELECTED 0 +#define SEG_OPTION_REVERSED 1 +#define SEG_OPTION_ON 2 +#define SEG_OPTION_MIRROR 3 // Indicates that the effect will be mirrored within the segment +#define SEG_OPTION_FREEZE 4 // Segment contents will not be refreshed +#define SEG_OPTION_RESET 5 // Segment runtime requires reset +#define SEG_OPTION_TRANSITIONAL 6 +#define SEG_OPTION_REVERSED_Y 7 +#define SEG_OPTION_MIRROR_Y 8 +#define SEG_OPTION_TRANSPOSED 9 + +// Segment differs return byte +#define SEG_DIFFERS_BRI 0x01 // opacity +#define SEG_DIFFERS_OPT 0x02 // all segment options except: selected, reset & transitional +#define SEG_DIFFERS_COL 0x04 // colors +#define SEG_DIFFERS_FX 0x08 // effect/mode parameters +#define SEG_DIFFERS_BOUNDS 0x10 // segment start/stop ounds +#define SEG_DIFFERS_GSO 0x20 // grouping, spacing & offset +#define SEG_DIFFERS_SEL 0x80 // selected + +// Playlist option byte +#define PL_OPTION_SHUFFLE 0x01 // Segment capability byte -#define SEG_CAPABILITY_RGB 0x01 -#define SEG_CAPABILITY_W 0x02 -#define SEG_CAPABILITY_CCT 0x04 +#define SEG_CAPABILITY_RGB 0x01 +#define SEG_CAPABILITY_W 0x02 +#define SEG_CAPABILITY_CCT 0x04 // WLED Error modes -#define ERR_NONE 0 // All good :) -#define ERR_EEP_COMMIT 2 // Could not commit to EEPROM (wrong flash layout?) -#define ERR_NOBUF 3 // JSON buffer was not released in time, request cannot be handled at this time -#define ERR_JSON 9 // JSON parsing failed (input too large?) -#define ERR_FS_BEGIN 10 // Could not init filesystem (no partition?) -#define ERR_FS_QUOTA 11 // The FS is full or the maximum file size is reached -#define ERR_FS_PLOAD 12 // It was attempted to load a preset that does not exist -#define ERR_FS_IRLOAD 13 // It was attempted to load an IR JSON cmd, but the "ir.json" file does not exist -#define ERR_FS_GENERAL 19 // A general unspecified filesystem error occured -#define ERR_OVERTEMP 30 // An attached temperature sensor has measured above threshold temperature (not implemented) -#define ERR_OVERCURRENT 31 // An attached current sensor has measured a current above the threshold (not implemented) -#define ERR_UNDERVOLT 32 // An attached voltmeter has measured a voltage below the threshold (not implemented) - -//Timer mode types -#define NL_MODE_SET 0 //After nightlight time elapsed, set to target brightness -#define NL_MODE_FADE 1 //Fade to target brightness gradually -#define NL_MODE_COLORFADE 2 //Fade to target brightness and secondary color gradually -#define NL_MODE_SUN 3 //Sunrise/sunset. Target brightness is set immediately, then Sunrise effect is started. Max 60 min. - +#define ERR_NONE 0 // All good :) +#define ERR_EEP_COMMIT 2 // Could not commit to EEPROM (wrong flash layout?) +#define ERR_NOBUF 3 // JSON buffer was not released in time, request cannot be handled at this time +#define ERR_JSON 9 // JSON parsing failed (input too large?) +#define ERR_FS_BEGIN 10 // Could not init filesystem (no partition?) +#define ERR_FS_QUOTA 11 // The FS is full or the maximum file size is reached +#define ERR_FS_PLOAD 12 // It was attempted to load a preset that does not exist +#define ERR_FS_IRLOAD 13 // It was attempted to load an IR JSON cmd, but the "ir.json" file does not exist +#define ERR_FS_GENERAL 19 // A general unspecified filesystem error occured +#define ERR_OVERTEMP 30 // An attached temperature sensor has measured above threshold temperature (not implemented) +#define ERR_OVERCURRENT 31 // An attached current sensor has measured a current above the threshold (not implemented) +#define ERR_UNDERVOLT 32 // An attached voltmeter has measured a voltage below the threshold (not implemented) + +// Timer mode types +#define NL_MODE_SET 0 // After nightlight time elapsed, set to target brightness +#define NL_MODE_FADE 1 // Fade to target brightness gradually +#define NL_MODE_COLORFADE 2 // Fade to target brightness and secondary color gradually +#define NL_MODE_SUN 3 // Sunrise/sunset. Target brightness is set immediately, then Sunrise effect is started. Max 60 min. #define NTP_PACKET_SIZE 48 -//maximum number of rendered LEDs - this does not have to match max. physical LEDs, e.g. if there are virtual busses +// maximum number of rendered LEDs - this does not have to match max. physical LEDs, e.g. if there are virtual busses #ifndef MAX_LEDS #ifdef ESP8266 -#define MAX_LEDS 1664 //can't rely on memory limit to limit this to 1600 LEDs +#define MAX_LEDS 1664 // can't rely on memory limit to limit this to 1600 LEDs #else #define MAX_LEDS 8192 #endif #endif #ifndef MAX_LED_MEMORY - #ifdef ESP8266 - #define MAX_LED_MEMORY 4000 - #else - #if defined(ARDUINO_ARCH_ESP32S2) || defined(ARDUINO_ARCH_ESP32C3) - #define MAX_LED_MEMORY 32000 - #else - #define MAX_LED_MEMORY 64000 - #endif - #endif +#ifdef ESP8266 +#define MAX_LED_MEMORY 4000 +#else +#if defined(ARDUINO_ARCH_ESP32S2) || defined(ARDUINO_ARCH_ESP32C3) +#define MAX_LED_MEMORY 32000 +#else +#define MAX_LED_MEMORY 64000 +#endif +#endif #endif #ifndef MAX_LEDS_PER_BUS -#define MAX_LEDS_PER_BUS 2048 // may not be enough for fast LEDs (i.e. APA102) +#define MAX_LEDS_PER_BUS 2048 // may not be enough for fast LEDs (i.e. APA102) #endif // string temp buffer (now stored in stack locally) // WLEDMM ...which is actually not the greatest design choice on ESP32 #ifdef ESP8266 #define SETTINGS_STACK_BUF_SIZE 2048 #else -#define SETTINGS_STACK_BUF_SIZE 3712 // WLEDMM added 512 bytes of margin (was 3096) +#define SETTINGS_STACK_BUF_SIZE 3712 // WLEDMM added 512 bytes of margin (was 3096) #endif #ifdef WLED_USE_ETHERNET - #define E131_MAX_UNIVERSE_COUNT 20 +#define E131_MAX_UNIVERSE_COUNT 20 #else - #ifdef ESP8266 - #define E131_MAX_UNIVERSE_COUNT 9 - #else - #define E131_MAX_UNIVERSE_COUNT 12 - #endif +#ifdef ESP8266 +#define E131_MAX_UNIVERSE_COUNT 9 +#else +#define E131_MAX_UNIVERSE_COUNT 12 +#endif #endif #ifndef ABL_MILLIAMPS_DEFAULT - #define ABL_MILLIAMPS_DEFAULT 1500 // auto lower brightness to stay close to milliampere limit WLEDMM: min 1500 for 1024leds +#define ABL_MILLIAMPS_DEFAULT 1500 // auto lower brightness to stay close to milliampere limit WLEDMM: min 1500 for 1024leds #else - #if ABL_MILLIAMPS_DEFAULT == 0 // disable ABL - #elif ABL_MILLIAMPS_DEFAULT < 250 // make sure value is at least 250 - #warning "make sure value is at least 250" - #define ABL_MILLIAMPS_DEFAULT 250 - #endif +#if ABL_MILLIAMPS_DEFAULT == 0 // disable ABL +#elif ABL_MILLIAMPS_DEFAULT < 250 // make sure value is at least 250 +#warning "make sure value is at least 250" +#define ABL_MILLIAMPS_DEFAULT 250 +#endif #endif // PWM settings #ifndef WLED_PWM_FREQ #ifdef ESP8266 - #define WLED_PWM_FREQ 880 //PWM frequency proven as good for LEDs +#define WLED_PWM_FREQ 880 // PWM frequency proven as good for LEDs #else - #define WLED_PWM_FREQ 19531 +#define WLED_PWM_FREQ 19531 #endif #endif @@ -411,83 +404,83 @@ // Size of buffer for API JSON object (increase for more segments) #ifdef ESP8266 - #define JSON_BUFFER_SIZE 10240 +#define JSON_BUFFER_SIZE 10240 +#else +#if defined(BOARD_HAS_PSRAM) && (defined(WLED_USE_PSRAM) || defined(WLED_USE_PSRAM_JSON)) +#if defined(ARDUINO_ARCH_ESP32S2) || defined(ARDUINO_ARCH_ESP32C3) +#define JSON_BUFFER_SIZE 48000 // WLEDMM #else - #if defined(BOARD_HAS_PSRAM) && (defined(WLED_USE_PSRAM) || defined(WLED_USE_PSRAM_JSON)) - #if defined(ARDUINO_ARCH_ESP32S2) || defined(ARDUINO_ARCH_ESP32C3) - #define JSON_BUFFER_SIZE 48000 // WLEDMM - #else - #define JSON_BUFFER_SIZE 60000 // WLEDMM - #endif - #else - #define JSON_BUFFER_SIZE 24576 - #endif -#endif - -//#define MIN_HEAP_SIZE (8k for AsyncWebServer) +#define JSON_BUFFER_SIZE 60000 // WLEDMM +#endif +#else +#define JSON_BUFFER_SIZE 24576 +#endif +#endif + +// #define MIN_HEAP_SIZE (8k for AsyncWebServer) #define MIN_HEAP_SIZE 8192 // Maximum size of node map (list of other WLED instances) #ifdef ESP8266 - #define WLED_MAX_NODES 24 +#define WLED_MAX_NODES 24 #else - #define WLED_MAX_NODES 150 +#define WLED_MAX_NODES 150 #endif -//this is merely a default now and can be changed at runtime +// this is merely a default now and can be changed at runtime #ifndef LEDPIN #if defined(ESP8266) || (defined(ARDUINO_ARCH_ESP32) && defined(BOARD_HAS_PSRAM)) || defined(CONFIG_IDF_TARGET_ESP32C3) - #define LEDPIN 2 // GPIO2 (D4) on Wemod D1 mini compatible boards +#define LEDPIN 2 // GPIO2 (D4) on Wemod D1 mini compatible boards #else - #define LEDPIN 16 // aligns with GPIO2 (D4) on Wemos D1 mini32 compatible boards +#define LEDPIN 16 // aligns with GPIO2 (D4) on Wemos D1 mini32 compatible boards #endif #endif #ifdef WLED_ENABLE_DMX #if (LEDPIN == 2) - #undef LEDPIN - #define LEDPIN 1 - #warning "Pin conflict compiling with DMX and LEDs on pin 2. The default LED pin has been changed to pin 1." +#undef LEDPIN +#define LEDPIN 1 +#warning "Pin conflict compiling with DMX and LEDs on pin 2. The default LED pin has been changed to pin 1." #endif #endif #ifndef DEFAULT_LED_COUNT - #define DEFAULT_LED_COUNT 30 +#define DEFAULT_LED_COUNT 30 #endif -#define INTERFACE_UPDATE_COOLDOWN 2000 //time in ms to wait between websockets, alexa, and MQTT updates +#define INTERFACE_UPDATE_COOLDOWN 2000 // time in ms to wait between websockets, alexa, and MQTT updates // HW_PIN_SCL & HW_PIN_SDA are used for information in usermods settings page and usermods themselves // which GPIO pins are actually used in a hardwarea layout (controller board) -//WLEDMM: unchangeable pins are not treated here by undef them, but elsewhere in the code +// WLEDMM: unchangeable pins are not treated here by undef them, but elsewhere in the code // defaults for 1st I2C on ESP32 (Wire global) #ifndef HW_PIN_SCL - #define HW_PIN_SCL -1 //WLEDMM if not defined, -1 will be used (not SCL/22) (also for esp8266?) +#define HW_PIN_SCL -1 // WLEDMM if not defined, -1 will be used (not SCL/22) (also for esp8266?) #endif #ifndef HW_PIN_SDA - #define HW_PIN_SDA -1 //WLEDMM if not defined, -1 will be used (not SDA/21) (also for esp8266?) +#define HW_PIN_SDA -1 // WLEDMM if not defined, -1 will be used (not SDA/21) (also for esp8266?) #endif // HW_PIN_SCLKSPI & HW_PIN_MOSISPI & HW_PIN_MISOSPI are used for information in usermods settings page and usermods themselves // which GPIO pins are actually used in a hardwarea layout (controller board) -//WLEDMM: unchangeable pins are not treated here by undef them, but elsewhere in the code +// WLEDMM: unchangeable pins are not treated here by undef them, but elsewhere in the code // defaults for VSPI on ESP32 (SPI global, SPI.cpp) as HSPI is used by WLED (bus_wrapper.h) #ifndef HW_PIN_CLOCKSPI - #define HW_PIN_CLOCKSPI -1 //WLEDMM if not defined -1 will be used (not SCK/18) +#define HW_PIN_CLOCKSPI -1 // WLEDMM if not defined -1 will be used (not SCK/18) #endif -#ifndef HW_PIN_MOSISPI //WLEDMM renamed from HW_PIN_DATASPI - #define HW_PIN_MOSISPI -1 //WLEDMM if not defined -1 will be used (not MOSI/23) +#ifndef HW_PIN_MOSISPI // WLEDMM renamed from HW_PIN_DATASPI +#define HW_PIN_MOSISPI -1 // WLEDMM if not defined -1 will be used (not MOSI/23) #endif #ifndef HW_PIN_MISOSPI - #define HW_PIN_MISOSPI -1 //WLEDMM if not defined -1 will be used (not MISO/19) +#define HW_PIN_MISOSPI -1 // WLEDMM if not defined -1 will be used (not MISO/19) #endif // WLEDMM: IRAM_ATTR for 8266 causes error: section `.text1' will not fit in region `iram1_0_seg' // error only in MM, not in upstream... tbd: find out why #ifdef ARDUINO_ARCH_ESP32 - #define IRAM_ATTR_YN IRAM_ATTR +#define IRAM_ATTR_YN IRAM_ATTR #else - #define IRAM_ATTR_YN +#define IRAM_ATTR_YN #endif #endif diff --git a/wled00/usermods_list.cpp b/wled00/usermods_list.cpp index 73e3a47af6..679a38da97 100644 --- a/wled00/usermods_list.cpp +++ b/wled00/usermods_list.cpp @@ -9,14 +9,14 @@ * || || || * \/ \/ \/ */ -//#include "../usermods/EXAMPLE_v2/usermod_v2_example.h" +// #include "../usermods/EXAMPLE_v2/usermod_v2_example.h" #ifdef USERMOD_BATTERY - #include "../usermods/Battery/usermod_v2_Battery.h" +#include "../usermods/Battery/usermod_v2_Battery.h" #endif #ifdef USERMOD_DALLASTEMPERATURE - #include "../usermods/Temperature/usermod_temperature.h" +#include "../usermods/Temperature/usermod_temperature.h" #endif #ifdef USERMOD_SHT @@ -24,173 +24,176 @@ #endif #ifdef USERMOD_SN_PHOTORESISTOR - #include "../usermods/SN_Photoresistor/usermod_sn_photoresistor.h" +#include "../usermods/SN_Photoresistor/usermod_sn_photoresistor.h" #endif #ifdef USERMOD_PWM_FAN - // requires DALLASTEMPERATURE or SHT included before it - #include "../usermods/PWM_fan/usermod_PWM_fan.h" +// requires DALLASTEMPERATURE or SHT included before it +#include "../usermods/PWM_fan/usermod_PWM_fan.h" #endif #ifdef USERMOD_BUZZER - #include "../usermods/buzzer/usermod_v2_buzzer.h" +#include "../usermods/buzzer/usermod_v2_buzzer.h" #endif #ifdef USERMOD_SENSORSTOMQTT - #include "../usermods/sensors_to_mqtt/usermod_v2_SensorsToMqtt.h" +#include "../usermods/sensors_to_mqtt/usermod_v2_SensorsToMqtt.h" #endif #ifdef USERMOD_PIRSWITCH - #include "../usermods/PIR_sensor_switch/usermod_PIR_sensor_switch.h" +#include "../usermods/PIR_sensor_switch/usermod_PIR_sensor_switch.h" #endif #ifdef USERMOD_MODE_SORT - #include "../usermods/usermod_v2_mode_sort/usermod_v2_mode_sort.h" +#include "../usermods/usermod_v2_mode_sort/usermod_v2_mode_sort.h" #endif #ifdef USERMOD_BH1750 - #include "../usermods/BH1750_v2/usermod_bh1750.h" //WLEDMM: usermod_bh1750.h in small caps! +#include "../usermods/BH1750_v2/usermod_bh1750.h" //WLEDMM: usermod_bh1750.h in small caps! #endif // BME280 v2 usermod. Define "USERMOD_BME280" in my_config.h #ifdef USERMOD_BME280 - #include "../usermods/BME280_v2/usermod_bme280.h" +#include "../usermods/BME280_v2/usermod_bme280.h" #endif #ifdef USERMOD_FOUR_LINE_DISPLAY - #if defined(USE_ALT_DISPLAY) || defined(USE_ALT_DISPlAY) - #include "../usermods/usermod_v2_four_line_display_ALT/usermod_v2_four_line_display_ALT.h" - #else - #include "../usermods/usermod_v2_four_line_display/usermod_v2_four_line_display.h" - #endif +#if defined(USE_ALT_DISPLAY) || defined(USE_ALT_DISPlAY) +#include "../usermods/usermod_v2_four_line_display_ALT/usermod_v2_four_line_display_ALT.h" +#else +#include "../usermods/usermod_v2_four_line_display/usermod_v2_four_line_display.h" +#endif #endif #ifdef USERMOD_ROTARY_ENCODER_UI - #if defined(USE_ALT_DISPLAY) || defined(USE_ALT_DISPlAY) - #include "../usermods/usermod_v2_rotary_encoder_ui_ALT/usermod_v2_rotary_encoder_ui_ALT.h" - #else - #include "../usermods/usermod_v2_rotary_encoder_ui/usermod_v2_rotary_encoder_ui.h" - #endif +#if defined(USE_ALT_DISPLAY) || defined(USE_ALT_DISPlAY) +#include "../usermods/usermod_v2_rotary_encoder_ui_ALT/usermod_v2_rotary_encoder_ui_ALT.h" +#else +#include "../usermods/usermod_v2_rotary_encoder_ui/usermod_v2_rotary_encoder_ui.h" +#endif #endif #ifdef USERMOD_AUTO_SAVE - #include "../usermods/usermod_v2_auto_save/usermod_v2_auto_save.h" +#include "../usermods/usermod_v2_auto_save/usermod_v2_auto_save.h" #endif #ifdef USERMOD_DHT - #include "../usermods/DHT/usermod_dht.h" +#include "../usermods/DHT/usermod_dht.h" #endif #ifdef USERMOD_VL53L0X_GESTURES - #include "../usermods/VL53L0X_gestures/usermod_vl53l0x_gestures.h" +#include "../usermods/VL53L0X_gestures/usermod_vl53l0x_gestures.h" #endif #ifdef USERMOD_ANIMATED_STAIRCASE - #include "../usermods/Animated_Staircase/Animated_Staircase.h" +#include "../usermods/Animated_Staircase/Animated_Staircase.h" #endif #ifdef USERMOD_MULTI_RELAY - #include "../usermods/multi_relay/usermod_multi_relay.h" +#include "../usermods/multi_relay/usermod_multi_relay.h" #endif #ifdef USERMOD_RTC - #include "../usermods/RTC/usermod_rtc.h" +#include "../usermods/RTC/usermod_rtc.h" #endif #ifdef USERMOD_ELEKSTUBE_IPS - #include "../usermods/EleksTube_IPS/usermod_elekstube_ips.h" +#include "../usermods/EleksTube_IPS/usermod_elekstube_ips.h" #endif #ifdef USERMOD_ROTARY_ENCODER_BRIGHTNESS_COLOR - #include "../usermods/usermod_rotary_brightness_color/usermod_rotary_brightness_color.h" +#include "../usermods/usermod_rotary_brightness_color/usermod_rotary_brightness_color.h" #endif #ifdef RGB_ROTARY_ENCODER - #include "../usermods/rgb-rotary-encoder/rgb-rotary-encoder.h" +#include "../usermods/rgb-rotary-encoder/rgb-rotary-encoder.h" #endif #ifdef USERMOD_ST7789_DISPLAY - #include "../usermods/ST7789_display/ST7789_Display.h" +#include "../usermods/ST7789_display/ST7789_Display.h" #endif #ifdef USERMOD_SEVEN_SEGMENT - #include "../usermods/seven_segment_display/usermod_v2_seven_segment_display.h" +#include "../usermods/seven_segment_display/usermod_v2_seven_segment_display.h" #endif #ifdef USERMOD_SSDR - #include "../usermods/seven_segment_display_reloaded/usermod_seven_segment_reloaded.h" +#include "../usermods/seven_segment_display_reloaded/usermod_seven_segment_reloaded.h" #endif #ifdef USERMOD_CRONIXIE - #include "../usermods/Cronixie/usermod_cronixie.h" +#include "../usermods/Cronixie/usermod_cronixie.h" #endif #ifdef QUINLED_AN_PENTA - #include "../usermods/quinled-an-penta/quinled-an-penta.h" +#include "../usermods/quinled-an-penta/quinled-an-penta.h" #endif #ifdef USERMOD_WIZLIGHTS - #include "../usermods/wizlights/wizlights.h" +#include "../usermods/wizlights/wizlights.h" #endif #ifdef USERMOD_WORDCLOCK - #include "../usermods/usermod_v2_word_clock/usermod_v2_word_clock.h" +#include "../usermods/usermod_v2_word_clock/usermod_v2_word_clock.h" #endif #ifdef USERMOD_MY9291 - #include "../usermods/MY9291/usermode_MY9291.h" +#include "../usermods/MY9291/usermode_MY9291.h" #endif #ifdef USERMOD_SI7021_MQTT_HA - #include "../usermods/Si7021_MQTT_HA/usermod_si7021_mqtt_ha.h" +#include "../usermods/Si7021_MQTT_HA/usermod_si7021_mqtt_ha.h" #endif #ifdef USERMOD_SMARTNEST - #include "../usermods/smartnest/usermod_smartnest.h" +#include "../usermods/smartnest/usermod_smartnest.h" #endif #ifdef USERMOD_AUDIOREACTIVE - #include "../usermods/audioreactive/audio_reactive.h" +#include "../usermods/audioreactive/audio_reactive.h" #endif #ifdef USERMOD_ANALOG_CLOCK - #include "../usermods/Analog_Clock/Analog_Clock.h" +#include "../usermods/Analog_Clock/Analog_Clock.h" #endif #ifdef USERMOD_PING_PONG_CLOCK - #include "../usermods/usermod_v2_ping_pong_clock/usermod_v2_ping_pong_clock.h" +#include "../usermods/usermod_v2_ping_pong_clock/usermod_v2_ping_pong_clock.h" #endif #ifdef USERMOD_ADS1115 - #include "../usermods/ADS1115_v2/usermod_ads1115.h" +#include "../usermods/ADS1115_v2/usermod_ads1115.h" #endif #ifdef USERMOD_KLIPPER_PERCENTAGE - #include "..\usermods\usermod_v2_klipper_percentage\usermod_v2_klipper_percentage.h" +#include "..\usermods\usermod_v2_klipper_percentage\usermod_v2_klipper_percentage.h" #endif #ifdef USERMOD_BOBLIGHT - #include "../usermods/boblight/boblight.h" +#include "../usermods/boblight/boblight.h" #endif #if defined(WLED_USE_SD_MMC) || defined(WLED_USE_SD_SPI) // This include of SD.h and SD_MMC.h must happen here, else they won't be // resolved correctly (when included in mod's header only) - #ifdef WLED_USE_SD_MMC - #include "SD_MMC.h" - #elif defined(WLED_USE_SD_SPI) - #include "SD.h" - #include "SPI.h" - #endif - #include "../usermods/sd_card/usermod_sd_card.h" +#ifdef WLED_USE_SD_MMC +#include "SD_MMC.h" +#elif defined(WLED_USE_SD_SPI) +#include "SD.h" +#include "SPI.h" +#endif +#include "../usermods/sd_card/usermod_sd_card.h" #endif #ifdef USERMOD_PWM_OUTPUTS #include "../usermods/pwm_outputs/usermod_pwm_outputs.h" #endif +#ifdef USERMOD_MCUTEMP +#include "../usermods/mcu_temp/mcuTemp.h" +#endif -//WLEDMM ARTIFX +// WLEDMM ARTIFX #ifdef USERMOD_ARTIFX #include "../usermods/artifx/usermod_v2_artifx.h" #endif @@ -211,187 +214,190 @@ void registerUsermods() { -/* + /* * Add your usermod class name here * || || || * \/ \/ \/ */ - //usermods.add(new MyExampleUsermod()); - #ifdef USERMOD_BATTERY +// usermods.add(new MyExampleUsermod()); +#ifdef USERMOD_BATTERY usermods.add(new UsermodBattery()); - #endif +#endif - #ifdef USERMOD_DALLASTEMPERATURE +#ifdef USERMOD_DALLASTEMPERATURE usermods.add(new UsermodTemperature("Temperature", true)); - #endif +#endif - #ifdef USERMOD_SN_PHOTORESISTOR +#ifdef USERMOD_SN_PHOTORESISTOR usermods.add(new Usermod_SN_Photoresistor()); - #endif +#endif - #ifdef USERMOD_PWM_FAN +#ifdef USERMOD_PWM_FAN usermods.add(new PWMFanUsermod()); - #endif +#endif - #ifdef USERMOD_BUZZER +#ifdef USERMOD_BUZZER usermods.add(new BuzzerUsermod()); - #endif +#endif #ifdef USERMOD_BH1750 usermods.add(new Usermod_BH1750("BH1750", false)); #endif - #ifdef USERMOD_BME280 +#ifdef USERMOD_BME280 usermods.add(new UsermodBME280()); - #endif +#endif - #ifdef USERMOD_SENSORSTOMQTT +#ifdef USERMOD_SENSORSTOMQTT usermods.add(new UserMod_SensorsToMQTT()); - #endif +#endif - #ifdef USERMOD_PIRSWITCH +#ifdef USERMOD_PIRSWITCH usermods.add(new PIRsensorSwitch()); - #endif +#endif - #ifdef USERMOD_MODE_SORT +#ifdef USERMOD_MODE_SORT usermods.add(new ModeSortUsermod()); - #endif +#endif - #ifdef USERMOD_FOUR_LINE_DISPLAY +#ifdef USERMOD_FOUR_LINE_DISPLAY usermods.add(new FourLineDisplayUsermod()); - #endif +#endif - #ifdef USERMOD_ROTARY_ENCODER_UI +#ifdef USERMOD_ROTARY_ENCODER_UI usermods.add(new RotaryEncoderUIUsermod()); // can use USERMOD_FOUR_LINE_DISPLAY - #endif +#endif - #ifdef USERMOD_AUTO_SAVE - usermods.add(new AutoSaveUsermod()); // can use USERMOD_FOUR_LINE_DISPLAY - #endif +#ifdef USERMOD_AUTO_SAVE + usermods.add(new AutoSaveUsermod()); // can use USERMOD_FOUR_LINE_DISPLAY +#endif - #ifdef USERMOD_DHT +#ifdef USERMOD_DHT usermods.add(new UsermodDHT()); - #endif +#endif - #ifdef USERMOD_VL53L0X_GESTURES +#ifdef USERMOD_VL53L0X_GESTURES usermods.add(new UsermodVL53L0XGestures()); - #endif +#endif - #ifdef USERMOD_ANIMATED_STAIRCASE +#ifdef USERMOD_ANIMATED_STAIRCASE usermods.add(new Animated_Staircase()); - #endif +#endif - #ifdef USERMOD_MULTI_RELAY +#ifdef USERMOD_MULTI_RELAY usermods.add(new MultiRelay()); - #endif +#endif - #ifdef USERMOD_RTC +#ifdef USERMOD_RTC usermods.add(new RTCUsermod()); - #endif +#endif - #ifdef USERMOD_ELEKSTUBE_IPS +#ifdef USERMOD_ELEKSTUBE_IPS usermods.add(new ElekstubeIPSUsermod()); - #endif +#endif - #ifdef USERMOD_ROTARY_ENCODER_BRIGHTNESS_COLOR +#ifdef USERMOD_ROTARY_ENCODER_BRIGHTNESS_COLOR usermods.add(new RotaryEncoderBrightnessColor()); - #endif +#endif - #ifdef RGB_ROTARY_ENCODER +#ifdef RGB_ROTARY_ENCODER usermods.add(new RgbRotaryEncoderUsermod()); - #endif +#endif - #ifdef USERMOD_ST7789_DISPLAY +#ifdef USERMOD_ST7789_DISPLAY usermods.add(new St7789DisplayUsermod()); - #endif +#endif - #ifdef USERMOD_SEVEN_SEGMENT +#ifdef USERMOD_SEVEN_SEGMENT usermods.add(new SevenSegmentDisplay()); - #endif +#endif - #ifdef USERMOD_SSDR +#ifdef USERMOD_SSDR usermods.add(new UsermodSSDR()); - #endif +#endif - #ifdef USERMOD_CRONIXIE +#ifdef USERMOD_CRONIXIE usermods.add(new UsermodCronixie()); - #endif +#endif - #ifdef QUINLED_AN_PENTA +#ifdef QUINLED_AN_PENTA usermods.add(new QuinLEDAnPentaUsermod()); - #endif +#endif - #ifdef USERMOD_WIZLIGHTS +#ifdef USERMOD_WIZLIGHTS usermods.add(new WizLightsUsermod()); - #endif +#endif - #ifdef USERMOD_WORDCLOCK +#ifdef USERMOD_WORDCLOCK usermods.add(new WordClockUsermod()); - #endif +#endif - #ifdef USERMOD_MY9291 +#ifdef USERMOD_MY9291 usermods.add(new MY9291Usermod()); - #endif +#endif - #ifdef USERMOD_SI7021_MQTT_HA +#ifdef USERMOD_SI7021_MQTT_HA usermods.add(new Si7021_MQTT_HA()); - #endif +#endif - #ifdef USERMOD_SMARTNEST +#ifdef USERMOD_SMARTNEST usermods.add(new Smartnest()); - #endif +#endif - #ifdef USERMOD_AUDIOREACTIVE +#ifdef USERMOD_AUDIOREACTIVE usermods.add(new AudioReactive()); - #endif +#endif - #ifdef USERMOD_ANALOG_CLOCK +#ifdef USERMOD_ANALOG_CLOCK usermods.add(new AnalogClockUsermod()); - #endif +#endif - #ifdef USERMOD_PING_PONG_CLOCK +#ifdef USERMOD_PING_PONG_CLOCK usermods.add(new PingPongClockUsermod()); - #endif +#endif - #ifdef USERMOD_ADS1115 +#ifdef USERMOD_ADS1115 usermods.add(new ADS1115Usermod()); - #endif +#endif - #ifdef USERMOD_KLIPPER_PERCENTAGE +#ifdef USERMOD_KLIPPER_PERCENTAGE usermods.add(new klipper_percentage()); - #endif +#endif - #ifdef USERMOD_BOBLIGHT +#ifdef USERMOD_BOBLIGHT usermods.add(new BobLightUsermod()); - #endif +#endif - #ifdef SD_ADAPTER +#ifdef SD_ADAPTER usermods.add(new UsermodSdCard()); - #endif +#endif - #ifdef USERMOD_PWM_OUTPUTS +#ifdef USERMOD_PWM_OUTPUTS usermods.add(new PwmOutputsUsermod()); - #endif +#endif #ifdef USERMOD_SHT usermods.add(new ShtUsermod("SHT-Sensor", false)); #endif - //WLEDMM ARTIFX - #ifdef USERMOD_ARTIFX +#ifdef USERMOD_MCUTEMP + usermods.add(new mcuTemp("MCUTemp", true)); +#endif + +// WLEDMM ARTIFX +#ifdef USERMOD_ARTIFX usermods.add(new ARTIFXUserMod()); - #endif - - #ifdef USERMOD_WEATHER - usermods.add(new WeatherUsermod("Weather", true)); - #endif +#endif +#ifdef USERMOD_WEATHER + usermods.add(new WeatherUsermod("Weather", true)); +#endif - #ifdef USERMOD_MPU6050_IMU +#ifdef USERMOD_MPU6050_IMU usermods.add(new MPU6050Driver("mpu6050-IMU", true)); - #endif +#endif - #ifdef USERMOD_GAMES +#ifdef USERMOD_GAMES usermods.add(new GamesUsermod()); #endif #ifdef USERMOD_ANIMARTRIX From d7ba0093ac15e2c537b1a043de46ddbd8acf1592 Mon Sep 17 00:00:00 2001 From: lost-hope Date: Fri, 2 Jun 2023 23:40:38 +0200 Subject: [PATCH 2/4] Changes temp read function and increased interval --- usermods/mcu_temp/mcuTemp.h | 27 ++++----------------------- 1 file changed, 4 insertions(+), 23 deletions(-) diff --git a/usermods/mcu_temp/mcuTemp.h b/usermods/mcu_temp/mcuTemp.h index 65b8a8049b..f9ff1396e0 100644 --- a/usermods/mcu_temp/mcuTemp.h +++ b/usermods/mcu_temp/mcuTemp.h @@ -2,18 +2,6 @@ #include "wled.h" -#ifdef __cplusplus -extern "C" -{ -#endif - - uint8_t temprature_sens_read(); - -#ifdef __cplusplus -} -#endif - -uint8_t temprature_sens_read(); // class name. Use something descriptive and leave the ": public Usermod" part :) class mcuTemp : public Usermod { @@ -43,20 +31,13 @@ class mcuTemp : public Usermod return; #ifdef ESP8266 // ESP8266 -// does not seem possible -#else -#if defined(CONFIG_IDF_TARGET_ESP32C3) // ESP32C3 - -#elif defined(CONFIG_IDF_TARGET_ESP32S2) // ESP32S2 - -#elif defined(CONFIG_IDF_TARGET_ESP32S3) // ESP32S3 - + // does not seem possible + mcutemp = -1; #else // ESP32 - mcutemp = roundf(((temprature_sens_read() - 32) / 1.8) * 100) / 100; -#endif + mcutemp = roundf(temperatureRead() * 100) / 100; #endif - if (millis() - lastTime > 1000) + if (millis() - lastTime > 10000) { char array[10]; snprintf(array, sizeof(array), "%f", mcutemp); From 967f4dda6d3d837bc6f1515bc164e185ff2c2a87 Mon Sep 17 00:00:00 2001 From: lost-hope Date: Sat, 3 Jun 2023 09:01:47 +0200 Subject: [PATCH 3/4] Blocked usage of function on S2 --- usermods/mcu_temp/mcuTemp.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/usermods/mcu_temp/mcuTemp.h b/usermods/mcu_temp/mcuTemp.h index f9ff1396e0..d38bac2be3 100644 --- a/usermods/mcu_temp/mcuTemp.h +++ b/usermods/mcu_temp/mcuTemp.h @@ -33,7 +33,9 @@ class mcuTemp : public Usermod #ifdef ESP8266 // ESP8266 // does not seem possible mcutemp = -1; -#else // ESP32 +#elif defined(CONFIG_IDF_TARGET_ESP32S2) // ESP32S2 + mcutemp = -1; +#else // ESP32 ESP32S3 and ESP32C3 mcutemp = roundf(temperatureRead() * 100) / 100; #endif From 866b57523b2fadf5c715aaabb6c10f6eb91712c1 Mon Sep 17 00:00:00 2001 From: lost-hope Date: Sat, 3 Jun 2023 09:15:00 +0200 Subject: [PATCH 4/4] Fixed typo and readme --- usermods/mcu_temp/readme.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/usermods/mcu_temp/readme.md b/usermods/mcu_temp/readme.md index 6fe10d36c5..c284613ed7 100644 --- a/usermods/mcu_temp/readme.md +++ b/usermods/mcu_temp/readme.md @@ -1,11 +1,11 @@ # MCU Temp Usermod This usermod adds the temperature readout to the Info tab and also publishes that over the topic `mcutemp` topic. -ATM only ESP32 is supported. + A shown temp of 53,33°C might indicate that the internal temp is not supported. -ESP8266 do not have a internal temp sensor +ESP8266 does not have a internal temp sensor -ESP32C3, ESP32S2 and ESP32S3 seem to have a internal temp sensor, but i dont know yet how to get their values. +ESP32S2 seems to crash on reading the sensor -> disabled Buildflag: `-D USERMOD_MCUTEMP`