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 |