ESP32-Wroom – SPI-Bussystem nutzen


Ziele des Projekts

  • Ver­wen­dung zwei­er SPI-Gerä­te: SD-Kar­ten­le­ser und TFT-Dis­play mit 160×128 Pixeln
  • auf der SD-Kar­te vor­han­de­nen Datei­en auf dem TFT-Dis­play anzei­gen

Info

Sowohl das TFT-Dis­play als auch der SD-Kar­ten­le­ser ver­wen­den den SPI-Bus. Jedes Gerät benö­tigt aber eige­ne Daten­lei­tun­gen. Der ESP32-Wroom ver­fügt über zwei SPI-Bus­sys­te­me, die gleich­zei­tig nutz­bar sind.

VSPI (Stan­dard: Hard­ware SPI-Bus rot mar­kiert)
23 -> COPI (MOSI)
19 -> CIPO (MISO)
18 -> CLK
5 -> CS

HSPI (Soft­ware SPI-Bus gelb mar­kiert)
13 -> COPI (MOSI)
12 -> CIPO (MISO)
14 -> CLK
15 -> CS

Beispiel: Verzeichnis lesen und auf einem TFT mit 160×128 Pixeln anzeigen

Das TFT-Dis­play ver­wen­det HSPI, der SD-Kar­ten­le­ser wird über VSPI ange­steu­ert.

Die Rei­hen­fol­ge der Pins kann unter­schied­lich sein. Ach­te auf die Beschrif­tung der Pins der bei­den Bau­tei­le.

Der Schaltplan

Der Schalt­plan ist sehr kom­plex, daher wird er für die das TFT-Dis­play und den SD-Kar­ten­le­ser getrennt dar­ge­stellt.

SD-Kartenleser

Rei­hen­fol­ge der Pins (VSPI):
schwarz -> GND
rot -> 5V
pink -> 19 CIPO (MISO)
blau -> 23 COPI (MOSI)
braun -> 18 SCK
weiß -> 5 CS

TFT-Display

Rei­hen­fol­ge der Pins (HSPI):
schwarz -> GND
rot -> 5V
gelb -> 4 RST
grün -> 2 DC
weiß -> 15 HSPI-CS
blau -> 13 HSPI-COPI (HSPI-MOSI)
braun -> 14 HSPI-SCK

Benötigte Bibliotheken

Das Programm

Die Pins (HSPI) für das TFT-Dis­play müs­sen defi­niert wer­den, die Pins für den SD-Kar­ten­le­ser ent­spre­chen der Stan­dard­kon­fi­gu­ra­ti­on VSPI und müs­sen nicht dekla­riert wer­den.
Für den SD-Kar­ten­le­ser sind eini­ge Para­me­ter erfor­der­lich:

  • der Typ der SD-Kar­te (3)
  • die Geschwin­dig­keit (SD_SCK_MHZ)
  • der Daten­pin (CSPin)

Beispiel: Fotoschau mit externen SD-Kartenleser

Als TFT-Dis­play kommt ein ⇒TFT mit 480×320 Pixeln zum Ein­satz.

Fotos zum Download

Die Fotos dür­fen maxi­mal das For­mat von 480×320 Pixeln haben und müs­sen im For­mat bmp vor­lie­gen. Du kannst belie­bi­ge Fotos ska­lie­ren und ent­spre­chend abspei­chern.

koeln.bmpoverath_bahnhof.bmplindos.bmpbraunwald.bmpdresden_frauenkirche.bmp
chartres.bmpstrand.bmpberlin_olympia.bmpuni_bonn.bmpduenen.bmp
st_michelle.bmpijlst.bmpmonschau.bmpgaios.bmpkoeln_deutz.bmp

Benötigte Bibliotheken

Die ver­wen­de­te Biblio­thek für das Dis­play mit 480×320 Pixeln kann nicht über die Biblio­theks­ver­wal­tung instal­liert wer­den. Sie muss her­un­ter gela­den wer­den:
https://github.com/prenticedavid/Adafruit_ST7796S_kbv
und mit

Sketch -> Biblio­thek ein­bin­den -> zip-Biblio­thek hin­zu­fü­gen

instal­liert wer­den.

Bibliotheken einbinden und Variable definieren

Der Para­me­ter Beschrei­bung ent­schei­det dar­über, ob eine Beschrei­bung zum Foto ange­zeigt wird. Die Anzei­ge der Beschrei­bung nimmt einen klei­nen Teil des Fotos weg.

Der setup-Teil

Der set­up-Teil star­tet den SD-Kar­ten­le­ser und das TFT-Dis­play. Der erfolg­rei­che Start des SD-Kar­ten­le­sers wird im Seri­el­len Moni­tor und auf dem TFT-Dis­play ange­zeigt.

Der loop-Teil

Jedes Foto muss mit drawBMP an das TFT-Dis­play (tft) mit den x- und y-Koor­di­na­ten des Start­punk­tes über­ge­ben wer­den.
Je nach Zustand des Para­me­ter Beschrei­bung (true/false) wird eine Infor­ma­ti­on zum Foto ange­zeigt.
Die Umlau­te müs­sen mit tft.write() und ⇒hexa­de­zi­ma­len Code defi­niert wer­den.


Quellen


Letzte Aktualisierung: Jan. 2, 2026 @ 10:10

Inhalt