Verwendung von BUTTONS_LED

Moin,

ich habe diese LED-Buttons bei mir eingebaut. (steht 5V bis 24V, die 3,3V klappen aber auch ohne Probleme).



Bis jetzt habe ich diese mit an den LED-Ring-Strom-Anschluss drangehangen. Das klappt auch sehr gut. Allerdings schaltet diese sich natürlich nicht beim Nachtmodus aus.
Nun wollte ich die 3 Taster auf BUTTON_LED umstellen. Allerdings kenne ich mich mit Widerständen & Co nicht so gut aus. Bei mir bleiben die Fragen:

  • Suche ich mir auf der mini4L einfach bei den „ext“ headern einen PIN aus und nehme den als BUTTON_LED (V+)? Welchen GND ist egal?
  • Ist der maximale Strom für 3 Buttons klein genug?
  • Brauche ich da extra einen Widerstand?

Danke
André

Ich habe das Feature selbst nie verwendet aber so müsste es klappen, ja.

Ja.

Gemäß Datasheet kann ein Pin des PE max. 50 mA liefern. In deinem Datenblatt oben steht nur <= 20 mA. Also mind, potentiell reicht das nicht. Dann brauchst entweder nen Mosfet oder du müsstest dir den Code in dem Sinn duplizieren, dass es noch z. B. BUTTON_LED2 gibt. D.h. alle Stellen, die BUTTON_LED behandelt, müsstest du dann darum erweitern. Und dann könntest zwei Buttons an BUTTON_LED anschließen und einen an BUTTON_LED2. Irgendwie so.

Eigentlich nicht, aber das wäre natürlich auch eine Möglichkeit, um den Strom so weit zu reduzieren, dass du mit einem I/O hinkommst :slight_smile:.

Danke, ich habe mal den Button mit einem Multimeter und Labornetzteil gemessen. Bei 3,3V zeigt der 0,000 uA an. Erst bei ca. 12V zeigt der mal 0,009 uA an. Verrückt wie wenig die helle LED verbraucht. Wieso auch immer die dann <=20 mA angeben.

Im Code ist BUTTONS_LED 114. Bei der mini4L wäre das PIN 2 beim rechten unteren PIN unter ext? Oder woher kommt die 114???

Ja genau, 114 dann.
Zur Erklärung woher das kommt: Die GPIOs des ESP32 liegen ja im Bereich von 0 bis 39. Ich habe dann irgendwann gesagt, dass ich den PE gerne in der Nummerierung „GPIO-artig“ (*) verwenden möchte und damit bei 100 starten will. Der PE (PCA9555) hat zwei Ports (0 und 1) à 8 I/O. Und da ist der erste Port mit 100 bis 107 adressiert und der zweite von 108 bis 115. Demnach ist 114 der vorletzte I/O des Port 1.
Gekapselt wird diese ganze Bit-Schieberei in der Port.cpp.

(*) Die lassen sich nur für einfache Aufgaben verwenden (Dinge schalten oder auslesen, so lange das nicht fürchterlich schnell gehen muss). Sowas wie die Ansteuerung eines Neopixels geht damit nicht.

Hallo zusammen,

ich versuche mich derzeit auch an der Benutzung des BUTTON_LED Feature. Mein verwendetes Hardware Setup ist die mini4L mit einem D32 FePo Board und als Software verwende ich den aktuellen dev Branch https://github.com/biologist79/ESPuino/tree/dev

Anders als oben angegeben habe ich die LEDs mit Pin 11 des Ext (J3) verbunden.

Wenn ich in nun in der settings-lolin_d32_pro_sdmmc_pe.h die Variable

> #define BUTTONS_LED                     114

einschalte bekomme ich direkt folgendes Problem gemeldet, dass in der Led.cpp
nicht definiert ist.

So lässt sich die Software auch nicht kompilieren und ich bekomme folgenden Fehler.

Compiling .pio/build/lolin_d32_pro_sdmmc_pe/src/Led.cpp.o
src/Led.cpp: In function 'void Led_SetBrightness(uint8_t)':
src/Led.cpp:226:35: error: 'Led_NightBrightness' was not declared in this scope
  Port_Write(BUTTONS_LED, value <= Led_NightBrightness ? LOW : HIGH, false);
                                   ^~~~~~~~~~~~~~~~~~~
src/Led.cpp:226:35: note: suggested alternative: 'Led_SetBrightness'
  Port_Write(BUTTONS_LED, value <= Led_NightBrightness ? LOW : HIGH, false);
                                   ^~~~~~~~~~~~~~~~~~~
                                   Led_SetBrightness
*** [.pio/build/lolin_d32_pro_sdmmc_pe/src/Led.cpp.o] Error 1

Nach einiger Suche (ich bin bei weitem nicht fit im schreiben von Software) habe ich gesehen, dass diese Variable

Led_NightBrightness

in der Led.h folgendermaßen definiert ist:

uint8_t Led_NightBrightness = LED_INITIAL_NIGHT_BRIGHTNESS;

kopiere ich nun diese Definition in die Led.cpp

void Led_SetBrightness(uint8_t value) {
	uint8_t Led_NightBrightness = LED_INITIAL_NIGHT_BRIGHTNESS;

lässt sich die Software kompilieren und flashen.

Auf diese Weise lassen sich die Button LEDs beim Ausführen der entsprechenden Modifikation „Nachtmodus“ zwar dimmen - konkreter gesagt gehen sie ganz aus, doch leider werden sie nach dem zurücksetzen auf den Normalmodus nicht wieder eingeschaltet.

Hat jemand eine Idee woran das liegen könnte, bzw. wie die Definition richtig implementiert werden muss, dass es funktioniert?

Ich habe das nicht getestet aber es kann compiliert werden. Versuche mal die Zeile 225 wie folgt zu ändern:

	Port_Write(BUTTONS_LED, value <= gLedSettings.Led_NightBrightness ? LOW : HIGH, false);

@tueddy Ist das möglicherweise beim Umzug der Parameter in das Webinterface kaputt gegangen?

Ja das könnte so sein. Der Bugfix von @joker erscheint mir auch korrekt. @onkelbobby kannst Du es testen? Dann würde ich den Bugfix einchecken

ich habs getestet. Damit funktioniert der Toggle.
Schau dir bitte noch die Zeile 229 an, ich habe kein MQTT, vermute jedoch, dass da auch noch ein Fehler ist.

@tueddy ich kann es gerne testen, komme aber leider erst am Wochenende dazu.

Ich werde hier berichten…

Danke für die schnelle Hilfe!

OK, ein Test mit LED & Vorwiderstand an Pin 11 (PE 114) war schnell angelötet.
Mit Software-Stand 20250403-1-DEV sollte es nun klappen, gern Rückmeldung hier.

2 „Gefällt mir“

Ich hab es noch mal getestet mit dem Fix läuft es jetzt out of the Box…danke

1 „Gefällt mir“