đź“— Das dynamische Button-Layout

Ursprünglich war in der Firmware des ESPuino fest verankert, dass die Bedienung über drei Tasten und einem Drehencoder zu erfolgen hat. Die Bedienung/Bedeutung der jeweiligen Tasten war dabei vorgegeben. Dies hat sich nun geändert: Tasten können nun wahlweise hinzugefügt und entfernt werden. Auch ist der Drehencoder nun optional.

An dieser Stelle sei erwähnt, dass das von mir empfohlene (und benutzte) Layout weiterhin drei Taster und ein Drehencoder ist.

  • Als neue Direktive in settings.h ist USEROTARY_ENABLE hinzugekommen. Wird kein Drehencoder gebraucht, so kann dies deaktiviert werden. Hinweis: Ist dies der Fall, so muss in der jeweiligen Develboard-spezifischen Config unbedingt WAKEUP_BUTTON angepasst werden.

  • Mit dem eben bereits angesprochenen WAKEUP_BUTTON kann festgelegt werden, mit welcher Taste der ESPuino wieder aus dem Tiefschlaf geholt werden soll. Es ist an dieser Stelle darauf zu achten, dass nur sog. RTC-GPIOs (0, 4, 12, 13, 14, 15, 25, 26, 27, 32, 33, 34, 35, 36, 39) verwendbar sind. Es können an dieser Stelle direkt Zahlen reingeschrieben werden oder aber z.B. auch Namen wie DREHENCODER_BUTTON oder NEXT_BUTTON. Soll dieses Feature deaktiviert werden, so ist eine 99 zu setzen. Nicht auskommentieren!

  • In der Develboard-spezifischen Config sind die Tasten BUTTON_4 und BUTTON_5 hinzugekommen. Per Voreinstellung sind sie deaktiviert (99). Im Gegenzug können jedoch auch NEXT_BUTTON, PREVIOUS_BUTTON oder PAUSEPLAY_BUTTON wahlweise aktiviert oder deaktiviert werden.

  • In settings.h können den Tastern nun beliebige Aktionen zugewiesen werden. Hierbei ist zu unterscheiden, ob es sich um eine Tastenkombination aus zwei Tasten (MULTI_n_SHORT) oder um eine einzige Taste (BUTTON_n_SHORT oder BUTTON_n_LONG) handelt. D.h. jeder einzelnen Taste kann man eine Aktion fĂĽr kurzen Tastendruck und eine fĂĽr langen Tastendruck zuweisen.

  • Möchte man einer Taste keine Aktion zuweisen, so ist die Direktive CMD_NOTHING zu setzen. Dies muss entsprechend fĂĽr einen kurzen und/oder langen Tastendruck gemacht werden.

  • Möchte man einer Taste eine Aktion zuweisen, so sind folgende Aktionen möglich (siehe values.h):

Kommando Beschreibung
CMD_LOCK_BUTTONS_MOD Sperrt alle Tasten und gibt sie [theoretisch] wieder frei. Macht als Tastenbelegung eher nicht so viel Sinn, da man mit gesperrten Tasten keine Tastenaktion mehr auslösen kann. Ist eher eine Aktion für Modifikationskarten.
CMD_SLEEP_TIMER_MOD_15 Schaltet sich nach 15 Minuten aus und LEDs werden gedimmt
CMD_SLEEP_TIMER_MOD_30 Schaltet sich nach 30 Minuten aus und LEDs werden gedimmt
CMD_SLEEP_TIMER_MOD_60 Schaltet sich nach 60 Minuten aus und LEDs werden gedimmt
CMD_SLEEP_TIMER_MOD_120 Schaltet sich nach 120 Minuten aus und LEDs werden gedimmt
CMD_SLEEP_AFTER_END_OF_TRACK Schaltet sich nach Ende des Titels aus und LEDs werden gedimmt
CMD_SLEEP_AFTER_END_OF_PLAYLIST Schaltet sich nach Ende der Playlist aus und LEDs werden gedimmt
CMD_SLEEP_AFTER_5_TRACKS Schaltet sich nach Ende von fĂĽnf Titeln aus und LEDs werden gedimmt
CMD_REPEAT_PLAYLIST Aktuelle Playlist wird endlos wiederholt
CMD_REPEAT_TRACK Aktueller Titel wird endlos wiederholt
CMD_DIMM_LEDS_NIGHTMODE Dimmt LEDs in Nachtmodus
CMD_TOGGLE_WIFI_STATUS Schaltet WLAN an/aus
CMD_TOGGLE_BLUETOOTH_SINK_MODE Schaltet den Bluetooth-Modus an/aus, bei dem man zu ESPuino streamen kann (z.B. von einem Handy).
CMD_TOGGLE_BLUETOOTH_SOURCE_MODE Schaltet den Bluetooth-Modus an/aus, bei dem man von ESPuino zu einem externen Lautsprecher oder einem Kopfhörer streamen kann.
CMD_ENABLE_FTP_SERVER Schaltet FTP-Server an (aus geht nicht)
CMD_PLAYPAUSE Wechsel zwischen Pause und Play
CMD_PREVTRACK Vorheriger Titel der aktuellen Playlist
CMD_NEXTTRACK Nächster Titel der aktuellen Playlist
CMD_FIRSTTRACK Sprung zu erstem Titel der aktuellen Playlist
CMD_LASTTTRACK Sprung zu letztem Titel der aktuellen Playlist
CMD_VOLUMEINIT Stellt aktuelle Lautstärke auf Lautstärke nach dem Start ein
CMD_VOLUMEUP Erhöht Lautstärke um eine Einheit
CMD_VOLUMEDOWN ReduziertLautstärke um eine Einheit
CMD_MEASUREBATTERY Startet Messung der Akkuspannung (wird ĂĽber Log, Neopixel und MQTT anschlieĂźend ausgegeben)
CMD_SLEEPMODE Schaltet ESPuino sofort aus
CMD_SEEK_FORWARDS Springt n Sekunden nach vorne im Titel (Dauer in settings.h konfigurierbar
CMD_SEEK_BACKWARDS Springt n Sekunden nach hinten im Titel (Dauer in settings.h konfigurierbar
  • Beispiel: Man möchte ein Layout, welches auf drei Tasten und einem Drehencoder basiert. Dabei möchte man gerne zum vorherigen Titel, zum nächsten Titel, zum ersten Titel und zum letzten Titel springen können. Man möchte auch Pause/Play setzen kann. Weiterhin mittels Drehencoder den ESPuino anschalten, ausschalten, die Lautstärke ändern und die Batteriespannung anzeigen. Dies könnte man wie folgt machen (nicht zugewiesene Aktionen sind ausgeblendet):

#define BUTTON_0_SHORT CMD_NEXTTRACK
#define BUTTON_1_SHORT CMD_PREVTRACK
#define BUTTON_2_SHORT CMD_PLAYPAUSE
#define BUTTON_3_SHORT CMD_MEASUREBATTERY

#define BUTTON_0_LONG CMD_LASTTRACK
#define BUTTON_1_LONG CMD_FIRSTTRACK
#define BUTTON_2_LONG CMD_PLAYPAUSE
#define BUTTON_3_LONG CMD_SLEEPMODE

Weiterhin möchte man mit der Tastenkombination aus NEXT und PREVIOUS das WLAN aus- und anschalten können. Zusätzlich mit der Tastenkombination PAUSE/PLAY und NEXT den FTP-Server aktivieren.

#define BUTTON_MULTI_01 TOGGLE_WIFI_STATUS
#define BUTTON_MULTI_02 ENABLE_FTP_SERVER

  • Die Zahlen 0 bis 5 ergeben sich aus einer festen Zuordnung heraus, die nicht änderbar ist. D.h. egal, ob du einen Drehencoder benutzt oder nicht, dessen Nummer wird immer 3 bleiben. Es gilt:

0: NEXT_BUTTON
1: PREVIOUS_BUTTON
2: PAUSEPLAY_BUTTON
3: DREHENCODER_BUTTON
4: BUTTON_4
5: BUTTON_5

  • Eine Multi-Button-Aktion ergibt sich somit immer auf Basis zweier solcher Nummern. FĂĽr NEXT+PREVIOUS also z.B. 01. Dabei ist darauf zu achten, dass die kleinere Zahl immer vorne zu stehen hat. D.h. während 01 gĂĽltig ist, wäre das bei 10 nicht der Fall.

  • Abgesehen von GPIOs (0 bis 39) können auch Channels des Port-Expanders PCA9555 verwendet werden, sofern dieser verwendet wird und aktiviert ist. Der Wertebereich ist 100 bis 115. Weitere Informationen dazu gibt es hier: đź“— Einsatz des Port-Expanders PCA9555.

3 „Gefällt mir“

Ganz vielen Dank an alle Beteiligten! Habe heute die neue Version gepullt, ist ohne Probleme kompiliert & hochgeladen und dank der Hervoragenden Anleitung war die Config schnell Angepasst. Ich bin begeistert und ziehe meinen Hut! Gut gemacht! DANKE!

Als grundsätzliche Idee: Man kann auch mit weniger Tasten auskommen und stattdessen Modifikationskarten verwenden: Neue Modifikationskartentypen.
Ob das jetzt im Detail praktikabel ist, muss jeder für sich entscheiden. Aber grundsätzlich klappen würde es.

eine Kleinigkeit hat sich hier geändert:
anstelle des früheren Bluetooth Modus, bei dem es „nur“ die Funktion gab den ESPuino als Bluetooth Speaker zu verwenden

CMD_TOGGLE_BLUETOOTH_MODE	Schaltet Bluetooth an/aus

gibt es eine Neuerung den ESPuino nun entweder als Bluetooth Speaker oder zur Kopplung mit Bluetooth Kopfhörern zu verwenden. Hierfür haben sich die Kommandos allerdings auch entsprechend geändert, welche man den Buttons zuweisen kann

#define CMD_TOGGLE_BLUETOOTH_SINK_MODE  140         // Toggles Normal/Bluetooth sink Mode 
#define CMD_TOGGLE_BLUETOOTH_SOURCE_MODE 141        // Toggles Normal/Bluetooth source Mode 
3 „Gefällt mir“

Kurze Frage zu CMD_SLEEPMODE:
Schaltet dieser Befehl den ESPUino aus- UND auch wieder ein?

S. Beispiel von @biologist : „Weiterhin mittels Drehencoder den ESPuino anschalten, ausschalten…“ über #define BUTTON_3_LONG CMD_SLEEPMODE

Also bei langem Druck auf den Rotary wird der ESPUino in den Deepsleep versetzt. Bei einem weiteren langem Druck auf den Rotary anschlieĂźend wieder aufgeweckt?

Interessehalber:
Wie habt ihr so AN / AUS realisiert?
Habt ihr nur den DeepSleep über einen Taster oder (zusätzlich) einen richtigen Schalter zB bei dem Akku dazwischen?

Danke schon mal!

CMD_Sleepmode ist erstmal nur für’s Ausschalten relevant, da das Einschalten, zumindest wenn man einen Port-Expander benutzt, eh über alle Buttons geht.

Danke fĂĽr die Antwort.
D.h. das LPCD Feature wäre (mir zumindest) gar nicht mal so wichtig, wenn ich die Kiste eh über jeglichen Button aufwecken kann :slight_smile:

Ich habe einfach einen harten Schalter in der Akku Leitung, funzt super. Aus ist AUS!

da hast du recht… ich denke das werde ich auch so machen

Also ein Vorteil, wenn man den ESP32 im Deepsleep hält, ist auf jeden Fall (ab Arduino2), dass die Verbindung ins WLAN schneller erfolgt.
Aber davon ab: Klar, kann man auch ausschalten wenn man das möchte.

Ich bin gerade ĂĽber mein Konzept zu AN/AUS, Anzahl Buttons.
Hättet ihr zufällig einen Erfahrungsbericht für mich, insb. was eure / eure Kindeserfahrungen zum Thema Anzahl Buttons / Schalter sind:

Stromverbrauch im Deepsleep wird so gering sein, dass man die Box in diesem Modus auch über „längere“ Zeit betreiben kann, also wäre ein „harter“ Schalter beim Akku nicht zwingend erforderlich

Wenn ich LPCD nicht nutze, sinkt der Standby - Verbrauch nochmals

LPCD ergibt fĂĽr mich wenig Sinn, wenn ich eh ĂĽber alle Buttons aufwecken kann

Aktuell bin ich bei 3 Pushbuttons + Drehencoder mit Push-Funktion, einen Schalter mit integrierter LED (LED zur Ladeanzeige, Schalter für AN/AUS bei Akku, wobei ich diesen nur verwende, da er eh rumliegt, ansonsten hätte ich mir diesen Schalter gespart und nur eine Lade-LED verwendet).

Danke schon mal.