An verschiedenen Stellen wurde bereits erwähnt, dass ein ESP32-WROVER Vorteile haben kann gegenüber einem ESP32-WROOM. Um das Ganze transparenter zu machen für eine etwaige Kaufentscheidung, habe ich mich dazu entschlossen, hierzu mal ein paar Dinge auf einen Blick zusammen zu schreiben.
Was ist WROVER oder WROOM?
Der Mikrocontroller ESP32 ist erstmal ein ziemlich kleiner SMD-Chip im QFN-Format. Um mit ihm arbeiten zu können, ist ein bisschen was an Schaltungsaufwand notwendig. Um diese Barriere zu denken, bietet der Hersteller des ESP32 (Espressif) Module an, die, je nach Modell, WROOM oder WROVER bezeichnet werden. Sie beinhalten beispielsweise einen Quartz, eine Antenne, diverse Kondensatoren, Spulen, Widerstände, Flash-Speicher und ggf. PSRAM. Diese Module gibt es weiterhin in verschiedenen Ausführungen:
- 4, 8 oder 16 MB Flash
- 0, 2, 4 oder 8 MB PSRAM
- ggf. Anschlussmöglichkeit für externe Antenne
- ggf ohne Antenne
Arbeitsspeicher
Bei einem Mikrocontroller ist der vorhandene Speicher oft nicht so üppig, wie man ihn gerne hätte. Zwar ist der ESP32 eh schon sehr gut ausgestattet, jedoch ist das ESPuino-Projekt inzwischen so umfangreich, dass es hier und da durchaus eng werden kann. Hier kommt der PSRAM ins Spiel. Wenn der interne Speicher (statischer RAM oder Heap) knapp wird, kann alternativ PSRAM benutzt werden. Angebunden wird er über SPI. Das ist insofern wichtig zu wissen, weil dies langsamer ist, als die reguläre Speicheranbindung. Für die meisten Zwecke ist das egal, aber beispielsweise für den FTP-Server des ESPuinos macht dies keinen Sinn, da der SPI-Flaschenhals hier bremsend wirkt. Der PSRAM ist entweder 4 MB oder 8 MB groß, was im Kontrast zu den üblichen Speicherverhältnissen „fürstlich“ ist. Genau genommen weiß ich beim ESPuino gar nicht, wo ich mit so viel Speicher hin soll .
Flashspeicher
Beim WROOM hat man üblicherweise 4 MB Flashspeicher - beim WROVER bis zu 16 MB. Es gibt jedoch auch WROVER mit nur 4 MB Flashspeicher und aber auch WROOM mit 16 MB Flashspeicher. Letztgenanntes habe ich auf Develboards aber noch nie gesehen. Der Vorteil eines großen Flashspeichers ist, dass man OTA-Feature nutzen kann. Hier lässt sich ein Firmware-Image auch per WLAN aufspielen, was bei ESPuino über die WebGUI erfolgt. Hintergrund ist, dass das Image zuerst zwischengespeichert werden muss. Und da die Firmware mit etwa 2,1 MB Größe nicht doppelt in einen 4 MB großen Flashspeicher passt, sollte man besser einen ESP32 mit mind. 8 MB Flashspeicher haben, wenn man dieses Feature nutzen möchte.
An welchen Stellen wird PSRAM von ESPuino genutzt?
Achtung, jetzt wird es technisch
-
Der Datenaustausch zwischen WebGUI und ESPuino erfolgt über JSON. D.h. wenn der Dateibrowser Dateien angezeigt, dann müssen diese in den Speicher des JSON-Objektes passen. Nachdem es verschiedene Probleme mit dem verbleibenden Heap-Speicher gab, werden beim WROOM inzwischen 8 kBytes an statischem Speicher allokiert. Reicht dieser Speicher nicht, dann kommt es zu Problemen bei der Anzeige. Ist PSRAM verfügbar, so werden hier 64 kB aus dem PSRAM allokiert und das könnte man auch noch beträchtlich vergrößern bei Bedarf.
-
Wird eine Karte aufgelegt, so wird eine Playlist generiert (zweidimensionales Array). Der Speicher dafür wird normalerweise dynamisch aus dem Heap allokiert, weswegen viele Dateien auch problematisch werden könnten. Beim WROVER wird PSRAM benutzt - hier kann man aus dem Vollen schöpfen.
-
Die Instanz, die sich um das Abspielen der Musik kümmert, wird normalerweise aus dem statischen Speicher allokiert. Ist PSRAM verfügbar, so wird dieser anstelle dessen benutzt. Mehr noch: Ist PSRAM verfügbar, so legt die verwendete Lib beim Abspielen eines Webstreams automatisch einen größeren Puffer an, der dazu führen kann, dass es weniger Aussetzer durch Leerlaufen des Puffers gibt.
-
Über die WebGUI gibt es ein Log, welches Ausgaben anzeigt, die man sonst nur in der seriellen Konsole liegt. Die Länge des Logs ist normalerweise 2 kB. Ist PSRAM verfügbar sind es 10 kB und kann bei Bedarf vergrößert werden. Steuerbar ist dies via
platformio.ini
über die DirektiveDLOG_BUFFER_SIZE
. -
Es gibt noch verschiedene kleinere Sachen, für die ebenfalls fakultativ PSRAM (statt Heap) benutzt wird. Um den Code hier einfacher zu halten, gibt es dafür Funktionen, die die Unterscheidung übernehmen.
-
Die Liste wird künftig ggf. noch länger werden…
Hat ein ESP32-WROVER auch Nachteile?
- Durch die SPI-Anbindung des PSRAMs hat man zwei GPIOs (Nummer 16+17) weniger zur Verfügung. Ich gleiche diesen Defizit durch einen Port Expander aus.
- ESP32-Module ohne PSRAM booten 1-2 Sekunden schneller. Zumindest ist mir das beim Lolin D32 positiv aufgefallen.
Warum nicht einfach immer WROVER benutzen?
Die meisten Projekte sind nicht so groß, dass sie PSRAM und/oder viel Flashspeicher benötigen. Da WROOMs zudem etwas günstiger sind vermute ich, dass die Develboard-Hersteller hier einfach auf die Kosten achten und eben die günstigere Variante verbauen, um konkurrenzfähiger sein zu können. Wie auch immer: Mein LiPo-Board und mein FePo-Board besitzen beide WROVER mit 16 MB Flash-Speicher.
Ist die Nutzung eines WROOMs problematisch?
Nein. Ein ESPuino funktioniert auch damit gut. Nur kann es bei Wechsel zwischen Webradio und z.B. Playlists mit vielen Dateien, zu Neustarts kommen, da der Speicher nicht ausreicht. Generell ist man im Handling mit vielen Dateien, auch was den Dateibrowser betrifft, hier etwas limitiert und im Gegenzug mit PSRAM auf der eher sicheren Seite. Man könnte auch sagen: Haben ist besser als brauchen . Aber: Ob PSRAM wirklich Vorteile bringt, hängt letztlich vom eigenen Nutzungsverhalten ab.