📗 Was/wie muss verdrahtet werden?

Vorab

Wenn du dich mit dem ganzen Thema nicht näher beschäftigen willst, dann empfehle ich dir diese Platine: ESPuino-mini 4Layer. Diese kannst du direkt von mir beziehen - ich supporte sie entsprechend auch. Bezeichner sind aufgedruckt, so dass der Anschluss der Peripherie eigentlich selbsterklärend ist. Insgesamt dürfte es auch die günstigste + kompakteste Variante sein, da bereits alles aufgelötet ist.
Es gibt auch noch weitere Platinen, aber die meisten davon können als veraltet angesehen werden: PCBs - ESPuino :: Rfid-controlled musicplayer.

Allgemein

Wenn du dich selbst an ein Platinendesign heranwagen möchtest, dann bedenke dies: 📗 Die GPIOs des ESP32: Welche eignen sich für was?.

Ansonsten ist diese Frage gar nicht leicht zu beantworten, denn sie hängt von verschiedenen Faktoren ab:

  • Welches Develboard wird verwendet?
  • Welcher RFID-Reader wird verwendet?
  • Ist der RFID-Reader per SPI oder I2C angebunden?
  • Wird für SD-Anbindung SPI (würde ich nicht empfehlen!) oder SD_MMC verwendet?
  • Soll die Peripherie mit 3,3 V oder 5 V versorgt werden?
  • Wird eine SPI-Instanz verwendet oder deren zwei? An der Stelle der Hinweis, dass der Betrieb mit einer SPI-Instanz zwar GPIOs spart, jedoch bisher nicht gut getestet ist!
  • Wird ein Port-Expander verwendet?
  • Und und und…

Beispiel für 2 SPI-Instanzen und RC522 als RFID-Leser

Bitte beachte: Es ist wirklich nur ein Beispiel. Die tatsächliche Konfiguration hängt von deinem verwendeten Develboard / Platine ab.
Hinweis: SPI zur SD-Anbindung würde ich inzwischen nicht mehr empfehlen, da es langsamer ist als SD_MMC und vor allem auch immer wieder zu Problemen beim Datentransfer führt (bei Arduino2 ist das Problem mit dem Datentransfer behoben). Der Punkt mit der Geschwindigkeit sollte dir nur dann egal sein, wenn du die Daten immer am Computer auf die SD-Karte schreibst und nicht via WLAN zum ESPuino kopierst.

ESP32 (GPIO) Hardware Pin Kommentar
3.3 (5) V SD-Board VCC Anschluss an Source des P-Channel-Mosfets
GND SD-Board GND
15 SD-Board CS
13 SD-Board MOSI
16 SD-Board MISO
14 SD-Board SCK
3.3 V RFID-Leser 3.3V Wird über P-Channel-Mosfet aus/eingeschaltet, wenn µC im Deepsleep ist
GND RFID-Leser GND
21 RFID-Leser CS/SDA
23 RFID-Leser MOSI
19 RFID-Leser MISO
18 RFID-Leser SCK
5 / 3.3 V MAX98357 VIN Wird über P-Channel-Mosfet aus/eingeschaltet, wenn µC im Deepsleep ist
GND MAX98357 GND
25 MAX98357 DIN
27 MAX98357 BCLK
26 MAX98357 LRC
MAX98357 SD MAX wird abgeschaltet, wenn dieser Pin auf GND gezogen wird
34 Drehencoder CLK Möchtest du die Drehrichtung ändern, so tausche mit DT (geht aber auch in Software)
35 Drehencoder DT Möchtest du die Drehrichtung ändern, so tausche mit DT (geht aber auch in Software)
32 Drehencoder Taster
3.3 V Drehencoder +
GND Drehencoder GND
4 Taster (next)
GND Taster (next)
2 Taster (previous)
GND Taster (previous)
5 Taster (pause/play)
GND Taster (pause/play)
3.3 V Neopixel V Wird über P-Channel-Mosfet aus/eingeschaltet, wenn µC im Deepsleep ist
GND Neopixel G
12 Neopixel DI
17 N-channel Mosfet Gate
33 Spannungsteiler / BAT Optional: Spannungsteiler um Batteriespannung zu messen. Hinweis: Bei manchen Lolin-Boards wird GPIO35 verwendet und ist nicht änderbar.
22 Kopfhörerbuchse Wenn auf GND gezogen, so wird die Kopfhörerlautstärke aktiviert

SD_MMC statt SPI

Es werden nur drei GPIOs (statt vier bei SPI) benötigt, dafür sind diese jedoch NICHT änderbar. D.h. es muss immer 2, 14, und 15 sein. Achtung: GPIO2 wird verwendet. Dieser darf vom µSD-Board nicht mit einem Pullup-Widerstand auf 3,3 V gezogen werden, da der ESP32 sonst nicht mehr in den Flash-Modus geht. Im laufenden Betrieb wird der Pullup dann wieder gebraucht, er wird jedoch intern über den ESP32 zugeschaltet. Das bedeutet, dass ein bereits vorhandener PullUp-Widerstand ggf. entfernt werden muss:

ESP32 (GPIO) Hardware Pin Kommentar
SD-Board CS Wird nicht benötigt
15 SD-Board MOSI
2 SD-Board MISO Stelle sicher, dass kein Hardware-Pullup für MISO vorhanden ist!
14 SD-Board SCK

Stelle sicher, dass SD_MMC_1BIT_MODE aktiviert ist und dass SINGLE_SPI_ENABLE nicht aktiviert ist. Weitere Infos zu SD_MMC findest du hier.
Überprüfe deine GPIO-Konfiguration (doppelt) und stelle sicher, dass auf GPIO2 z.B. kein Taster konfiguriert ist!

RFID-Leser PN5180 anstelle von RC522

PN5180 bringt in erster Linie eine erheblich bessere Reichweite, benötigt aber auch mehr GPIOs. Ab Firmware-Version 4.1 ist es auch möglich, mit diesem den ESPuino aufzuwecken (dafür ist jedoch ein weitere GPIO (IRQ) notwendig. Das Feature nennt sich: LPCD. Bestellt man den PN5180 in China (aktuell gibt es diesen nur dort), so wird er in Version 3.5 geliefert und muss erst geflasht werden. Hier das geht steht hier: GitHub - abidxraihan/PN5180_Updater_ESP32: PN5180 Firmware Updater Using ESP32

ESP32 (GPIO) Hardware Pin Kommentar
3.3 V PN5180 RFID-Leser 3.3V Entweder an Mosfet oder direkt an GPIO17 anschließen
3.3 V 3.3V Soll LPCD genutzt werden, so muss dieser Pin immer an Spannung hängen und darf im Deepsleep NICHT abgeschaltet werden.
5 / 3.3 V PN5180 RFID-Leser 5V Auch dieser Pin muss an 3.3 V angeschlossen werden (oder 5 V)
GND PN5180 RFID-Leser GND
21 PN5180 RFID-Leser CS/SDA Wie RC522
23 PN5180 RFID-Leser MOSI Wie RC522
19 PN5180 RFID-Leser MISO Wie RC522
18 PN5180 RFID-Leser SCK Wie RC522
16 PN5180 RFID-Leser BUSY stelle sicher, dass dieser GPIO nicht anderweitig belegt ist. Bei WROVER gibt es diesen z.B. nicht.
22 PN5180 RFID-Leser RST stelle sicher, dass dieser GPIO nicht anderweitig belegt ist.
39 PN5180 RFID-Leser IRQ Optional, wenn LPCD genutzt werden soll
1 „Gefällt mir“

Hallo, auf welche Pin legt man dann den Button aus folgender Tabelle?

Wäre vielleicht hilfreich direkt die Tabelle anzupassen, wozu noch SD über SPI angeben, wenn es sowieso nicht empfohlen ist. :slight_smile:

Bei SD-SPI werden ja (z.B.) gemäß obiger Tabelle 15, 13, 16 und 14 verwendet.
14 und 15: Brauchst bei SDMMC weiterhin.
16: Wäre eine Möglichkeit, aber gibt’s bei ESP32-WROVER nicht.
13: Sieht gut aus.

Weil manche Leute gerne den SD-Reader verwenden, den sie schon daheim rumliegen haben. Die Sache mit dem Problem beim Datentransfer ist bei Arduino2 auch obsolet. Insofern beschreibe ich halt beide Varianten.
Für die SDMMC-Variante kann man auch den Schaltplan der mini4L nehmen; der ist dort verlinkt.