diff --git a/usermods/ESP32_TouchBrightnessControl/readme.md b/usermods/ESP32_TouchBrightnessControl/readme.md deleted file mode 100644 index f210b332..00000000 --- a/usermods/ESP32_TouchBrightnessControl/readme.md +++ /dev/null @@ -1,19 +0,0 @@ -# ESP32 Touch Brightness Control - -Toggle On/Off with a long press (800ms) -Switch through 5 brightness levels (defined in usermod_touchbrightness.h, values 0-255) with a short (100ms) touch - -## Installation - -Copy 'usermod_touchbrightness.h' to the wled00 directory. -in 'usermod_list.cpp' add this: - -> #include "usermod_touchbrightness.h" -above "void registerUsermods()" - -and - -> usermods.add(new TouchBrightnessControl()); -inside the "registerUsermods()" function - - diff --git a/usermods/ESP32_TouchBrightnessControl/usermod_touchbrightness.h b/usermods/ESP32_TouchBrightnessControl/usermod_touchbrightness.h deleted file mode 100644 index 1b779592..00000000 --- a/usermods/ESP32_TouchBrightnessControl/usermod_touchbrightness.h +++ /dev/null @@ -1,89 +0,0 @@ -// -// usermod_touchbrightness.h -// github.com/aircoookie/WLED -// -// Created by Justin Kühner on 14.09.2020. -// Copyright © 2020 NeariX. All rights reserved. -// https://github.com/NeariX67/ -// Discord: @NeariX#4799 - - -#pragma once - -#include "wled.h" - -#define threshold 40 //Increase value if touches falsely accur. Decrease value if actual touches are not recognized -#define touchPin T0 //T0 = D4 / GPIO4 - -//Define the 5 brightness levels -//Long press to turn off / on -#define brightness1 51 -#define brightness2 102 -#define brightness3 153 -#define brightness4 204 -#define brightness5 255 - - -#ifdef ESP32 - - -class TouchBrightnessControl : public Usermod { - private: - unsigned long lastTime = 0; //Interval - unsigned long lastTouch = 0; //Timestamp of last Touch - unsigned long lastRelease = 0; //Timestamp of last Touch release - boolean released = true; //current Touch state (touched/released) - uint16_t touchReading = 0; //sensor reading, maybe use uint8_t??? - uint16_t touchDuration = 0; //duration of last touch - public: - - void setup() { - lastTouch = millis(); - lastRelease = millis(); - lastTime = millis(); - } - - void loop() { - if (millis() - lastTime >= 50) { //Check every 50ms if a touch occurs - lastTime = millis(); - touchReading = touchRead(touchPin); //Read touch sensor on pin T0 (GPIO4 / D4) - - if(touchReading < threshold && released) { //Touch started - released = false; - lastTouch = millis(); - } - else if(touchReading >= threshold && !released) { //Touch released - released = true; - lastRelease = millis(); - touchDuration = lastRelease - lastTouch; //Calculate duration - } - - //Serial.println(touchDuration); - - if(touchDuration >= 800 && released) { //Toggle power if button press is longer than 800ms - touchDuration = 0; //Reset touch duration to avoid multiple actions on same touch - toggleOnOff(); - colorUpdated(2); //Refresh values - } - else if(touchDuration >= 100 && released) { //Switch to next brightness if touch is between 100 and 800ms - touchDuration = 0; //Reset touch duration to avoid multiple actions on same touch - if(bri < brightness1) { - bri = brightness1; - } else if(bri >= brightness1 && bri < brightness2) { - bri = brightness2; - } else if(bri >= brightness2 && bri < brightness3) { - bri = brightness3; - } else if(bri >= brightness3 && bri < brightness4) { - bri = brightness4; - } else if(bri >= brightness4 && bri < brightness5) { - bri = brightness5; - } else if(bri >= brightness5) { - bri = brightness1; - } - colorUpdated(2); //Refresh values - } - - } - } -}; -#endif diff --git a/usermods/PIR_sensor_mqtt_v1/README.md b/usermods/PIR_sensor_mqtt_v1/README.md deleted file mode 100644 index 475c11b0..00000000 --- a/usermods/PIR_sensor_mqtt_v1/README.md +++ /dev/null @@ -1,9 +0,0 @@ -# PIR sensor with MQTT - -This simple usermod allows attaching a PIR sensor like the AM312 and publish the readings over MQTT. A message is sent when motion is detected as well as when motion has stopped. - -This usermod has only been tested with the AM312 sensor though should work for any other PIR sensor. Note that this does not control the LED strip directly, it only publishes MQTT readings for use with other integrations like Home Assistant. - -## Installation - -Copy and replace the file `usermod.cpp` in wled00 directory. diff --git a/usermods/PIR_sensor_mqtt_v1/usermod.cpp b/usermods/PIR_sensor_mqtt_v1/usermod.cpp deleted file mode 100644 index 426a8033..00000000 --- a/usermods/PIR_sensor_mqtt_v1/usermod.cpp +++ /dev/null @@ -1,55 +0,0 @@ -#include "wled.h" -/* - * This v1 usermod file allows you to add own functionality to WLED more easily - * 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) - * If you just need 8 bytes, use 2551-2559 (you do not need to increase EEPSIZE) - * - * Consider the v2 usermod API if you need a more advanced feature set! - */ - -//Use userVar0 and userVar1 (API calls &U0=,&U1=, uint16_t) - -// PIR sensor pin -const int MOTION_PIN = 16; - // MQTT topic for sensor values -const char MQTT_TOPIC[] = "/motion"; - -int prevState = LOW; - -//gets called once at boot. Do all initialization that doesn't depend on network here -void userSetup() -{ - pinMode(MOTION_PIN, INPUT); -} - -//gets called every time WiFi is (re-)connected. Initialize own network interfaces here -void userConnected() -{ - -} - -void publishMqtt(String state) -{ - //Check if MQTT Connected, otherwise it will crash the 8266 - if (mqtt != nullptr){ - char subuf[38]; - strcpy(subuf, mqttDeviceTopic); - strcat(subuf, MQTT_TOPIC); - mqtt->publish(subuf, 0, true, state.c_str()); - } -} - -//loop. You can use "if (WLED_CONNECTED)" to check for successful connection -void userLoop() -{ - if (digitalRead(MOTION_PIN) == HIGH && prevState == LOW) { // Motion detected - publishMqtt("ON"); - prevState = HIGH; - } - if (digitalRead(MOTION_PIN) == LOW && prevState == HIGH) { // Motion stopped - publishMqtt("OFF"); - prevState = LOW; - } -} - diff --git a/usermods/esp32_multistrip/NpbWrapper.h b/usermods/esp32_multistrip/NpbWrapper.h deleted file mode 100644 index 84cf8ac0..00000000 --- a/usermods/esp32_multistrip/NpbWrapper.h +++ /dev/null @@ -1,515 +0,0 @@ -//this code is a modified version of https://github.com/Makuna/NeoPixelBus/issues/103 -#ifndef NpbWrapper_h -#define NpbWrapper_h - -// make sure we're using esp32 platform -#ifndef ARDUINO_ARCH_ESP32 - #error This version of NbpWrapper.h only works with ESP32 hardware. -#endif - -#ifndef NUM_STRIPS - #error Need to define number of LED strips using build flag -D NUM_STRIPS=4 for 4 LED strips -#endif - -#ifndef PIXEL_COUNTS - #error Need to define pixel counts using build flag -D PIXEL_COUNTS="25, 25, 25, 25" for 4 LED strips with 25 LEDs each -#endif - -#ifndef DATA_PINS - #error Need to define data pins using build flag -D DATA_PINS="1, 2, 3, 4" if LED strips are on data pins 1, 2, 3, and 4 -#endif - -// //PIN CONFIGURATION -#ifndef LEDPIN - #define LEDPIN 1 // Legacy pin def required by some other portions of code. This pin is not used do drive LEDs. -#endif - -#ifndef IRPIN - #define IRPIN -1 //infrared pin (-1 to disable) MagicHome: 4, H801 Wifi: 0 -#endif - -#ifndef RLYPIN - #define RLYPIN -1 //pin for relay, will be set HIGH if LEDs are on (-1 to disable). Also usable for standby leds, triggers,... -#endif - -#ifndef AUXPIN - #define AUXPIN -1 //debug auxiliary output pin (-1 to disable) -#endif - -#ifndef RLYMDE - #define RLYMDE 1 //mode for relay, 0: LOW if LEDs are on 1: HIGH if LEDs are on -#endif - -#include -#include "const.h" - -const uint8_t numStrips = NUM_STRIPS; // max 8 strips allowed on esp32 -const uint16_t pixelCounts[numStrips] = {PIXEL_COUNTS}; // number of pixels on each strip -const uint8_t dataPins[numStrips] = {DATA_PINS}; // change these pins based on your board - -#define PIXELFEATURE3 NeoGrbFeature -#define PIXELFEATURE4 NeoGrbwFeature - -// ESP32 has 8 RMT interfaces available, each of which can drive a strip of pixels -// Convenience #defines for creating NeoPixelBrightnessBus on each RMT interface for both GRB and GRBW LED strips -#define NeoPixelBrightnessBusGrbRmt0 NeoPixelBrightnessBus -#define NeoPixelBrightnessBusGrbRmt1 NeoPixelBrightnessBus -#define NeoPixelBrightnessBusGrbRmt2 NeoPixelBrightnessBus -#define NeoPixelBrightnessBusGrbRmt3 NeoPixelBrightnessBus -#define NeoPixelBrightnessBusGrbRmt4 NeoPixelBrightnessBus -#define NeoPixelBrightnessBusGrbRmt5 NeoPixelBrightnessBus -#define NeoPixelBrightnessBusGrbRmt6 NeoPixelBrightnessBus -#define NeoPixelBrightnessBusGrbRmt7 NeoPixelBrightnessBus -#define NeoPixelBrightnessBusGrbwRmt0 NeoPixelBrightnessBus -#define NeoPixelBrightnessBusGrbwRmt1 NeoPixelBrightnessBus -#define NeoPixelBrightnessBusGrbwRmt2 NeoPixelBrightnessBus -#define NeoPixelBrightnessBusGrbwRmt3 NeoPixelBrightnessBus -#define NeoPixelBrightnessBusGrbwRmt4 NeoPixelBrightnessBus -#define NeoPixelBrightnessBusGrbwRmt5 NeoPixelBrightnessBus -#define NeoPixelBrightnessBusGrbwRmt6 NeoPixelBrightnessBus -#define NeoPixelBrightnessBusGrbwRmt7 NeoPixelBrightnessBus - -enum NeoPixelType -{ - NeoPixelType_None = 0, - NeoPixelType_Grb = 1, - NeoPixelType_Grbw = 2, - NeoPixelType_End = 3 -}; - -class NeoPixelWrapper -{ -public: - NeoPixelWrapper() : - _type(NeoPixelType_None) - { - // On initialization fill in the pixelStripStartIdx array with the beginning index of each strip - // relative to th entire array. - uint16_t totalPixels = 0; - for (uint8_t idx = 0; idx < numStrips; idx++) - { - pixelStripStartIdx[idx] = totalPixels; - totalPixels += pixelCounts[idx]; - } - } - - ~NeoPixelWrapper() - { - cleanup(); - } - - void Begin(NeoPixelType type, uint16_t pixelCount) - { - - cleanup(); - - _type = type; - - switch (_type) - { - case NeoPixelType_Grb: - { - for (uint8_t idx = 0; idx < numStrips; idx++) - { - switch (idx) - { - case 0: pGrb0 = new NeoPixelBrightnessBusGrbRmt0(pixelCounts[idx], dataPins[idx]); pGrb0->Begin(); break; - case 1: pGrb1 = new NeoPixelBrightnessBusGrbRmt1(pixelCounts[idx], dataPins[idx]); pGrb1->Begin(); break; - case 2: pGrb2 = new NeoPixelBrightnessBusGrbRmt2(pixelCounts[idx], dataPins[idx]); pGrb2->Begin(); break; - case 3: pGrb3 = new NeoPixelBrightnessBusGrbRmt3(pixelCounts[idx], dataPins[idx]); pGrb3->Begin(); break; - case 4: pGrb4 = new NeoPixelBrightnessBusGrbRmt4(pixelCounts[idx], dataPins[idx]); pGrb4->Begin(); break; - case 5: pGrb5 = new NeoPixelBrightnessBusGrbRmt5(pixelCounts[idx], dataPins[idx]); pGrb5->Begin(); break; - case 6: pGrb6 = new NeoPixelBrightnessBusGrbRmt6(pixelCounts[idx], dataPins[idx]); pGrb6->Begin(); break; - case 7: pGrb7 = new NeoPixelBrightnessBusGrbRmt7(pixelCounts[idx], dataPins[idx]); pGrb7->Begin(); break; - } - } - break; - } - - case NeoPixelType_Grbw: - { - for (uint8_t idx = 0; idx < numStrips; idx++) - { - switch (idx) - { - case 0: pGrbw0 = new NeoPixelBrightnessBusGrbwRmt0(pixelCounts[idx], dataPins[idx]); pGrbw0->Begin(); break; - case 1: pGrbw1 = new NeoPixelBrightnessBusGrbwRmt1(pixelCounts[idx], dataPins[idx]); pGrbw1->Begin(); break; - case 2: pGrbw2 = new NeoPixelBrightnessBusGrbwRmt2(pixelCounts[idx], dataPins[idx]); pGrbw2->Begin(); break; - case 3: pGrbw3 = new NeoPixelBrightnessBusGrbwRmt3(pixelCounts[idx], dataPins[idx]); pGrbw3->Begin(); break; - case 4: pGrbw4 = new NeoPixelBrightnessBusGrbwRmt4(pixelCounts[idx], dataPins[idx]); pGrbw4->Begin(); break; - case 5: pGrbw5 = new NeoPixelBrightnessBusGrbwRmt5(pixelCounts[idx], dataPins[idx]); pGrbw5->Begin(); break; - case 6: pGrbw6 = new NeoPixelBrightnessBusGrbwRmt6(pixelCounts[idx], dataPins[idx]); pGrbw6->Begin(); break; - case 7: pGrbw7 = new NeoPixelBrightnessBusGrbwRmt7(pixelCounts[idx], dataPins[idx]); pGrbw7->Begin(); break; - } - } - break; - } - } - } - - void Show() - { - switch (_type) - { - case NeoPixelType_Grb: - { - for (uint8_t idx = 0; idx < numStrips; idx++) - { - switch (idx) - { - case 0: pGrb0->Show(); break; - case 1: pGrb1->Show(); break; - case 2: pGrb2->Show(); break; - case 3: pGrb3->Show(); break; - case 4: pGrb4->Show(); break; - case 5: pGrb5->Show(); break; - case 6: pGrb6->Show(); break; - case 7: pGrb7->Show(); break; - } - } - break; - } - case NeoPixelType_Grbw: - { - for (uint8_t idx = 0; idx < numStrips; idx++) - { - switch (idx) - { - case 0: pGrbw0->Show(); break; - case 1: pGrbw1->Show(); break; - case 2: pGrbw2->Show(); break; - case 3: pGrbw3->Show(); break; - case 4: pGrbw4->Show(); break; - case 5: pGrbw5->Show(); break; - case 6: pGrbw6->Show(); break; - case 7: pGrbw7->Show(); break; - } - } - break; - } - } - } - - bool CanShow() - { - bool canShow = true; - switch (_type) - { - case NeoPixelType_Grb: - { - for (uint8_t idx = 0; idx < numStrips; idx++) - { - switch (idx) - { - case 0: canShow &= pGrb0->CanShow(); break; - case 1: canShow &= pGrb1->CanShow(); break; - case 2: canShow &= pGrb2->CanShow(); break; - case 3: canShow &= pGrb3->CanShow(); break; - case 4: canShow &= pGrb4->CanShow(); break; - case 5: canShow &= pGrb5->CanShow(); break; - case 6: canShow &= pGrb6->CanShow(); break; - case 7: canShow &= pGrb7->CanShow(); break; - } - } - break; - } - case NeoPixelType_Grbw: - { - for (uint8_t idx = 0; idx < numStrips; idx++) - { - switch (idx) - { - case 0: canShow &= pGrbw0->CanShow(); break; - case 1: canShow &= pGrbw1->CanShow(); break; - case 2: canShow &= pGrbw2->CanShow(); break; - case 3: canShow &= pGrbw3->CanShow(); break; - case 4: canShow &= pGrbw4->CanShow(); break; - case 5: canShow &= pGrbw5->CanShow(); break; - case 6: canShow &= pGrbw6->CanShow(); break; - case 7: canShow &= pGrbw7->CanShow(); break; - } - } - break; - } - } - return canShow; - } - - void SetPixelColorRaw(uint16_t indexPixel, RgbwColor c) - { - // figure out which strip this pixel index is on - uint8_t stripIdx = 0; - for (uint8_t idx = 0; idx < numStrips; idx++) - { - if (indexPixel >= pixelStripStartIdx[idx]) - { - stripIdx = idx; - } - else - { - break; - } - } - // subtract strip start index so we're addressing just this strip instead of all pixels on all strips - indexPixel -= pixelStripStartIdx[stripIdx]; - switch (_type) - { - case NeoPixelType_Grb: - { - RgbColor rgb = RgbColor(c.R, c.G, c.B); - switch (stripIdx) - { - case 0: pGrb0->SetPixelColor(indexPixel, rgb); break; - case 1: pGrb1->SetPixelColor(indexPixel, rgb); break; - case 2: pGrb2->SetPixelColor(indexPixel, rgb); break; - case 3: pGrb3->SetPixelColor(indexPixel, rgb); break; - case 4: pGrb4->SetPixelColor(indexPixel, rgb); break; - case 5: pGrb5->SetPixelColor(indexPixel, rgb); break; - case 6: pGrb6->SetPixelColor(indexPixel, rgb); break; - case 7: pGrb7->SetPixelColor(indexPixel, rgb); break; - } - break; - } - case NeoPixelType_Grbw: - { - switch (stripIdx) - { - case 0: pGrbw0->SetPixelColor(indexPixel, c); break; - case 1: pGrbw1->SetPixelColor(indexPixel, c); break; - case 2: pGrbw2->SetPixelColor(indexPixel, c); break; - case 3: pGrbw3->SetPixelColor(indexPixel, c); break; - case 4: pGrbw4->SetPixelColor(indexPixel, c); break; - case 5: pGrbw5->SetPixelColor(indexPixel, c); break; - case 6: pGrbw6->SetPixelColor(indexPixel, c); break; - case 7: pGrbw7->SetPixelColor(indexPixel, c); break; - } - break; - } - } - } - - void SetPixelColor(uint16_t indexPixel, RgbwColor c) - { - /* - Set pixel color with necessary color order conversion. - */ - - RgbwColor col; - - uint8_t co = _colorOrder; - #ifdef COLOR_ORDER_OVERRIDE - if (indexPixel >= COO_MIN && indexPixel < COO_MAX) co = COO_ORDER; - #endif - - //reorder channels to selected order - switch (co) - { - case 0: col.G = c.G; col.R = c.R; col.B = c.B; break; //0 = GRB, default - case 1: col.G = c.R; col.R = c.G; col.B = c.B; break; //1 = RGB, common for WS2811 - case 2: col.G = c.B; col.R = c.R; col.B = c.G; break; //2 = BRG - case 3: col.G = c.R; col.R = c.B; col.B = c.G; break; //3 = RBG - case 4: col.G = c.B; col.R = c.G; col.B = c.R; break; //4 = BGR - default: col.G = c.G; col.R = c.B; col.B = c.R; break; //5 = GBR - } - col.W = c.W; - - SetPixelColorRaw(indexPixel, col); - } - - void SetBrightness(byte b) - { - switch (_type) - { - case NeoPixelType_Grb: - { - for (uint8_t idx = 0; idx < numStrips; idx++) - { - switch (idx) - { - case 0: pGrb0->SetBrightness(b); break; - case 1: pGrb1->SetBrightness(b); break; - case 2: pGrb2->SetBrightness(b); break; - case 3: pGrb3->SetBrightness(b); break; - case 4: pGrb4->SetBrightness(b); break; - case 5: pGrb5->SetBrightness(b); break; - case 6: pGrb6->SetBrightness(b); break; - case 7: pGrb7->SetBrightness(b); break; - } - } - break; - } - case NeoPixelType_Grbw: - { - for (uint8_t idx = 0; idx < numStrips; idx++) - { - switch (idx) - { - case 0: pGrbw0->SetBrightness(b); break; - case 1: pGrbw1->SetBrightness(b); break; - case 2: pGrbw2->SetBrightness(b); break; - case 3: pGrbw3->SetBrightness(b); break; - case 4: pGrbw4->SetBrightness(b); break; - case 5: pGrbw5->SetBrightness(b); break; - case 6: pGrbw6->SetBrightness(b); break; - case 7: pGrbw7->SetBrightness(b); break; - } - } - break; - } - } - } - - void SetColorOrder(byte colorOrder) - { - _colorOrder = colorOrder; - } - - uint8_t GetColorOrder() - { - return _colorOrder; - } - - RgbwColor GetPixelColorRaw(uint16_t indexPixel) const - { - // figure out which strip this pixel index is on - uint8_t stripIdx = 0; - for (uint8_t idx = 0; idx < numStrips; idx++) - { - if (indexPixel >= pixelStripStartIdx[idx]) - { - stripIdx = idx; - } - else - { - break; - } - } - // subtract strip start index so we're addressing just this strip instead of all pixels on all strips - indexPixel -= pixelStripStartIdx[stripIdx]; - switch (_type) - { - case NeoPixelType_Grb: - { - switch (stripIdx) - { - case 0: return pGrb0->GetPixelColor(indexPixel); - case 1: return pGrb1->GetPixelColor(indexPixel); - case 2: return pGrb2->GetPixelColor(indexPixel); - case 3: return pGrb3->GetPixelColor(indexPixel); - case 4: return pGrb4->GetPixelColor(indexPixel); - case 5: return pGrb5->GetPixelColor(indexPixel); - case 6: return pGrb6->GetPixelColor(indexPixel); - case 7: return pGrb7->GetPixelColor(indexPixel); - } - break; - } - case NeoPixelType_Grbw: - switch (stripIdx) - { - case 0: return pGrbw0->GetPixelColor(indexPixel); - case 1: return pGrbw1->GetPixelColor(indexPixel); - case 2: return pGrbw2->GetPixelColor(indexPixel); - case 3: return pGrbw3->GetPixelColor(indexPixel); - case 4: return pGrbw4->GetPixelColor(indexPixel); - case 5: return pGrbw5->GetPixelColor(indexPixel); - case 6: return pGrbw6->GetPixelColor(indexPixel); - case 7: return pGrbw7->GetPixelColor(indexPixel); - } - break; - } - return 0; - } - - // NOTE: Due to feature differences, some support RGBW but the method name - // here needs to be unique, thus GetPixeColorRgbw - uint32_t GetPixelColorRgbw(uint16_t indexPixel) const - { - RgbwColor col = GetPixelColorRaw(indexPixel); - uint8_t co = _colorOrder; - #ifdef COLOR_ORDER_OVERRIDE - if (indexPixel >= COO_MIN && indexPixel < COO_MAX) co = COO_ORDER; - #endif - - switch (co) - { - // W G R B - case 0: return ((col.W << 24) | (col.G << 8) | (col.R << 16) | (col.B)); //0 = GRB, default - case 1: return ((col.W << 24) | (col.R << 8) | (col.G << 16) | (col.B)); //1 = RGB, common for WS2811 - case 2: return ((col.W << 24) | (col.B << 8) | (col.R << 16) | (col.G)); //2 = BRG - case 3: return ((col.W << 24) | (col.B << 8) | (col.G << 16) | (col.R)); //3 = RBG - case 4: return ((col.W << 24) | (col.R << 8) | (col.B << 16) | (col.G)); //4 = BGR - case 5: return ((col.W << 24) | (col.G << 8) | (col.B << 16) | (col.R)); //5 = GBR - } - - return 0; - - } - - -private: - NeoPixelType _type; - byte _colorOrder = 0; - - uint16_t pixelStripStartIdx[numStrips]; - - // pointers for every possible type for up to 8 strips - NeoPixelBrightnessBusGrbRmt0 *pGrb0; - NeoPixelBrightnessBusGrbRmt1 *pGrb1; - NeoPixelBrightnessBusGrbRmt2 *pGrb2; - NeoPixelBrightnessBusGrbRmt3 *pGrb3; - NeoPixelBrightnessBusGrbRmt4 *pGrb4; - NeoPixelBrightnessBusGrbRmt5 *pGrb5; - NeoPixelBrightnessBusGrbRmt6 *pGrb6; - NeoPixelBrightnessBusGrbRmt7 *pGrb7; - NeoPixelBrightnessBusGrbwRmt0 *pGrbw0; - NeoPixelBrightnessBusGrbwRmt1 *pGrbw1; - NeoPixelBrightnessBusGrbwRmt2 *pGrbw2; - NeoPixelBrightnessBusGrbwRmt3 *pGrbw3; - NeoPixelBrightnessBusGrbwRmt4 *pGrbw4; - NeoPixelBrightnessBusGrbwRmt5 *pGrbw5; - NeoPixelBrightnessBusGrbwRmt6 *pGrbw6; - NeoPixelBrightnessBusGrbwRmt7 *pGrbw7; - - void cleanup() - { - switch (_type) - { - case NeoPixelType_Grb: - { - for (uint8_t idx = 0; idx < numStrips; idx++) - { - switch (idx) - { - case 0: delete pGrb0; pGrb0 = NULL; break; - case 1: delete pGrb1; pGrb1 = NULL; break; - case 2: delete pGrb2; pGrb2 = NULL; break; - case 3: delete pGrb3; pGrb3 = NULL; break; - case 4: delete pGrb4; pGrb4 = NULL; break; - case 5: delete pGrb5; pGrb5 = NULL; break; - case 6: delete pGrb6; pGrb6 = NULL; break; - case 7: delete pGrb7; pGrb7 = NULL; break; - } - } - break; - } - case NeoPixelType_Grbw: - { - for (uint8_t idx = 0; idx < numStrips; idx++) - { - switch (idx) - { - case 0: delete pGrbw0; pGrbw0 = NULL; break; - case 1: delete pGrbw1; pGrbw1 = NULL; break; - case 2: delete pGrbw2; pGrbw2 = NULL; break; - case 3: delete pGrbw3; pGrbw3 = NULL; break; - case 4: delete pGrbw4; pGrbw4 = NULL; break; - case 5: delete pGrbw5; pGrbw5 = NULL; break; - case 6: delete pGrbw6; pGrbw6 = NULL; break; - case 7: delete pGrbw7; pGrbw7 = NULL; break; - } - } - } - } - } -}; -#endif diff --git a/usermods/esp32_multistrip/README.md b/usermods/esp32_multistrip/README.md deleted file mode 100644 index 87b89528..00000000 --- a/usermods/esp32_multistrip/README.md +++ /dev/null @@ -1,22 +0,0 @@ -# esp32_multistrip - -This usermod enables up to 8 data pins to be used from an esp32 module to drive separate LED strands. This only works with one-wire LEDs like the WS2812. - -The esp32 RMT hardware is used for data output. See here for hardware driver implementation details: https://github.com/Makuna/NeoPixelBus/wiki/ESP32-NeoMethods#neoesp32rmt-methods - -Pass the following variables to the compiler as build flags: - - - `ESP32_MULTISTRIP` - - Define this to use usermod NpbWrapper.h instead of default one in WLED. - - `NUM_STRIPS` - - Number of strips in use - - `PIXEL_COUNTS` - - List of pixel counts in each strip - - `DATA_PINS` - - List of data pins each strip is attached to. There may be board-specific restrictions on which pins can be used for RTM. - -From the perspective of WLED software, the LEDs are addressed as one long strand. The modified NbpWrapper.h file addresses the appropriate strand from the overall LED index based on the number of LEDs defined in each strand. - -See `platformio_override.ini` for example configuration. - -Tested on low cost ESP-WROOM-32 dev boards from Amazon, such as those sold by KeeYees. diff --git a/usermods/esp32_multistrip/platformio_override.ini b/usermods/esp32_multistrip/platformio_override.ini deleted file mode 100644 index afdef676..00000000 --- a/usermods/esp32_multistrip/platformio_override.ini +++ /dev/null @@ -1,16 +0,0 @@ -; Example platformio_override.ini that shows how to configure your environment to use the multistrip usermod. -; Copy this file to the base wled directory that contains platformio.ini. -; Multistrip requires ESP32 because it has many more pins that can be used as LED outputs. -; Need to define NUM_STRIPS, PIXEL_COUNTS, and DATA_PINS as shown below. - -[platformio] -default_envs = esp32_multistrip - -[env:esp32_multistrip] -extends=env:esp32dev -build_flags = ${env:esp32dev.build_flags} - -D ESP32_MULTISTRIP ; define this variable to use ESP32_MULTISTRIP usermod - -D NUM_STRIPS=4 ; number of pixel strips in use - -D PIXEL_COUNTS="50, 50, 50, 50" ; number of pixels in each strip - -D DATA_PINS="25, 26, 32, 33" ; esp32 pins used for each pixel strip. available pins depends on esp32 module. - \ No newline at end of file diff --git a/usermods/quinled_digquad_preassembled_unofficial_v0.1/README.md b/usermods/quinled_digquad_preassembled_unofficial_v0.1/README.md deleted file mode 100644 index 39ae4edd..00000000 --- a/usermods/quinled_digquad_preassembled_unofficial_v0.1/README.md +++ /dev/null @@ -1,37 +0,0 @@ -# QuinLED-Dig-Quad Preassembled Unofficial Build - -This usermod targets the [Preassembled QuinLED-Dig-Quad](https://quinled.info/pre-assembled-quinled-dig-quad/). Tested on board revision v1r6b, -and includes the following features: - - * **Multi-channel Support** - enabling use of LED1, LED2, LED3, LED4 pins to work using segments - * **Temperature Sensor Support** - pulls readings from the built-in temperature sensor and adds the reading to the *Info* page in the UI - -## Background - -As a starting point, you should check out this awesome video from Quindor: [How to compile WLED yourself](https://quinled.info/2020/12/22/livestream-wled-compile/). The usermod you are reading now just provides some shortcuts for parts of what were covered in that video. - -## Build Firmware with Multi-channel and Temp Support - -1. Copy the `platformio_override.ini` file to the project's root directory -1. If using VS Code with the PlatformIO plugin like in the video, you will now see this new project task listed in the PLATFORMIO panel at the bottom as `env:QL-DigQuad-Pre-v0.1` (you probably need to hit the refresh button) - - - -1. Edit this file from the root directory as needed: - - - - * `PIXEL_COUNTS` may need to be adjusted for your set-up. E.g. I have lots of LEDs in Channel 1, but that's probably unusual for most - * `DATA_PINS` may need to be changed to "16,3,1,26" instead of "16,1,3,26" apparently depending on the board revision or some such - -1. Build the mod (e.g. click `Build` from the project task circled above) and update your firmware using the `QL-DigQuad-Pre-v0.1` file, e.g. using _Manual OTA_ from the Config menu. Based on the video and my own experience, you might need to build twice 🤷‍♂️. - -## Observing Temperature - -Hopefully you can now see the Temperature listed in the Info page. If not, use Chrome Developer Tools to find the current temperature - -1. Open the Developer Tools Console -2. Enter `lastinfo.u.Temperature` to view the Temperature array - - - diff --git a/usermods/quinled_digquad_preassembled_unofficial_v0.1/images/json-temp.png b/usermods/quinled_digquad_preassembled_unofficial_v0.1/images/json-temp.png deleted file mode 100644 index 66e50112..00000000 Binary files a/usermods/quinled_digquad_preassembled_unofficial_v0.1/images/json-temp.png and /dev/null differ diff --git a/usermods/quinled_digquad_preassembled_unofficial_v0.1/images/params.png b/usermods/quinled_digquad_preassembled_unofficial_v0.1/images/params.png deleted file mode 100644 index 64233f86..00000000 Binary files a/usermods/quinled_digquad_preassembled_unofficial_v0.1/images/params.png and /dev/null differ diff --git a/usermods/quinled_digquad_preassembled_unofficial_v0.1/images/pio-screenshot.png b/usermods/quinled_digquad_preassembled_unofficial_v0.1/images/pio-screenshot.png deleted file mode 100644 index e178ed16..00000000 Binary files a/usermods/quinled_digquad_preassembled_unofficial_v0.1/images/pio-screenshot.png and /dev/null differ diff --git a/usermods/quinled_digquad_preassembled_unofficial_v0.1/platformio_override.ini b/usermods/quinled_digquad_preassembled_unofficial_v0.1/platformio_override.ini deleted file mode 100644 index 6f416668..00000000 --- a/usermods/quinled_digquad_preassembled_unofficial_v0.1/platformio_override.ini +++ /dev/null @@ -1,16 +0,0 @@ -; QuinLED-Dig-Quad Preassembled Unofficial - -[env:QL-DigQuad-Pre-v0.1] -extends = env:esp32dev -build_flags = ${common.build_flags_esp32} - -D ESP32_MULTISTRIP - -D NUM_STRIPS=4 - -D PIXEL_COUNTS="600, 300, 300, 300" - -D DATA_PINS="16,1,3,26" - -D RLYPIN=19 - -D BTNPIN=17 - -D USERMOD_DALLASTEMPERATURE - -D USERMOD_DALLASTEMPERATURE_MEASUREMENT_INTERVAL=10000 -lib_deps = ${env.lib_deps} - milesburton/DallasTemperature@^3.9.0 - OneWire@~2.3.5 \ No newline at end of file diff --git a/usermods/ssd1306_i2c_oled_u8g2/README.md b/usermods/ssd1306_i2c_oled_u8g2/README.md deleted file mode 100644 index 70919cc5..00000000 --- a/usermods/ssd1306_i2c_oled_u8g2/README.md +++ /dev/null @@ -1,35 +0,0 @@ -# SSD1306 128x32 OLED via I2C with u8g2 -This usermod allows to connect 128x32 Oled display to WLED controlled and show -the next information: -- Current SSID -- IP address if obtained - * in AP mode and turned off lightning AP password is shown -- Current effect -- Current palette -- On/Off icon (sun/moon) - -## Hardware -![Hardware connection](assets/hw_connection.png) - -## Requirements -Functionality checked with: -- commit 095429a7df4f9e2b34dd464f7bbfd068df6558eb -- Wemos d1 mini -- PlatformIO -- Generic SSD1306 128x32 I2C OLED display from aliexpress - -### Platformio -Add `U8g2@~2.27.2` dependency to `lib_deps_external` under `[common]` section in `platformio.ini`: -```ini -# platformio.ini -... -[common] -... -lib_deps_external = - ... - U8g2@~2.27.2 -... -``` - -### Arduino IDE -Install library `U8g2 by oliver` in `Tools | Include Library | Manage libraries` menu. \ No newline at end of file diff --git a/usermods/ssd1306_i2c_oled_u8g2/assets/hw_connection.png b/usermods/ssd1306_i2c_oled_u8g2/assets/hw_connection.png deleted file mode 100644 index a0e51b4d..00000000 Binary files a/usermods/ssd1306_i2c_oled_u8g2/assets/hw_connection.png and /dev/null differ diff --git a/usermods/ssd1306_i2c_oled_u8g2/wled06_usermod.ino b/usermods/ssd1306_i2c_oled_u8g2/wled06_usermod.ino deleted file mode 100644 index 8c749603..00000000 --- a/usermods/ssd1306_i2c_oled_u8g2/wled06_usermod.ino +++ /dev/null @@ -1,175 +0,0 @@ -#include // from https://github.com/olikraus/u8g2/ - -//The SCL and SDA pins are defined here. -//Lolin32 boards use SCL=5 SDA=4 -#define U8X8_PIN_SCL 5 -#define U8X8_PIN_SDA 4 - - -// If display does not work or looks corrupted check the -// constructor reference: -// https://github.com/olikraus/u8g2/wiki/u8x8setupcpp -// or check the gallery: -// https://github.com/olikraus/u8g2/wiki/gallery -U8X8_SSD1306_128X32_UNIVISION_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 -// network here -void userSetup() { - u8x8.begin(); - 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.setFont(u8x8_font_chroma48medium8_r); - u8x8.drawString(0, 0, "Loading..."); -} - -// gets called every time WiFi is (re-)connected. Initialize own network -// interfaces here -void userConnected() {} - -// needRedraw marks if redraw is required to prevent often redrawing. -bool needRedraw = true; - -// Next variables hold the previous known values to determine if redraw is -// required. -String knownSsid = ""; -IPAddress knownIp; -uint8_t knownBrightness = 0; -uint8_t knownMode = 0; -uint8_t knownPalette = 0; - -long lastUpdate = 0; -long lastRedraw = 0; -bool displayTurnedOff = false; -// How often we are redrawing screen -#define USER_LOOP_REFRESH_RATE_MS 5000 - -void userLoop() { - - // Check if we time interval for redrawing passes. - if (millis() - lastUpdate < USER_LOOP_REFRESH_RATE_MS) { - return; - } - lastUpdate = millis(); - - // Turn off display after 3 minutes with no change. - if(!displayTurnedOff && millis() - lastRedraw > 3*60*1000) { - u8x8.setPowerSave(1); - displayTurnedOff = true; - } - - // Check if values which are shown on display changed from the last time. - if (((apActive) ? String(apSSID) : WiFi.SSID()) != knownSsid) { - needRedraw = true; - } else if (knownIp != (apActive ? IPAddress(4, 3, 2, 1) : WiFi.localIP())) { - needRedraw = true; - } else if (knownBrightness != bri) { - needRedraw = true; - } else if (knownMode != strip.getMode()) { - needRedraw = true; - } else if (knownPalette != strip.getSegment(0).palette) { - needRedraw = true; - } - - if (!needRedraw) { - return; - } - needRedraw = false; - - if (displayTurnedOff) - { - u8x8.setPowerSave(0); - displayTurnedOff = false; - } - lastRedraw = millis(); - - // Update last known values. - #if defined(ESP8266) - knownSsid = apActive ? WiFi.softAPSSID() : WiFi.SSID(); - #else - knownSsid = WiFi.SSID(); - #endif - knownIp = apActive ? IPAddress(4, 3, 2, 1) : WiFi.localIP(); - knownBrightness = bri; - knownMode = strip.getMode(); - knownPalette = strip.getSegment(0).palette; - - u8x8.clear(); - u8x8.setFont(u8x8_font_chroma48medium8_r); - - // First row with Wifi name - u8x8.setCursor(1, 0); - u8x8.print(knownSsid.substring(0, u8x8.getCols() > 1 ? u8x8.getCols() - 2 : 0)); - // Print `~` char to indicate that SSID is longer, than owr dicplay - if (knownSsid.length() > u8x8.getCols()) - u8x8.print("~"); - - // Second row with IP or Psssword - u8x8.setCursor(1, 1); - // Print password in AP mode and if led is OFF. - if (apActive && bri == 0) - u8x8.print(apPass); - else - u8x8.print(knownIp); - - // Third row with mode name - u8x8.setCursor(2, 2); - uint8_t qComma = 0; - bool insideQuotes = false; - uint8_t printedChars = 0; - char singleJsonSymbol; - // Find the mode name in JSON - for (size_t i = 0; i < strlen_P(JSON_mode_names); i++) { - singleJsonSymbol = pgm_read_byte_near(JSON_mode_names + i); - switch (singleJsonSymbol) { - case '"': - insideQuotes = !insideQuotes; - break; - case '[': - case ']': - break; - case ',': - qComma++; - default: - if (!insideQuotes || (qComma != knownMode)) - break; - u8x8.print(singleJsonSymbol); - printedChars++; - } - if ((qComma > knownMode) || (printedChars > u8x8.getCols() - 2)) - break; - } - // Fourth row with palette name - u8x8.setCursor(2, 3); - qComma = 0; - insideQuotes = false; - printedChars = 0; - // Looking for palette name in JSON. - for (size_t i = 0; i < strlen_P(JSON_palette_names); i++) { - singleJsonSymbol = pgm_read_byte_near(JSON_palette_names + i); - switch (singleJsonSymbol) { - case '"': - insideQuotes = !insideQuotes; - break; - case '[': - case ']': - break; - case ',': - qComma++; - default: - if (!insideQuotes || (qComma != knownPalette)) - break; - u8x8.print(singleJsonSymbol); - printedChars++; - } - if ((qComma > knownMode) || (printedChars > u8x8.getCols() - 2)) - break; - } - - u8x8.setFont(u8x8_font_open_iconic_embedded_1x1); - u8x8.drawGlyph(0, 0, 80); // wifi icon - u8x8.drawGlyph(0, 1, 68); // home icon - u8x8.setFont(u8x8_font_open_iconic_weather_2x2); - u8x8.drawGlyph(0, 2, 66 + (bri > 0 ? 3 : 0)); // sun/moon icon -}