📗 Welche Optionen beim Kompilieren gibt es?

Um den ESPuino auf die Bedürfnisse seines Benutzers anzupassen zu können, gibt es über die Settings-Dateien zahlreiche Direktiven. Was diese im Einzelnen bedeuten darauf geht dieses Dokument ein. Zuvor muss man jedoch den Code runterladen. Wie das funktioniert, das erfährst du hier: 📗 ESPuino in Platformio anlegen und mit git aktuell halten.

settings.h

HAL: Grundlegende Einstellungen werden in der settings.h durchgeführt. Darüber hinaus gibt es jedoch auch Einstellungen, die Develboard-spezifisch sind. Welches Board man verwenden möchte, legt man mit HAL fest. Um HAL oder dessen Nummer muss man sich jedoch nicht kümmern, sondern stattdessen ein Environment auswählen. Dazu sucht man um unteren Bildschirmrand von Visual Studio Code nach env:…
Das sieht dann etwa so aus:

Klickt man dieses an, so hat man verschiedene Environments zur Auswahl:

Hier wählt das das Environment aus, welches zum verwendeten Develboard passt. Bei den meisten Leuten wird dies env: lolin_d32_pro_sdmmc_pe sein.

PORT_EXPANDER_ENABLE: Ermöglicht die Nutzung des Port-Expanders vom Typ PCA9555. Muss z.B. bei ESPuino-mini 4Layer zwingend aktiviert werden. Wird dies vergessen, so läuft so ziemlich nichts.

I2S_COMM_FMT_LSB_ENABLE: Aktiviert LSB anstelle MSB auf dem I2S-Bus. Dies ist z.B. für den DAC PT2811 notwendig. Nicht aktivieren, wenn MAX98357a, AC101, PCA5102A, UDA1334 oder MS6324 verwendet wird!

MDNS_ENABLE: Damit man nicht mit IP-Adressen hantieren muss, kann dieses Feature aktiviert werden. Nach dem Erstmaligen Starten öffnet der ESPuino einen Access-Point, über den man via 192.168.4.1, neben der Zugangsdaten, auch den Hostname konfigurieren kann. Setzt man diesen z.B. auf espuino, so kann man im Anschluss den ESPuino über die Adresse espuino.local erreichen. Heißt: Dem Hostname wird immer .local angehängt. Wer eine FritzBox verwendet, benötigt dieses Feature nicht unbedingt, weil auch so etwas wie espuino.fritz.box von der Fritzbox bereitgestellt wird. Und wenn nicht, kann man es über die Administrationsoberfläche der Fritzbox einstellen. Ist auf jeden Fall sehr empfehlenswert, dieses Feature zu aktivieren.

MQTT_ENABLE: Hier kann MQTT aktiviert werden, um Smarthome-Funktionalitäten des ESPuino zu nutzen. Wichtig: Wird kein MQTT benutzt, so sollte es deaktiviert bleiben, da es sonst zu lästigen Timeouts kommen kann. Deaktiviere es auf jeden Fall, wenn du kein MQTT nutzt. Dies spart Speicher und potentiell auch Timeouts.

FTP_ENABLE: Hier kann der FTP-Dienst aktiviert werden. Da dieser eh nach jedem Neustart über eine Tastenkombination aktiviert werden muss und er „kein Heu frisst“, wenn er nicht aktiviert ist, würde ich empfehlen, dies zu aktivieren.

NEOPIXEL_ENABLE: Hier kann die Neopixel-Visualisierung aktiviert werden. Ich empfehle es, dies zu nutzen, da hierüber viele Informationen visuell transportiert werden.

NEOPIXEL_REVERSE_ROTATION: Die Animationen auf deinem Neopixel-Ring werden entgegen des Uhrzeigersinns angezeigt? Dann bist du hier richtig: Aktiviere diese Option :slight_smile: .

LANGUAGE: Hier kann die Sprache des Serial-Loggings und der WebGUI eingestellt werden. Aktuell gibt es DE und EN.

STATIC_IP_ENABLE: Ermöglicht eine statische IP-Adresskonfiguration. Wichtig: Vergiss weiter unten nicht local_IP, gateway, subnet und subnet zu konfigurieren. Nur aktivieren, wenn du es unbedingt benötigst.

HEADPHONE_ADJUST_ENABLE: Hast du eine Kopfhörerplatine angeschlossen, so kann der ESPuino dies erkennen. Im eingesteckten Zustand kann eine zweite Lautstärke aktiviert werden, die man über die WebGUI konfigurieren kann. So lässt sich die max. Kopfhörerlautstärke auf einen anderen Wert setzen als die des Lautsprechers.

PLAY_MONO_SPEAKER: Wenn dies aktiv ist, was bei nur einem Lautsprecher Sinn macht, dann erfolgt die Ausgabe in mono. Hinweis: Ist HEADPHONE_ADJUST_ENABLE aktiv, so dass der ESPuino mitkriegt, wenn ein Kopfhörer in die Buchse eingesteckt wurde, so wird der Modus bei eingestecktem Kopfhörer automatisch (und unveränderlich) auf stereo umgeschaltet.

SHUTDOWN_IF_SD_BOOT_FAILS: Kommt es beim Starten zu einem Fehler (SD-Karte nicht lesbar), so schaltet der ESPuino nach einer Zeit x ab, wenn diese Option aktiviert ist. Im Batteriebetrieb würde ich diese Option absolut empfehlen, da man ansonsten ggf. keine Möglichkeit mehr hat, den ESPuino auszuschalten, wenn alles in ein Gehäuse eingebaut ist.

MEASURE_BATTERY_VOLTAGE: Ist diese Option aktiviert, so wird zyklisch die Spannung gemessen, geloggt und über MQTT versendet (sofern aktiv). Ist Neopixel aktiv, so lässt sich mit einem Tastendruck auf den Drehencoder auch darauf die Spannung visualisieren und zudem wird eine Warnung angezeigt, wenn die Spannung unter einen Wert x (konfigurierbar via WebGUI) sinkt.

PLAY_LAST_RFID_AFTER_REBOOT: Aktiviert man dies, so wird sich der ESPuino an die RFID-Karte „erinnern“, die beim letzten Mal aufgelegt wurde (über Neustart hinweg). D.h. diese Karte wird automatisch wieder gespielt. Hinweis: Kommt es mit einer Karte zu einem Problem, kann es passieren, dass man hiermit in einer Endlosschleife landet, aus der man nur rauskommt, indem man den ESP32 neu flasht. Dabei muss man so vorgehen, dass man den ESPuino ohne aktiviertes PLAY_LAST_RFID_AFTER_REBOOT neu flasht. Anschließend eine Karte auflegen, die keine Probleme bereitet und zum Schluss nochmal flashen mit aktiviertem PLAY_LAST_RFID_AFTER_REBOOT. Es ist allerdings ein Mechanismus implementiert, der eine solche Bootschleife nach drei Ereignissen unterbrechen sollte. Aber man weiß ja nie :woman_shrugging:

USE_LAST_VOLUME_AFTER_REBOOT: Erinnert sich über einen Neustart hinweg, welche Lautstärke zuletzt verwendet wurde und stellt diese automatisch wieder ein.

USEROTARY_ENABLE: Ermöglicht die Verwendung eines Drehencoders.

BLUETOOTH_ENABLE: Aktiviert Bluetooth-Unterstützung (a2dp-sink). Um den Bluetooth-Modus zu starten wird eine Modifikationskarte benötigt, die via WebGUI angelernt werden kann. Alternativ kann auf eine Taste auch die Aktion TOGGLE_BLUETOOTH_MODE gelegt werden, um den Wechsel per Tastendruck herbeizuführen.

IR_CONTROL_ENABLE: Ermöglicht die Nutzung einer Infrarot-Fernbedienung. Achte darauf, die zugehörige Konfiguration im Develboard-spezifischen Configfile ebenfalls anzupassen und die Aktionen gemäß deiner Fernbedienung anzulernen (Neues Feature: Fernsteuerung per Infrarot-Fernbedienung).

CACHED_PLAYLIST_ENABLE: Inzwischen obsolet und ggf. nicht mehr vorhanden!
Beim Auflegen einer Karte wird eine Playlist generiert. Je nachdem, wie viele Titel zu einer solchen Playlist gehören, kann das mehr oder weniger lange dauern. Bei einer Cached-Playlist wird eine einmal generierte Playlist (unter bestimmen Voraussetzungen) auf der SD-Karte abgespeichert, so dass beim nächsten Mal darauf zugegriffen werden kann. Dies kann zu deutlichen Geschwindigkeitsvorteilen führen. Weitere Infos hier: Neues Feature: Cached-Playlist.

PAUSE_WHEN_RFID_REMOVED Ist diese Option aktiviert, so muss die RFID-Karte aufgelegt bleiben. Sobald sie entfernt wird, wird die Wiedergabe pausiert. Weitere Infos hier: Neues Feature: Pausieren, wenn RFID-Karte entfernt wurde.

SAVE_PLAYPOS_BEFORE_SHUTDOWN: Normalerweise wird im Hörspielmodus die letzte Titelposition nicht automatisch beim Ausschalten des ESPuino gespeichert. D.h. es muss vorher Pause gedrückt werden. Ist diese Option aktiviert, so ist dies nicht notwendig. D.h. während der Ausschaltphase wird, sofern aktuell gerade etwas im Hörspielmodus abgespielt wird, die Wiedergabe automatisch auf Pause gesetzt, so dass eine Speicherung (regulär) initiiert wird. Diese Funktionsweise sei hier jedoch nur zur Vollständigkeit erwähnt, da dies so schnell geht, dass man es nicht mitbekommt. Siehe: Speichern der letzten Position im Hörspielmodus.

HALLEFFECT_SENSOR_ENABLE: Unterstützung für Hallsensor. Weitere Infos hier.

SAVE_PLAYPOS_WHEN_RFID_CHANGE: Siehe SAVE_PLAYPOS_BEFORE_SHUTDOWN, jedoch in diesem Falle, wenn eine neue RFID-Karte aufgelegt wurde, die keine Modifikationskarte ist. Siehe: Speichern der letzten Position im Hörspielmodus.

VOLUMECURVE: Standardmäßig 0 (quadratisch), kann jedoch auf 1 (logarithmisch) gestellt werden. Bei 0 hat man mitunter das Problem, dass im unteren Lautstärkebereich die Abstufung zu grob ist. Hast du dieses Problem, so teste mal, ob „1“ dies behebt.

SD_MMC_1BIT_MODE: Aktiviert SD_MMC. Hinweis: Der SD-Reader muss dies unterstützen und passend angeschlossen sein. Ein etwaiger PullUp-Widerstand an GPIO2 (MISO) muss entfernt sein, da der ESP32 sonst nicht mehr drahtgebunden flashbar ist (OTA müsste dennoch funktionieren).

SINGLE_SPI_ENABLE: Lässt RFID und SD via SPI in der gleichen SPI-Instanz laufen. Spart GPIOs, ist aber nicht gut getestet. Besser nicht verwenden, außer du weißt, was du tust :slight_smile:

RFID_READER_TYPE_MFRC522_SPI: Aktiviert SPI für den RFID-Reader RC522.

RFID_READER_TYPE_MFRC522_I2C: Aktiviert I2C für den RFID-Reader RC522.

RFID_READER_TYPE_PN5180: Aktiviert den RFID-Reader PN5180. Darf nicht zusammen mit RC522 aktiviert werden!

PN5180_ENABLE_LPCD: Aktiviert das Aufwecken des ESPuino durch den PN5180 mittels Auflegen einer Karte. 📗 Was ist LPCD und wie funktioniert es?.

rfidGain: Hier kann die Sensitivität des RC522 (nicht PN5180!) eingestellt werden. Die möglichen Werte sind:

  RxGain_18dB				= 0x00 << 4,	// 000b - 18 dB, minimum
  RxGain_23dB				= 0x01 << 4,	// 001b - 23 dB
  RxGain_18dB_2			= 0x02 << 4,	// 010b - 18 dB, it seems 010b is a duplicate for 000b
  RxGain_23dB_2			= 0x03 << 4,	// 011b - 23 dB, it seems 011b is a duplicate for 001b
  RxGain_33dB				= 0x04 << 4,	// 100b - 33 dB, average, and typical default
  RxGain_38dB				= 0x05 << 4,	// 101b - 38 dB
  RxGain_43dB				= 0x06 << 4,	// 110b - 43 dB
  RxGain_48dB				= 0x07 << 4,	// 111b - 48 dB, maximum
  RxGain_min				= 0x00 << 4,	// 000b - 18 dB, minimum, convenience for RxGain_18dB
  RxGain_avg				= 0x04 << 4,	// 100b - 33 dB, average, convenience for RxGain_33dB
  RxGain_max				= 0x07 << 4		// 111b - 48 dB, maximum, convenience for RxGain_48dB

expanderI2cAddress: I2C-addresse des Port-Expanders.

Button-Layout (allgemein): Bitte das hier lesen: 📗 Das dynamische Button-Layout

serialDebug: Hier lässt sich einstellen, wie viele Informationen über die serielle Konsole angezeigt werden.

buttonDebounceInterval: Sollten Tasten prellen, so kann man hier die Zeit verlängern. Im Zweifelsfalle lieber unverändert lassen.

intervalToLongPress: Es gibt Aktionen, bei den man Tasten lange drücken muss. Hier ist definiert, wie lange „lange“ genau/mindestens ist.

CONTROLS_LOCKED_BY_DEFAULT: Wenn aktiviert, dann ist standardmäßig nach dem Start die Tastensperre aktiv. Sie kann mittels Modifikationskarten oder MQTT aufgehoben werden.

INCLUDE_ROTARY_IN_CONTROLS_LOCK: Wenn aktiviert, dann schließt eine (optional) aktivierte Tastensperre den Drehencoder mit ein.

RFID_SCAN_INTERVAL: Legt fest, wie oft nach neuen RFID-Karten gesucht wird.

accessPointNetworkSSID: Ist für deinen ESPuino kein WLAN festgelegt, in das eine Anmeldung erfolgen soll oder das WLAN ist nicht verfügbar, so startet ESPuino ein eigenes WLAN, mit dem du dich verbinden kannst. Der Name dieses WLANs wird hier festgelegt.

accessPointNetworkPassword: Hier lässt sich ein Passwort für das WLAN festlegen, das mittels accessPointNetworkSSID definiert wurde. An dieser Stelle nochmal der Hinweis: Es geht hierbei NICHT um das WLAN, in das sich ESPuino einbuchen soll, sondern um das WLAN, dass ESPuino selbst aufspannt, sofern keines verfügbar bzw. konfiguriert ist.

nameBluetoothSinkDevice: Hier lässt sich der Name festlegen, unter dem der ESPuino als Bluetooth-Gerät sichtbar ist, wenn man per Bluetooth darauf streamen möchte (vom Handy zum Beispiel).

nameBluetoothSourceDevice: Will man von ESPuino auf ein externes BT-Gerät streamen (BT-Kopfhörer zum Beispiel), so legt man hier den Namen fest, zu dem sich ESPuino in diesem Modus verbinden soll.

backupFile: Alle Verknüpfungen zwischen RFID-Karten und Aktionen werden im ESP32 gespeichert, jedoch zusätzlich auch in einer Datei auf der SD-Karte. Einerseits als Backup, andererseits jedoch auch, um diese woanders importieren zu können. Hier wird Pfad+Dateiname dieser Datei festgelegt.

playlistCacheFile: Wenn das Feature CACHED_PLAYLIST_ENABLE aktiv ist, werden in dieser Datei die Playlists gecacht. Wichtig: Pro Verzeichnis wird eine solche Datei angelegt. Deswegen befindet sich, im Gegensatz zu backupFile auch kein „/“ davor. Es geht hier also nur um den Dateinamen und NICHT um den Pfad.

NUM_LEDS: Anzahl der Neopixel-LEDs.

CHIPSET: Typ des Neopixels. Im Zweifelsfalle hier mal schauen, was unterstützt ist.

COLOR_ORDER: Siehe Userkommentare (weiter unten).

`NUM_LEDS_IDLE_DOTS: Anzahl der LEDs, die (rotierend) den Idle-Zustand signalisieren. Standardmäßig sind das vier, die um 90 Grad versetzt sind.

OFFSET_PAUSE_LEDS: Ist diese Option aktiv, so werde die Pause-LEDs immer zentriert.

PROGRESS_HUE_START: Siehe Ein paar neue Features.

PROGRESS_HUE_END: Siehe Ein paar neue Features.

DIMMABLE_STATES: Dies bestimmt, wie viele Zwischenzustände eine LED zwischen „aus“ und „eingestellter Helligkeit“ hat. Letztlich ist es so, dass durch die Anzahl der LEDs die „Auflösung“ etwas eingeschränkt ist. Beispielsweise wenn man ein Hörspiel hört, das 48 Minuten lang ist, so wird der Spielfortschritt bei 24 LEDs in zwei Minuten pro LED angezeigt. Für den Zeitraum dazwischen wird die nächst folgende LED gedimmt, was gewissermaßen Zwischenzustände ermöglicht und somit die Auflösung erhöht. Trage hier eine 1 ein, wenn du keine Zwischenzustände angezeigt haben möchtest.

LED_OFFSET: Siehe Ein paar neue Features.

warningLowVoltage: Voreinstellung, ab welcher Akkuspannung eine Warnung auf dem Neopixel angezeigt wird. Hinweis: Kann über WebGUI überschrieben werden.

voltageCheckInterval: Wie oft die Batteriespannung gemessen wird. Hinweis: Kann über WebGUI überschrieben werden.

voltageIndicatorLow: Voreinstellung, was die untere Spannungsgrenze auf dem Neopixel ist. Hinweis: Kann über WebGUI überschrieben werden.

voltageIndicatorHigh: Voreinstellung, was die obere Spannungsgrenze auf dem Neopixel ist. Hinweis: Kann über WebGUI überschrieben werden.

headphoneLastDetectionDebounce: Sollte der Kopfhörerstecker beim Einstecken prellen, so kann diese Zeit verlängert werden, damit dies nicht mehr passiert.

jumpOffset: Über die Kommandos CMD_SEEK_FORWARDS und CMD_SEEK_BACKWARDS kann man eine definierte Zeitspanne in einem Titel vor- oder zurückspringen. Wie lange diese Zeitspanne ist, wird mittels jumpOffset in Sekunden definiert.

mqttRetryInterval: Wie oft versucht wird, den MQTT-Server zu erreichen.

mqttMaxRetriesPerInterval: Wie oft pro Intervall versucht wird, den MQTT-Server zu erreichen.

Diverse MQTT-Einstellungen: Hier lassen sich die MQTT-Topics definieren.

settings-%boardspezifisch%.h

WAKEUP_BUTTON: Definiert einen GPIO, der zum Aufwecken des ESP32 verwendet wird. Nutzt man einen Port-Expander, so sollte hier der gleiche Wert stehen wie auch bei PE_INTERRUPT_PIN.
POWER: Definiert den GPIO/PE-Pin, der eine Mosfet-Schaltung ansteuert. Im Betrieb wird ein HIGH ausgegeben, im Deepsleep undefiniert.
INVERT_POWER: Invertiert die Ansteuerung der Mosfet-Schaltung. D.h. im Betrieb wird ein LOW ausgegeben, im Deepsleep undefiniert.
PE_INTERRUPT_PIN: Definiert einen GPIO, der Interrupts des Port-Expander empfängt. Wird nur bei Verwendung eines Port-Expanders benötigt und trägt dann in der Regel den gleichen Wert wie WAKEUP_BUTTON. REVERSE_ROTARY`: Kehrt die Drehrichtung des Drehencoders um.

Damit wird die Farbreihenfolge im Datenstrom bestimmt .
Dieser Parameter muß evtl .geändert werden wenn man andere LED´s , wie ich z.Bsp. die APA106 nimmt , sonst stimmen die Farben nicht . Macht man das nicht ist zum Beispiel Grün dann Rot und umgekehrt .

1 „Gefällt mir“

Das braucht man für die Addressierung der einzelnen Lichtpunkte, also der Farben in jedem Pixel. Die sind in Reihe geschaltet und können je nach Hersteller und Modell variieren.
Wenn es also zu komischen Farben kommt kann man hier die Reihenfolge wechseln.

Edit: Da war compactflash schneller (Schnell wie der Blitz? :sweat_smile:)