Umstieg auf ESP32-Arduino 2.x

Der Schwenk zur neuen Version ist nicht ganz einfach, aber man wird mit etwa 65…70KB zusätzlichem Heap belohnt. Hier möchte ich zeigen, was ich geändert habe.

platformio.ini:

;platform = espressif32
platform = https://github.com/platformio/platform-espressif32.git#feature/arduino-upstream
;SPI
; Wire
;ESP Async WebServer
https://github.com/me-no-dev/ESPAsyncWebServer
;    platformio/framework-arduinoespressif32_106 @ https://github.com/espressif/arduino-esp32.git#1.0.6
    platformio/tool-esptoolpy @ ~1.30100
	framework-arduinoespressif32 @ https://github.com/espressif/arduino-esp32.git#2.0.1-RC1

in der ESP32Encoder.h fehlt die Referenz zu PNCT
#include <soc/pcnt_struct.h>
in SdCard.cpp gibt es Probleme in fileValid() mit strrch()/startWith() das habe ich auskommentiert, keine Ahnung was da ist, führt aber zum Absturz.
außerden abgeändert:

    File fileOrDirectory;
    // Look if file/folder requested really exists. If not => break.
    if(gFSystem.exists(fileName)){
        fileOrDirectory = gFSystem.open(fileName);
    }
    else{
        Log_Println((char *) FPSTR(dirOrFileDoesNotExist), LOGLEVEL_ERROR);
        return NULL;
    }

ab V2.0.0 wird zwischen file.name() und file.path() unterschieden
strncpy(fileNameBuf, (char *) fileOrDirectory.path(), sizeof(fileNameBuf) / sizeof(fileNameBuf[0]));

viele Grüße aus Berlin
Wolle

2 „Gefällt mir“

Hallo @Wolle,
vielen Dank für deine Arbeit. Das schaue ich mir mal genauer an. Ich hatte es vor ein paar Wochen mal kurz versucht und bin dann aber in so viele Fehler gelaufen, dass ich entschieden hatte, erstmal noch ein bisschen Zeit ins Land gehen zu lassen :slight_smile:

So viel freier Heap ist auf jeden Fall ein lohnendes Ziel.

Top! Ich hatte auch schon einen Versuch gemacht, allerdings hatte die Bluetooth-Bibliothek zu viele Fehler. Laut PSchatzmann soll die aber kompatibel sein. Wie hast Du das gelöst?
Vorteil neben mehr Speicher wären auch einige Bugfixes zu SD_MMC und die Möglichkeit im Bluetooth-Modus auch die Lautstärke über ESPuino zu steuern .

Spannend fände ich vor allem mal, ob damit das SPI-Problem beim Upload weg ist. Ich denke in Zukunft wird sich ESPuino immer weiter Richtung SD_MMC verschieben, aber es sind ja doch auch diverse Boards im Umlauf, die SPI verwenden. Das wäre auch schon, wenn das gelöst wäre. Obgleich ich zugebe, dass ich noch keinen Versuch unternommen habe, die Blockgröße beim Schreiben zu vergrößern. Muss ich endlich mal machen.

Ich habe es jetzt auch geschafft, Danke an @Wolle !
Die Bluetooth Bibliothek kompilert jetzt auch.

Ich kann einfach in der Platform.ini umschalten zwischen 1.0.6 und 2.0.1-RC1:

[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#2.0.1-RC1
	platformio/framework-arduinoespressif32 @ https://github.com/espressif/arduino-esp32.git#1.0.6

Größenvergleich der Binaries:

1.0.6:
RAM:   [==        ]  19.3% (used 63140 bytes from 327680 bytes)
Flash: [======    ]  55.2% (used 2136255 bytes from 3866624 bytes)
2.0.1-RC1:
RAM:   [==        ]  17.3% (used 56632 bytes from 327680 bytes)
Flash: [=====     ]  50.8% (used 1963265 bytes from 3866624 bytes)
2 „Gefällt mir“

Das Problem mit dem ESP32Encoder wurde soeben gelöst . @biologist kannst Du die Library neu pinnen?
Im Bluetooth-Modus funktioniert auch die Benachrichtigung von Lautstärke Änderungen.
Weboberfläche kann ich grad nicht testen da sich der ESP nicht mehr mit meinem WLAN verbinden mag. Er springt jetzt immer in den AP Modus. Muss ich mal schauen woran es liegt…

Danke für den Hinweis.
Ich schaue mal, ob ich da heute Abend noch zu komme. Und vielleicht auch, um generell Arduino2 mal zu testen.

WLAN/Weboberfläche funktioniert in 2.0.1-RC1 jetzt auch, das Problem lag bei meiner FritzBox. Ich hatte die Verschlüsselung auf WPA3/WPA2 hochgeschraubt. Nachdem ich die Verbindung in der FritzBox entfernt hatte konnte ich mich neu verbinden. Also kein Problem mit der neuen Version.

@Wolle hatte noch Probleme mit der SDCard Klasse, das kann ich so nicht bestätigen, Alles einwandfrei.

@biologist Wenn Du da dran bist, kannst Du beim Start oder im Log die aktuelle Version mit ausgeben, das man weiß in welchem Film man ist? Also z.B so oder ähnlich.:

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

Es war mir nicht klar, warum der Compiler gemeckert hat, nach „clean all“ läuft es jetzt. Der Quellcode ist in der SD Routine ist völlig in Ordnung.

Klar, kein Problem.

Mir ist noch aufgefallen das sich der NeoPixel falsch verhält in 2.0.1:

Ich verwende einen 12er NeoPixel, bei Lautstärke-Änderung wird diese jetzt verdoppelt angezeigt. Also bei einer Stufe (1.0.6) sind es zwei/mehr Stufen in 2.0.1. Kann das jemand bestätigen? Evt. wurde das Problem in FastLED schon gemeldet. Mit dem aktuellen FastLED master tritt das bei mir noch auf…

So, also ich habe das eben mal getestet.
Also es wird tatsächlich deutlich weniger Heap gebraucht - das ist sehr erfreulich. Was weniger erfreulich ist: Der Datendurchsatz bei SD. Weiß nicht, ob man hier ein bisschen mit den Prioritäten experimentieren muss, aber ich kam da nur so bei knapp über 200 kB/s bei SDMMC raus.

Die Sache mit dem Neopixel kann ich auch bestätigen. Ist irgendwie lustig: Bei 0 sind alle aus (klar), dann drehe ich auf 1 und dann leuchtet eine - kurz darauf sind es 3 (ohne, dass ich was gemacht hätte). Aber gut, ist jetzt weniger wild.

Das habe ich integriert.

Was mir bei Arduino auch noch auffiel war sowas:

Hostname aus NVS geladen: espuino-lolin32dpro
…E (7277) wifi:Association refused temporarily, comeback time 1024 mSec
…Access-Point geöffnet
IP-Adresse: 192.168.4.1

Also immer dann, wenn der WLAN-Connect nicht geklappt hat, kam diese Meldung.

Ja das hatte ich auch. War teils schwierig den ESPuino wieder ans Netz zu bekommen. Habe in der FritzBox die Verbindung gelöscht, damach ging es wieder…

Ja tatsächlich hat der bei mir von der FB sogar eine andere IP bekommen :thinking:

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.