Umstieg auf ESP32-Arduino 2.x

Da hat sich im Wifi-Bereich vermutlich viel getan, die FritzBox erkennt ESPuino dann als neues Gerät. Normalerweise wird das im Router über die MAC-Adresse geregelt, aber vielleicht spielen hier auch neue Verschlüsselungsmethoden eine Rolle (WPA2-3). Ein Umstieg mal eben so scheint nicht so einfach. Versuche das noch genauer einzugrenzen…

Ich denke ich werde zu Arduino2 mal eigenen Branch aufmachen. Dann kann man da leichter testen. Also für mich sieht das schon ganz gut aus, aber der geringe SD-Durchsatz gefällt mir nicht.

@tueddy kannst das bei dir auch mal testen? Wobei kann natürlich sein, dass sich der ESP32 gestern im Access-Point ein Stockwerk höher eingebucht hat (obwohl der Router nur 1m entfernt steht). Das weiß ich jetzt nicht mehr so genau.

Es gibt jetzt auch ein offizielles Release:

1 „Gefällt mir“

Sind ja doch ein paar SD-Verbesserungen gelistet. Hmm, vielleicht hat das mit dem geringen SD-Durchsatz auch einfach was mit falschen Task-Prioritäten zu tun.

Vielleicht teste ich heute einfach mal SD via SPI. Also einerseits, wie es da mit Durchsatz ausschaut und vor allem, ob die Fehler weg sind.

SPI und Wire scheinen jetzt, @Wolle hatte sie ja auch schon auskommentiert, irgendwie integriert zu sein. Der Port-Expander auf meinem Lolin D32pro SDMMC PE-PCB hat auf jeden Fall funktioniert.

FastLED hat jetzt auch einen Bugfix für Arrduino 2.0.1 veröffentlicht. Damit funktioniert die NeoPixel Ansteuerung in beiden Version einwandfrei, gerade getestet. @biologist kannst Du die Bibliothek neu pinnen?
Das klappt jetzt Alles, aber die Wifi-Probleme sind noch ein absoluter Showstopper für den Umstieg! Die haben da definitiv etwas vermurkst. Meine FritzBox als Ursache kann ich mittlerweile ausschließen.

@tueddy Danke für den Hinweis!
Sieht gut aus und ich habe es direkt gepinnt. Es ist nicht perfekt, also im Bereich der leuchtenden LEDs meine ich, ab und zu mal ganz kurz etwas Bläuliches aufflackern zu sehen. Aber das ist erheblich weniger als vorher. LEDs, die nicht leuchten, haben bei mir auf jeden Fall nicht mehr geflackert.

Es gab heute ein größeres Update im Arduino master, hatte gehofft das die WLAN Verbindungsprobleme behoben sind, vor allem hier und hier. Es kompiliert aber die WLAN Verbindung ist genauso schlecht wie im 2.0.1 release. Da müssen wir wohl noch warten bis das wieder klappt.
Um sicher zu sein das hier wirklich das aktuelle IDF verwendet wird habe ich in main.cpp die Ausgabe

    Serial.print(F("ESP-IDF-version (major): "));
    Serial.println(ESP_IDF_VERSION_MAJOR);
    Serial.print(F("ESP-IDF-version (minor): "));
    Serial.println(ESP_IDF_VERSION_MINOR);

ersetzt durch

Serial.println("ESP-IDF version: " + String(esp_get_idf_version()));

Dann kommt das kürzer und genauer raus:

ESP-IDF version: v4.4-beta1-183-gf23dcd3555

@biologist evt. kannst Du das in einem der nächsten Update ersetzen.

Fazit: Umzug noch nicht reif, abwarten und Tee trinken…

Was genau ist schlecht?

Beim Starten von ESPuino wird ja ein Timeout für WLAN verwendet. Im Arduino Core gab es längere Zeit einen Bug, sodass nicht alle Kanäle gescannt wurden, um sich mit dem stärksten WLAN zu Verbinden. Aktuell wird das aber nun gemacht und damit braucht die initiale Verbindung deutlich länger. Eventuell hilft da schon das Erhöhen des Timeouts.

Ja Timeout habe ich erhöht auf 15 Sekunden. Alle Verbindungen in der FritzBox vorher gelöscht. Es kommt keine WLAN-Verbindung zustande, ESPuino wechselt dann in AP Modus, Reset, Neueingabe der WLAN Zugangsdaten hilft auch nicht… Kurzum ich kann keine Verbindung herstellen. Wechsel zurück auf 1.0.6: Verbindung ist sofort da (<2 Sekunden). Hast Du den Master ausprobiert? Klappt das bei Dir?

Bezogen auf ESPuino habe ich es noch nicht getestet, aber ich habe aktuell ESP-IDF 4.4 beta1 und Arduino als Komponente (master von heute) für ein anderes Projekt vor mir. Dort läuft Wifi ohne Probleme mit einem Unifi AP. Wir benutzen Wifi allerdings explizit ohne den Flash Storage vom Wifi-Treiber. Das könnte auch noch einen Unterschied machen. Dafür ruft man „WiFi.persistent(false);“ vor den anderen WiFi-Funktionen auf. Wer weiß schon, was er sich für zuvor gespeicherte Informationen aus dem Flash zaubert.

Klar, kann ich eintragen.

Mittlerweile ist Arduino 2.0.2 veröffentlicht, bringt aber leider keine Verbesserungen im Wifi-Bereich. Es bringt wohl auch einen neuen Bug bei der SD-Ansteuerung mit.

@tuniii Habe hier wirklich Alles probiert, NVS gelöscht, mehrfach neu verbunden. Hatte auch einen neues jungfräuliches Board sowie neben meinen TTGO-T18 Board jetzt auch einen Lollin-D32 Pro angehängt.

Die WIFI-Verbindung ist mit Arduino 2.x in diesem Projekt nicht akzeptabel zu 1.06.

Selbst wenn es sich mit dem Router verbindet ist die Performance sehr schlecht. Also aus meiner Sicht ist das Release leider noch nicht reif. Mal schauen was da noch so kommt…

Auch mit einem simplen Wifi-Sketch, oder hast du das nur mit ESPuino getestet?

Ich habe das bisher tatsächlich nur mit dem ESpuino Code getestet, denn da ist es ja entscheidend.

Aber da ich das hier reproduzierbar habe kann ich das die nächsten Tage auch einmal mit dem Minimal Sketch ausprobieren und berichten…

Ich konnte die Wifi-Verbindungsprobleme nun endgültig lösen mit diesem Arduino Fix/PR. Verbindungsaufbau dann genauso gut wie in 1.0.6. Bei mir < 3Sek und stabil. Der Fix wird wohl auch bald in einem offiziellen Release erscheinen.
@tuniii wundert mich warum die Probleme bei Dir nicht auftreten. Du verwendest ja Arduino als Komponente, sollte da nicht der gleiche Code für den Verbindungsaufbau verwendet werden? Aber vielleicht liegt es ja auch am Router, hier eine FRITZBox 7590 mit ca. 10m Entfernung, RSSI recht gut da Altbau und kein Beton dazwischen…

Was noch bleibt ist die schlechtere SD Geschwindigkeit. Komme hier nicht über 180KB/s im SD_MMC Modus hinaus. Habe auch diesen Fix eingespielt, da war auch noch was vermurkst. Das ist aus meiner Sicht noch ein Showstopper für einen Umstieg. @biologist hatte die gleich Messung, wie könnte man das noch lösen?

@tueddy Da muss ich dir jetzt echt mal ein großes Danke aussprechen, dass du die ganze Zeit bei den Neuigkeiten so am Ball bleibst und das hier immer berichtest :+1: :+1: :+1: .

Wenn man den Webtransfer macht, dann landet das ja über einen Ringpuffer auf der SD. Der Ringpuffer ist zum Schreibzeitpunkt immer sehr unterschiedlich gefüllt. Hier hatte ich ja mal die Idee aufgeworfen (auch im Zuge der spontanen Schreibabbrüche bei SPI-SD), dass man hier schaut, dass man immer mindestens 4k im Ringpuffer hat, so dass man immer 4k-Blöcke schreiben kann. Keine Ahnung ob das was ändert, aber wäre ggf. ein Ansatz. Ich hatte mir das immer vorgenommen zu entwickeln, aber final dann doch nie umgesetzt.
Sonst habe ich spontan keine Ideen. Vielleicht hat @tuniii ja noch welche.

Ja, der Code ist der gleiche, aber das Problem wird wohl netzwerkspezifisch sein. Wenn es ein generelles Problem wäre, dann hätte es der Bug vermutlich nicht in das Release geschafft.

Hast du irgendwo einen Branch mit deinen Änderungen (Upgrade auf den neuen Core)? Ich würde mir gerne mal den Stand anschauen.

@tuniii ich verwende den originalen ESPuino Code und wechsle von Arduino 1.0.6 auf 2.0.2 nur durch umschalten dieser Zeilen in der Platform.ini von 1.0.6

[env]

platform = espressif32 
;platform = https://github.com/platformio/platform-espressif32.git#feature/arduino-upstream

platform_packages =
	;platformio/framework-arduinoespressif32 @ https://github.com/espressif/arduino-esp32.git
	platformio/framework-arduinoespressif32 @ https://github.com/espressif/arduino-esp32.git#1.0.6

auf 2.0.2/master:

[env]

;platform = espressif32 
platform = https://github.com/platformio/platform-espressif32.git#feature/arduino-upstream

platform_packages =
	platformio/framework-arduinoespressif32 @ https://github.com/espressif/arduino-esp32.git
	;platformio/framework-arduinoespressif32 @ https://github.com/espressif/arduino-esp32.git#1.0.6

Den noch austehenden Fix für Wifi habe ich direkt im 2.0.2 Core eingebaut, danach klappt der Verbindungsaufbau auch wieder zuverlässig.
Ich habe in der FritzBox 7590 die Verschlüsselung WPA3/WPA2 eingestellt. Neuere Geräte verbinden sich mit WPA3, ältere mit WPA2. Evt. ist das die Ursache? Ich meine aber das testweise auf reines WPA2 umgestellt zu haben…

1 „Gefällt mir“

Ich hab nun mal mit dem Arduino Core 2.0.2 (master) getestet.

  • NeoPixel bleibt dunkel

  • Das Abspielen von Musik verursacht einen Reset. Vermutlich wird das durch deine Änderung bezüglich SdCard.cpp oben behoben.

  • Bei Wifi mit Timeout-Loop auf 20 starte ich sporadisch im AP, ansonsten funktioniert Wifi. Aber die häufigen Verbindungsabbrüche beim Testen mag der AP nicht unbedingt und daher kann das auch der Grund sein, warum ich sporadisch mit AP starte.

  • Bei einem reinen Schreibtest komme ich mit MMC auf: Alter Core 404 kByte/s, neuer Core 440 kByte/s

  • Bei einem reinen Wifi-Durchsatz-Test, ohne die Daten rauszuschreiben: Alter Core 361 kByte/s, neuer Core: 260 kByte/s

  • Upload-Test über HTTP: Alter Core: 332 kBytes/s, neuer Core 229 kByte/s. Beide ca. 30 kByte/s unter dem Wifi-Durchsatz.

Der Wifi-Durchsatz scheint wohl beim neuen Core das Problem zu sein. Wie sieht es bei dir beim NeoPixel aus? Bleibt der auch dunkel?

Der neue Core bringt wohl so einige Probleme mit sich.

1 „Gefällt mir“

Hat ein wenig gedauert bis ich das jetzt erneut testen konnte mit

ESP-IDF version: v4.4-beta1-189-ga79dc75f0a

Der NeoPixel läuft einwandfrei, ich verwende FastLED mit dem aktuellen Release 3.5.0