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