WLAN-Start jetzt asynchron

Bislang war es so, dass der WLAN-Connect den Start des ESPuino blockiert hat. Nachdem @sonovice das Thema vorhin nochmal bei mir in Erinnerung gerufen hat, habe ich mal geschaut, was sich machen lässt und den Connect nun nicht-blockierend (asynchron) eingerichtet. Sachen von SD lassen sich damit viel früher starten und ich denke das ist bei den meisten Kindern der übliche Anwendungsfall. Macht also Sinn.

Das bedeutet, dass wie bisher, ein Verbindungsversuch initiiert wird. Dessen Ergebnis wird jedoch nicht aktiv abgewartet sondern das passiert im Hintergrund. Vorteil: Sobald man die vielen orange-farbenen LEDs sieht, dauert es nur noch etwa eine Sekunde, bis der ESPuino einsatzbereit ist. Einsatzbereit zu diesem Zeitpunkt jedoch nur für Sachen, die lokal auf SD liegen. Für Webradio muss man natürlich weiterhin die Verbindung abwarten.

Die Anzeige des Neopixels läuft jetzt so:

  • Zuerst signalisieren viele orange-farbene LEDs, dass ESPuino startet
  • Sobald der Bootvorgang abgeschlossen ist, jedoch die WLAN-Verbindung noch nicht besteht, wird der IDLE-Modus durch vier orange-farbene LEDs signalisiert. Es findet also ein Wechsel von vielen LEDs auf vier LEDs statt; die Farbe ändert sich nicht.
  • Ist der WLAN-Verbindungsversuch abgeschlossen, so bleibt im IDLE-Modus alles wie bisher: Entweder die LEDs leuchten weiß (erfolgreich) oder sie leuchten grün (nicht erfolgreich => AP wird geöffnet).

Bei den vier orange-farbenen LEDs bin ich mir bisschen unsicher, ob das der richtige Weg ist. Aber irgendwie wollte jetzt auch nicht noch eine weitere Farbe einführen. Wie auch immer: Man kann diesen zwischenzeitlichen Zustand auf jeden Fall erkennen. Für Vorschläge bin ich offen.

Anmerkungen:
a) Bislang war der Farbübergang (z.B. Wechsel Wlan an/aus) im IDLE-Modus ziemlich langsam. Das war ein Bug, den ich nun mitgefixt habe.
b) Hat man einen ESP32, bei den die WLAN-Zugangsdaten nicht im NVS gespeichert sind, dann geht der ESP32 direkt in den AP-Modus. Das spart inbesondere für „frische“ ESP32 Zeit.
c) ESPuino-Benutzer, die bisher den tryCount erhöht haben, um dem WLAN-Verbindungsversuch mehr Zeit zu geben (Info: der wurde mit 500 ms multipliziert), müssen die Zeiten nun hier anpassen:

Dass es hier zwei Zeiten gibt, geht auf einen ESP32-Bug zurück. Dieser führt nämlich dazu, dass jeder zweite WLAN-Verbindungsversuch fehlschlägt. Das kann man umschiffen, indem man nach einer gewissen Zeit, wenn man vermutet, dass das mit der Verbindung nix mehr wird, einen neuen Verbindungsversuch startet. Die erste Zeit ist also die Zeit, nach der der zweite Verbindungsversuch gestartet wird. Und die zweite Zeit ist die Zeit, nach der ESPuino „aufgibt“.

Bitte testen :slight_smile:

2 „Gefällt mir“

Hi , das ist auch meine Erfahrung … und hier nochmals meine Gedanken zu WiFi überhaupt. Wir hatten das vor gefühlt Jahren schon einmal diskutiert.
WLAN bein Einschalten garnicht starten , auch wegen "Strahlung im Kinderzimmer " , Betrieb im Auto auf langen Fahrten . Du hast das damals nicht machen weil ihr MQTT nutzt. Bei meinen Enkeln wird WLAN fast garnicht gebraucht , nur von Opa wenn er mal in Kanada ist .

Deshalb hier mein Vorschlag:
WLAN grundsätzlich aus , evtl. per #define in den settings konfigurierbar.
Aktivieren möglich durch Festhalten einer Taste , z.Bsp. Taste Play per CMDxxx, beim Bootvorgang.
Mittels Tastenfunktion und Karte wie bisher.
Automatisch beim Auflegen einer Radiokarte.

Wie sehen andere User das , wäre dies praktikabel? Bitte schreibt mal eure Meinung dazu. Ich möchte @biologist dazu gerne überreden.

VG

Es gibt Modifikationskarten und auch Tastenkombinationen. Darüber kann man WLAN deaktivieren und ESPuino merkt sich das über den Start hinweg. Das ist aus meiner Sicht ausreichend.
Das Deaktivieren per Tastenkombination habe ich zwischenzeitlich rausgenommen, da Kinder auch gerne mal wild auf den Tasten rumdrücken. Und dann kann es passieren, dass WLAN deaktiviert wird und man wundert sich, warum der Connect scheinbar nicht klappt.

Lösung: Modifkationskarte. Damit können Eltern WLAN aktivieren/deaktivieren zum beliebigen Zeitpunkt.

Exakt das, was ich beschreibe.

Hab’s gerade getestet:
Start der Musik ist jetzt deutlich beschleunigt, perfekt!

Diesen jeden 2. WLAN Verbindungsfehler bekomme ich nur mit Arduino 2. Hier reicht die Änderung von 9 auf 15 Sek. für den 2. Verbindungsversuch, dann kann ich auch dort zuverlässig verbinden.

Schönen Dank @biologist für die Verbesserungen!

1 „Gefällt mir“

Ich habe das Ganze mal auf dem ESPuino meines Sohnemanns getestet. Da steckt ein Lolin D32 drin - ohne PSRAM also. Das geht jetzt schon grandios schnell :slight_smile:. Das Ganze mit Arduino 1.0.6.

Was mich nochmal zur Frage bringt: Wie kann man den PSRAM-Check des ESP32 umgehen? Wir hatten hier vor einer Weile das Thema. War glaube ich nur ein Befehl. Nur ich weiß leider nicht mehr wo.

Das könnte mit bool testSPIRAM(void){ return true; } gehen, bin mir aber nicht sicher ob das erst ab Arduino 2 geht. Hier der Link dazu:

2 „Gefällt mir“

Hi @biologist
Ich weiß das es so geht , ist mir aber eigentlich nicht genug , wie schon gesagt , WLAN wird kaum gebraucht.
Die Aktivierung per Karte ist ok , hat aber einen Nachteil : Wenn man sie braucht liegt sie irgendwo… ich kenne meine Familie.
Die Tastenfunktion würde ich nie deaktivieren , es sei denn ich hätte den Joker im Notfall beim Booten WLAN aktivieren zu können.
VG

Das analoge Problem der Tasten ist: Wenn man die Kombination braucht, dann weiß man sie nicht mehr. Irgendwas ist halt immer, was irgendwem irgendwann irgendwelche Probleme bereitet.

Deswegen haben wir das ja alles konfigurierbar. Bei mir war’s eher so, dass irgendwann das WLAN deaktiviert war und ich habe mich gewundert warum.

Ich meine ich hätte zu dem ganzen Thema auch mal ne Frage hier „in die Runde“ gestellt, ob man diese Funktion zeitlich (beim Start) einschränken soll, damit nicht (unbeabsichtigt) rumgespielt wird. Kann mich nicht dran erinnern, dass es da großartig Resonanz gegeben hätte. Aber es verhindert Fehlbedienungen auch nicht zwingend

Nee, also für mich passt das so.

Deshalb liefere ich alle Boxen mit einem „Typenschild“ auf der Rückseite aus. Ist der gleiche Sticker von DM wie für die RFID-Karten.
Z.Bsp.

Hallo, ein Problem ist mir aufgefallen:

Ich nutze PLAY_LAST_RFID_AFTER_REBOOT und DONT_ACCEPT_SAME_RFID_TWICE.

Wenn ich ein Webradio höre und neu starte, fängt der Espuino nicht wieder mit dem Webradio an und bleibt idle (ich denke, weil noch keine Wifi Connection besteht).

Weil ich auch DONT_ACCEPT_SAME_RFID_TWICE setze, habe ich dann noch zusätzlich das Problem, dass ich die gleiche Webradiokarte nicht noch einmal auflegen kann. D.h. ich muss erst eine andere Karte und dann wieder die Karte auflegen, die ich eigentlich hören will.

Gruß Bernhard

Das Problem hatte mir schon jmd. berichtet. Und es so lösen wollen, dass sich ESPuino die Karte für Webradio einfach merkt und es ein paar Sekunden wieder versucht. Klingt erstmal ok. Aber:

a) Was, wenn in der Zwischenzeit eine andere Karte aufgelegt wurde? Das willst du ja nicht einfach implizit überschreiben. Oder noch stranger: Du legst zwischenzeitlich eine Karte auf und die Playlist läuft. Aber dann, nach einer gewissen Verweilzeit, wird dann plötzlich die „eigentliche“ Karte gestartet.
b) Wenn man wartet: Wie lange wartet man denn? Die Connect-Zeit ist nicht immer gleich und vor allem von WLAN zu WLAN nicht immer gleich. Ziehen wir da jetzt noch einen Parameter raus?
c) Wie signalisierst du dem Benutzer denn, dass ESPuino auf WLAN wartet? Klar, aktuell sind es vier grüne LEDs. Aber führen wir da neben weiß, grün, gelb und blau noch eine Farbe ein, die sagt: Ich warte auf WLAN wegen Webradio beim Start?
Klar: In der Konsole ist das völlig eingängig, dass ESPuino einen Timeout abwartet. Aber als Benutzer lege ich eine Karte auf und wundere mich, dass vielleicht 10s lang nix passiert. Määäh!

Kurz: Bislang fand ich keinen Lösungsweg toll. Und daher ist es halt so, wie es jetzt ist :slight_smile:.

1 „Gefällt mir“

Aber macht mir gerne Lösungsvorschläge :slight_smile:.
Ich wollte nur mal verdeutlichen: Das ist nicht so trivial und eindeutig lösbar, wie es vielleicht scheint.

Mir ist ein ähnliches Problem wie @bw87 aufgefallen: Ist man im Bluetooth-Modus und legt eine Radio-Karte auf, so schlägt die Wiedergabe beim ersten Versuch fehl. Ich vermute mal, dass es am nötigen Neustart des ESPuino liegt, um wieder in den WLAN-Modus zu wechseln. Wie von @bw87 beschrieben ist das WLAN nicht schnell genug verfügbar, um das Radio abzuspielen.

Könnte man als einfache Lösung in solchen Fällen das WLAN wieder synchron starten? Es würde sich ja nur auf die Bootvorgänge für diese Sonderfälle beziehen. Evtl. könnte man eine Flagge ablegen, die dafür beim nächsten Boot ausgewertet wird.