Statische WS2812 LEDs

Hallo,

ich möchte gerne die Symbole unter den Tasten meines 3D gedruckten ESPuino beleuchten. Dazu hab ich im Code das BUTTONS_LED feature gefunden. Soweit ich das verstanden habe, würde das jedoch nur normale LEDs an und aus machen indem ein GPIO einfach ein bzw ausgeschaltet wird. Zum Einen hatte ich keine solchen LEDs zur Hand, und zum Anderen fände ich es auch besser wenn diese zusammen mit dem Neopixel gedimmt anstatt nur zwischen 100% und aus geschaltet werden könnten.

Nach ein bisschen rumprobieren hab ich nun diese Lösung für mich gefunden: Add static LEDs support to be connected to the NeoPixel · mzanetti/ESPuino@8f88ddd · GitHub

Dieser commit erlaubt es am Ende des Neopixel Rings weitere WS2812 LEDs anzubringen welche dann eben benutzt werden können um zusätzliche Elemente des ESPuino statisch zu beleuchten, aber eben doch die Farbe per Software konfigurierbar und dimmbar, aktuell über STATIC_LEDS und STATIC_LEDS_COLOR in der settings.h

Wäre sowas prinzipiell etwas für upstream oder ist das zu spezifisch? Der Neopixel Ring würde zumindest schön einen D0 pin dafür anbieten.

Obiger patch ist jetzt der „kleinste Einschnitt“ den ich für den existierenden Code gefunden hab. Ob das dann auch der gewünschte Weg ist, lässt sich Diskutieren.

Ich habe das mittlerweile noch überarbeitet, sodass man jetzt von den statischen LEDs einzeln die Farben in der settings.h konfigurieren kann und einen Pull request aufgemacht:

Und hier ein Beispiel was sich damit machen lässt, bzw wofür ich das feature benötigt habe:

4 „Gefällt mir“

Ich frage hier mal nach weil 2 offene Pull-Request schon länger auf die Übernahme warten:

Du möchtest neben dem Neopixel-Ring als" Indikator" für Aktionen nach Tasten wie Vor/Zurück, Pause/Play „statisch“ beleuchten in einer bestimmten Helligkeit. Warum soll das über Neopixel laufen? Man kann ja einfach eine LED anschließen und einen Vorwiderstand für die gewünschte Helligkeit wählen. Und wenn diese LED im Schlafmodus ausgehen sollen dann schließt Du sie halt an den Power-Pin an.

Also meine Frage: Wie statisch soll das denn sein? Sollen die nachgelagerten „statischen“ LED’s noch zusätzlich Aktionen anzeigen? Z.B. auf einem Play-Button Blinken bei Pause & Blau leuchten wenn man in den Bluetooth-Modus wechselt? Vielleicht kannst Du das nochmal genauer beschreiben?

1 „Gefällt mir“

Hallo tueddy,

Zum einen, damit diese LEDs mit dem nacht Modus dimmbar sind, bzw eben dann doch nicht ganz so statisch sind wie mit einem Vorwiderstand. Wenn man den neopixel Ring im Webinterface die Helligkeit einstellen kann, finde ich es doch ziemlich passend wenn auch andere LEDs mit diesem Regler mit eingestellt werden.

Zum anderen, da es weniger Aufwand und Kosten sind einfach 5 ws2812 LEDs mehr zu verlöten als mit herkömmlichen LEDs + Wiederständen rum zu fummeln.

Weitere Aktionen wie von dir angesprochen wären natürlich denkbar, waren jetzt aber nicht mein primäres Ziel.

Ein grund warum mein pr noch unbehandelt ist, ist, dass der LED code darunter zwischenzeitlich ziemlich überarbeitet wurde. Muss meinen branch noch ein mal rebasen, aber mit dem aktuellsten LED code sollte mein Patch ziemlich minimal ausfallen.

1 „Gefällt mir“

Ja da kann ich auch noch 2 Verwendungszwecke für die statischen LEDs aufzählen, die von meiner Schwester eingespeist wurden:

  1. LEDs für „vorwärts“ und „rückwärts“ ausstellen (oder andere Farbe), wenn man am Anfang oder am Ende einer Playlist ist
  2. LEDs auf rot, wenn tasten gesperrt sind

Aktuell musste ich sie noch vertrösten, aber zumindest sind die Features nicht unmöglich. Diese Funktionalitäten kann man auch nicht mit normalen LEDs bewerkstelligen.

Ansonsten kann ich den Punkten von mzanetti voll zustimmen. Die Helligkeitanpassung und der Verbau von +3 WS2812 war um ein vielfaches einfacher. Auch hat man hat nicht das Problem, dass nach dem Einbau der Tasten merkt, dass man die falsche Farbenreihenfolge hat (nicht, dass mir das jemals passiert wäre :wink: )

2 „Gefällt mir“

OK verstanden. Die Code-Vorbereitungen (zunächst ohne sichtbare Änderungen) zu diesem Feature befinden sich jetzt im DEV-Branch, Vielen Dank @laszloh für die Vorarbeit :+1:

Noch eine Anmerkung: So statisch wie der Name vermutet wird es ja nicht. Auch wenn evt. im 1.Schritt die LED’s statisch leuchten könnten dort später auch Funktionen hinterlegt sein. Benennung jetzt

NUM_INDICATOR_LEDS für den Neopixel
NUM_STATIC_LEDS für die neuen LED’s

Evt. besser NUM_CONTROL_LEDS ? Also für zukünftige Erweiterungen benennen, noch andere Vorschläge?
Und diese optionalen LED’s werden dann hinter den NeoPixel angeschlossen? Evt. hier mal ein Beispiel-Schaltplan/Diagramm, kann auch ganz einfach gehalten sein.

1 „Gefällt mir“

Alles klar. Kann ich gerne so benennen. Ich hatte die so benannt weil ich ursprünglich vor hatte noch andere Verzierungen damit zu realisieren und nicht nur „controls“. Aber für mich ist CONTROL_LEDS natürlich auch vollkommen ok.

Ja genau. Also in meinem speziellen Fall benutze ich keinen neopixel Ring sondern hab einfach selbst ne Reihe von WS2812 LEDs in dem Rechteck wie oben abgebildet verlötet. Von da aus bin ich einfach mit der Datenleitung vom letzten led des „Rings“ weiter zu den Buttons.
Sollte aber jemand einen fertigen neopixel Ring verwenden, gibt es auch bei dem am Ende einen DO (Daten-out) Pin der einfach direkt in den DI pin des ersten Button LEDs weiter geführt werden kann.

Bin gerade nicht Zuhause, werde den branch aber die nächsten Tage dann updaten und kann dann gerne noch nen Schaltplan bzw Fotos vom Inneren meiner Box hier posten. Sollte sie sowieso nochmal für den „Zeigt her …“ thread ablichten…

Edit: ach ja, und es gibt bereits ein BUTTON_LEDS define in der settings.h weshalb ich auch am Ende bei STATIC_LEDS gelandet bin. Vielleicht wäre dann sowas wie ADDITIONAL_LEDS besser? Vielleicht fällt ja sonst noch jemandem was ein. Dinge zu benennen ist ja bekanntlich eines der 3 schwierigsten Probleme bei Software :sweat_smile:

2 „Gefällt mir“

Ich finde die Idee dahinter total super.

Meine Frage ist, hat jemand schon mal Taster mit WS2812 gesehen?

Ich wollte z.B. folgende Taster verwenden
medium_49144_4226_31580
Diese gibt es jedoch nur mit einer einfarbigen LED. Ein Tauschen der LED funktioniert nur mit viel Glück zerstörungsfrei. Zumal ich die WS2812 bisher nur in 5mm und SMD gesehen habe.
Man könnte die Symbole beleuchten wie @mzanetti dies gemacht hat aber bei einem Holzgehäuse ist das auch nicht gerade easy.

Also nochmal zu meiner Frage, kennt jemand kleinere Taster mit einer integrierten WS2812 Beleuchtung?

Hab nach ner Weile googeln nur das hier gefunden: Overview | NeoPixel Arcade Buttons | Adafruit Learning System

Danke für deine schnelle Antwort - warum habe ich das nicht gefunden?
Jetzt finde ich auch einige Lösungen bei printables
Egal - an eine Selbstbaulösung hatte ich auch schon gedacht…30mm sind aber auch ganz schöne Brummer - momentan habe ich 10mm im Einsatz.

Ich habe noch transparentes Filament da - entweder experimentiere ich da noch mal oder ich lebe mit einer Farbe und LED an/aus (meinen Kindern wird es eh Wurst sein :smile: )

Diese habe ich noch gefunden Cable Wire Connector Custom Ws2812 Rgb Led 22mm Waterproof Metal Ring Push Button Switch - Buy Rgb Led Ring Button,Ws2812 Switch,Rgb Push Button Switch Product on Alibaba.com

Wenn ich da ein Gehäuse zu gebaut habt, dann macht gerne mal ein Video und dann kann ich das verlinken, so dass Einsteigern klarer wird, was man damit kann machen.

Hier mal die Unterseite der Deckplatte die oben gepostet ist.

Der Stecker +/DI/- geht so zum expansion board. Also genau gleich wie wenn ein NeoPixel Ring angesteckt würde… Nachdem die Datenleitung (grün) ein mal um den „Ring“ rum läuft, einfach weiter zu den controls LEDS. Ich habe da nochmal nen Stecker dazwischen gebaut damit die Montage leichter fällt, ist aber natürlich nicht nötig. +/- hab ich in dem Fall auch ein mal rum laufen lassen, könnte man aber auch gleich am Anfang schon abzwacken wie es sich bei Verwendung eines fertigen NeoPixel Rings anbieten würde.
neopixel

(Disclaimer: In der Theorie sollten da wohl noch ein paar kleine Widerstände und ggf sogar Kondensatoren rein um diverse Effekte abzufedern, allerdings bei der geringen Anzahl von WS2812 LEDs hab ich in der Praxis noch nie ein Problem gehabt diese einfach weg zu lassen, und ich habe mittlerweile etliche Prjekte mit WS2812 LEDs gemacht - Je nach Modell haben manche diese Komponenten sogar intern verbaut)

1 „Gefällt mir“

ich habe oft gelesen, dass der 100nF Filter Kondensator pro LED wichtig ist…Ohne habe ich es deswegen nie probiert - gut zu wissen, dass es auch ohne geht aber das bisschen Hühnerfutter macht das Kraut auch nicht Fett :slight_smile:

Ja also wenn man sehr hochfrequent einzelne LEDs ein/aus schaltet dann können die Spitzen auf den Leitungen erzeugen wodurch nachfolgende LEDs gestört werden könnten. Je länger die Kette, und um so schneller geschaltet wird, um so kritischer wird das. Beides ist beim Use-case des ESPuino jedoch weit unter dem kritischen Limit.

@mzanetti Danke für den Schaltplan, genauso so hatte ich mir das auch vorgestellt!

Bevor ich hier zum ESPuino kam hatte ich eine eigene Firmware die auf dem Neopixel nur die Lautstärke und auf einer nachgeschalteten Neopixel-LED den Status Play/Pause anzeigte. Diese einzelne LED ist seit dem Umstieg auf ESPuino abgeklemmt und wartet womöglich auf eine Wiederauferstehung:

Neopixel2

Also eine einzelne Neopixel-LED hinter dem Lautsprecher-Symbol:
IMG_8657

Zusätzliche Kondensatoren/Widerstände verwende ich nicht, kein Flackern oder ähnliche Störungen.

Warum Port-Expander? DI geht zu einem GPIO des ESP32.

Hmm, ok, klingt als hätte ich hier die Bezeichnungen durcheinander gebracht. Dachte das komplette Board von dir würde als „Port-Expander“ bezeichnet werden, nicht?
Jedenfalls wird das ganze natürlich hier angeschlossen:

als Port-Expander (PE) wird meist der kleine IC auf der Platine genant (der mehr IOs zur Verfügung stellt) nicht die ganze Platine mit

2 „Gefällt mir“

Genau. Den kannst du aber letztlich dann nur für „einfache“ Sachen gebrachen und nicht für Dinge, die extrem zeitkritisch sind. D.h. sowas wie Buttons oder auch das Ansteuern des Mosfets ist kein Problem, aber den Neopixel zB kann man damit nicht ansteuern.
Alles, was tatsächlich am Port-Expander hängt, hat in den Settings eine Nummer von 100 bis 115. Nur 0 bis 39 ist wirklich GPIO.

Der Neopixel und die evt. hier nachgelagerten LED’s werden bei einer Platine hier aus dem Forum an die Neopixel Buchse angeschlossen und dieser geht an einen GPIO & nicht an den PortExpander, hatte ich auch übersehen im Diagramm.

So oder so, die Code-Änderungen von @mzanetti sind minimal & scheinen gut zu funktionieren. Ich teste noch & dann sollte das bald im DEV-Branch verfügbar sein.

Einige hochwertige Taster haben hinten eine 5mm LED verbaut die man ggf. durch so etwas austauschen kann. Dann wäre das Dimmen z.B. im Nachtmodus und evt. später auch Statusanzeige möglich.

1 „Gefällt mir“