Zuerst mal musst du dir über dieses Thema nicht notwendigerweise Gedanken machen. Es gibt bereits verschiedene fertige Platinen: PCBs - ESPuino :: Rfid-controlled musicplayer. Ansonsten bedenke dies: 📗 Die GPIOs des ESP32: Welche eignen sich für was?. Wenn du dich mit dem ganzen Thema nicht näher beschäftigen willst, dann empfehle ich dir diese Platine: ESPuino-miniD32(pro): Lolin D32/D32 pro mit SD_MMC und Port-Expander (SMD). Diese kannst du auch teilweise oder komplett fertig gelötet direkt bei mir erhalten - ich supporte sie entsprechend auch.
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 RIFD-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. Dieser Punkt 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 |