📗 Welche Vorteile bietet ein ESP32-WROVER gegenüber einem ESP32-WROOM (bei ESPuino)?

Hinweis:
Im Prinzip ist der ganze nachfolgende Text spätestens mit dem Wechsel auf Arduino2 hinfällig, da ESPuino nur noch lauffähig ist, wenn PSRAM vorhanden ist und dies ist nur bei WROVER-Modulen der Fall. Mit WROOM-Modulen muss mit Problemen gerechnet werden.

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 :joy: .

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 :slight_smile:

  1. 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.

  2. 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.

  3. 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.

  4. Ü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 Direktive DLOG_BUFFER_SIZE.

  5. 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.

  6. 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.

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?

Inzwischen leider ja, ESPuino auf Arduino2 läuft schlecht bis gar nicht auf einem WROOM. Wer unbedingt WROOM verwenden möchte, sollte bei Arduino1 bleiben. An dieser Stelle jedoch der Hinweis, dass dieses nicht mehr weiterentwickelt wird.

1 „Gefällt mir“