Vorab:
Diese Platine hat inzwischen einen Nachfolger: ESPuino-miniD32(pro): Lolin D32/D32 pro mit SD_MMC und Port-Expander (SMD).
3d-Bilder
In echt
Warum dieser PCB?
Es gibt verschiedene Hardware-Features, die für einen ESPuino (aus unterschiedlichen Gründen) wünschenswert sind. Wenn man ein ESP32-Develboard verwendet dann ist das bei der richtigen Auswahl (beispielsweise solche von Wemos) ein sehr guter Startpunkt, man hat jedoch immer das Problem, dass irgendwas nicht 100% optimal ist: Mal ist SD nur per SPI angebunden (langsamer als SD_MMC), manchmal ist der Flash-Speicher zu klein (kein OTA möglich), manchmal ist der Stromverbrauch im Deepsleep zu hoch und manchmal reichen die GPIOs nicht etc pp. Um alle positiven Features auf einem PCB zu vereinen, ohne jedoch allzu viel SMD-Löterei auf den Plan zu rufen, habe ich den nachfolgend beschriebenen PCB entworfen. Einen kleinen Nachteil gibt es jedoch auch hier: Ganz ohne SMD-Löterei geht es wegen des Port-Expanders nicht - es sind jedoch auch nicht übermäßig viele Teile. Bei den Widerständen habe ich darauf geachtet, sie mit der SMD-Größe 0805 nicht zu klein werden zu lassen. Weitere Größen: Mosfets => SOT-23 und Port-Expander => TSSOP24.
Konfiguration
- Es gibt für diesen PCB ein eigenes Configfile
settings-lolin_d32_pro_sdmmc_pe.h
und auch einen eigenen HAL, der vialolin_d32_pro_sdmmc_pe
in Platformio aufrufbar ist. Dort ist bereits alles vorkonfiguriert. Plug’n’Play! - [
settings.h
] Ist keine Kopfhörerplatine angeschlossen, so kannHEADPHONE_ADJUST_ENABLE
deaktiviert werden. - [
settings.h
] Aktiviere abweichend von den Voreinstellungen:PORT_EXPANDER_ENABLE
,SD_MMC_1BIT_MODE
und (falls PN5180)RFID_READER_TYPE_PN5180
. - [
settings.h
] Willst du LPCD nutzen, so aktiviere auchPN5180_ENABLE_LPCD
. - [
settings.h
] DeaktiviereRFID_READER_TYPE_MFRC522_SPI
,wenn du PN5180 nutzt. - [
settings.h
] Die Adresse des Port-Expanders ist 0x20 (expanderI2cAddress
).
Features
- Passend für Lolin D32 pro. Achte darauf, einen solchen mit 16 MB Flash zu kaufen, da du sonst das OTA-Feature nicht nutzen kannst. Flash-Speicher bitte nicht verwechseln mit PSRAM; hier sind die üblichen 4 MB mehr als ausreichend.
- Die Peripherie (MAX98357a, SD, Neopixel und (optional) RFID) wird per Mosfet-Schaltung zum Stromsparen im Deepsleep spannungslos geschaltet.
- RFID: primär geeignet für PN5180 via JST-PH 10fach, aber RC522 geht grundsätzlich auch.
- Die Außenmaße sind 94x50mm.
- Port-Expander PCA9555 mit zwei Kanälen à acht Ein/Ausgängen; gesteuert per I2C.
- Maximal fünf Taster, die allesamt über JST-PH 2fach angeschlossen werden und am Port-Expander hängen.
- Drehencoder wird über JST-PH 5fach angeschlossen. Dessen Button (und optional auch DT und CLK durch Schließen der Lötbrücken JP2 und JP3) hängt ebenfalls am Port-Expander. Zum aktuellen Zeitpunkt (11/2021) unterstützt ESPuino DT und CLK am Port-Expander jedoch nicht.
- Die GPIOs (DT und CLK) des Drehencoders werden auch auf den doppelreihigen Pinheader geführt. D.h. wird kein Drehencoder verwendet, so stehen diese GPIOs anderweitig zur freien Verfügung.
- Die GPIOs 0 und 5 werden ebenfalls auf den Pinheader geführt. Sie sind unbeschaltet und können grundsätzlich frei verwendet werden. Speziell GPIO0 ist jedoch mit Vorsicht zu genießen, da ein LOW beim Bootvorgang dazu führt, dass der ESP32 nicht startet.
- LPCD wird optional unterstützt.
- Alle Buttons (und RFID.IRQ), die am Port-Expander angeschlossen sind, können den ESPuino aufwecken. Hinweis: Nur alle oder keiner; selektiv funktioniert nicht.
- Alle Pins des Port-Expanders, die nicht benötigt werden, sind ebenfalls auf den doppelreihigen Pinheader rausgeführt. Dort befinden sich auch mehrere GND-Anschlüsse, 3.3V-Anschlüsse und geschaltete 3.3V (0V bei Deepsleep).
- Ein JST-PH 4fach führt I2C nach außen. Perspektivisch könnte hier z.B. ein I2C-Display angeschlossen werden.
- Ein Reset-Button kann via JST-PH 2fach angeschlossen werden.
- Falls die Kopfhörerplatine verwendet wird, so wird der MAX98357a auf lautlos gestellt wenn ein Kopfhörer eingesteckt ist und umgekehrt. Das Aus- und Einschalten des MAX98357a übernimmt hierbei der Port-Expander über
PA_EN
. Der Port-Expander erkennt auch viaHP_DETECT
, ob ein Kopfhörer eingesteckt ist. - Über die Widerstände R7 und R8 kann der GAIN des MAX98357a gesteuert werden (nicht verwechseln mit der Lautstärkeregelung 0 bis 21 im Betrieb). Vielleicht für den Anfang beide mal weglassen und bei Bedarf entsprechend nachlöten. Deren Bedeutung ist auf dem PCB auf der Vorderseite aufgedruckt. 0R bedeutet: Brücke. (Ich persönlich arbeite mit 3dB, da mir der ESPuino im unteren Bereich sonst nicht leise genug einstellbar ist an einem 4 Ohm-Lautsprecher.)
- PN5180 kann, sofern er mit einer Firmware-Version >=4.1 verwendet wird, den ESPuino auch aufwecken (LPCD, siehe Beschreibung oben). Wie man 4.1 auf den PN5180 kriegt, steht hier. Spoiler: Ist schon ein bisschen Arbeit .
JST-Pinouts
Normalerweise achte ich drauf, dass die Peripherie, die mit JST-PH angeschlossen wird, immer die gleiche Pin-Belegung hat. Bei meinem ersten PCB für den Lolin D32 pro habe ich beim Drehencoder darauf leider nicht geachtet (der Rest ist gleich). Da es ggf. Leute gibt, die von der bisherigen Lolin D32 pro-Plattform auf die neue umsteigen wollen, habe ich den hier beschriebenen PCB auch mit dem gleichen Drehencoder-Anschluss versehen. An der Stelle also der Hinweis: Schau einfach IMMER, dass das Pinout zwischen Stecker und PCB 100% kompatibel ist.
Vorraussetzungen
- Achte beim verlinkten SD-Board darauf, dass der SMD-PullUp-Widerstand (siehe Bild) an GPIO 2 (MISO) entfernt wird, da der ESP32 sonst nicht mehr in den Flashmodus geht (siehe nachfolgendes Bild). Vergisst man das, so kann man die ESPuino-Software (Firmware) aufspielen.
Modus LPCD
- Um LPCD des PN5180 nutzen zu können, wird eine Firmware >=4.1 gebraucht.
- Weiterhin muss die Lötbrücke JP4 auf der Rückseite geschlossen werden. Der Grund dafür ist, dass der PN5180 ständig Interrupts wirft und diese anderweitig nicht benötigt werden. Da die meisten Leute LPCD nicht nutzen werden, wird der ESP32 bei diesen Leuten von den ganzen Interrupts „verschont“.
- Auf der Vorderseite muss ein Jumper auf LPCD gesteckt werden. Nicht vergessen, denn sonst bekommt der PN5180 keine Spannung.
- In der Settings-Datei des Lolin D32 pro muss
RFID_IRQ
auf 106 gesetzt werden. PN5180_ENABLE_LPCD
muss aktiviert werden.
Modus noLPCD
- Firmware-Version spielt keine Rolle.
- Die Lötbrücke JP4 auf der Rückseite bleibt geöffnet.
- Auf der Vorderseite muss ein Jumper auf noLPCD gesteckt werden. Nicht vergessen, denn sonst bekommt der PN5180 keine Spannung.
- In der Settings-Datei des Lolin D32 pro muss
RFID_IRQ
auf 99 gesetzt werden. Ihn auf 106 zu belassen hat in meinen Tests dazu geführt, dass der ESPuino sofort immer wieder aufgewacht ist. PN5180_ENABLE_LPCD
muss deaktiviert werden.
Port-Expander
Zur besseren Erklärung von JP2 bis JP4, hier ein Auszug aus dem Schaltplan:
Pinout
Zur Referenz sei nachfolgend das Pinout beschrieben. Es ist in settings-lolin_d32_pro_sdmmc_pe.h
bereits alles entsprechend voreingestellt. GPIO-Werte zwischen 0 und 39 sind GPIOs des ESP32, solche über 100 zeigen, dass der Anschluss über den Port-Expander PCA9555 erfolgt. Der Port-Expander besitzt zwei Kanäle mit je Pins, die per Software wahlweise beliebig zu Ein- und Ausgängen konfiguriert werden können. Der erste Kanal besitzt bei ESPuino die Nummern 100 bis 107 und der zweite 108 bis 115. Die nicht benutzten Pins (111 bis 115) sind auf einen zweireihigen Pinheader rausgeführt. Deren Nutzen ist aktuell (Stand 11/2021) sehr begrenzt, aber möglicherweise für künftige Anwendungen noch sinnvoll. Gleiches gilt für den I2C-Anschluss.
ESP32 (GPIO) | Hardware | Pin | Kommentar |
---|---|---|---|
MFET 3.3V | SD-Board | 3.3V | |
GND | SD-Board | GND | |
xx | SD-Board | CS | entfällt bei SD_MMC! |
15 | SD-Board | MOSI | |
2 | SD-Board | MISO | |
14 | SD-Board | SCK | |
MFET 3.3V / 3.3V | RFID-Leser | 5V | Ja, 3.3V muss an 5V angeschlossen werden |
MFET 3.3V / 3.3V | RFID-Leser | 3.3V | Obwohl 3.3V schon an 5V hängt, muss es hier auch dran |
GND | RFID-Leser | GND | |
21 | RFID-Leser | NSS | |
23 | RFID-Leser | MOSI | |
19 | RFID-Leser | MISO | |
18 | RFID-Leser | SCK | |
22 | RFID-Leser | RST | |
33 | RFID-Leser | BUSY | |
106 | RFID-Leser | IRQ | Dafür muss die Lötbrücke JP4 geschlossen werden |
MFET 3.3V | MAX98357 | VIN | |
GND | MAX98357 | GND | |
25 | MAX98357 | DIN | |
27 | MAX98357 | BCLK | |
26 | MAX98357 | LRC | |
— | MAX98357 | SD | Info: liegt hier GND an so schaltet MAX auf lautlos |
— | MAX98357 | GAIN | PullUp mit 100k auf 3.3V bewirkt weniger Verstärkung |
34 | Drehencoder | CLK | Tausche CLK mit DT, wenn du die Drehrichtung umkehren möchstest |
39 | Drehencoder | DT | Tausche CLK mit DT, wenn du die Drehrichtung umkehren möchstest |
103 | Drehencoder | BUTTON | |
3.3 V | Drehencoder | + | |
GND | Drehencoder | GND | |
102 | Taster (next) | ||
GND | Taster (next) | ||
100 | Taster (previous) | ||
GND | Taster (previous) | ||
101 | Taster (pause/play) | ||
GND | Taster (pause/play) | ||
104 | Taster 4 | ||
GND | Taster 4 | ||
105 | Taster 5 | ||
GND | Taster 5 | ||
MFET 3.3V | Neopixel | V | |
GND | Neopixel | G | |
12 | Neopixel | DI | |
32 | N-channel Mosfet | Gate | Steuert Mosfet-Schaltung an |
107 | Kopfhörerbuchse | Optional: wenn auf GND gezogen, dann wird eingesteckter Kopfhörer erkannt | |
36 | PCA_Interrupt | xxx | Löst Interrupts ausgehend vom Port-Expander aus und weckt ESPuino auf |
4 | I2C_SCL | xxx | I2C-SCL (wird verwendet von Port-Expander und ist verfügbar über JST-PH 4fach) |
13 | I2C_SDA | xxx | I2C-SDA (wird verwendet von Port-Expander und ist verfügbar über JST-PH 4fach) |
109 | EXT.1 | xxx | CLK des Drehencoders wenn über JP2 aktiviert (gelötet) |
SW 3.3 V | EXT.2 | xxx | Geschaltete 3.3 V zur freien Verwendung |
110 | EXT.3 | xxx | DT des Drehencoders wenn über JP3 aktiviert (gelötet) |
SW 3.3 V | EXT.4 | xxx | Geschaltete 3.3 V zur freien Verwendung |
111 | EXT.5 | xxx | Port-Expander: Ist unbeschaltet und kann frei verwendet werden |
3.3 V | EXT.6 | xxx | 3.3 V zur freien Verwendung |
112 | EXT.7 | xxx | Port-Expander: Ist unbeschaltet und kann frei verwendet werden |
3.3 V | EXT.8 | xxx | 3.3 V zur freien Verwendung |
113 | EXT.9 | xxx | Port-Expander: Ist unbeschaltet und kann frei verwendet werden |
GND | EXT.10 | xxx | GND zur freien Verwendung |
114 | EXT.11 | xxx | Port-Expander: Ist unbeschaltet und kann frei verwendet werden |
GND | EXT.12 | xxx | GND zur freien Verwendung |
115 | EXT.13 | xxx | Port-Expander: Ist unbeschaltet und kann frei verwendet werden |
GND | EXT.14 | xxx | GND zur freien Verwendung |
5 | EXT.15 | xxx | GPIO 5 ist unbeschaltet und kann frei verwendet werden. Achtung: Da hängt eine LED mit drauf, die ggf. zu unvorhergesehenen Effekten führt! |
0 | EXT.16 | xxx | GPIO 0 ist unbeschaltet und kann frei verwendet werden. Achtung: GPIO 0 ist ein Bootstrap-GPIO und darf beim Einschalten des ESP32 nicht LOW sein. Ist er LOW, so geht der ESP32 in den Programmiermodus und verweilt in diesem, bis man ihn spannungslos macht. Hier kann ein 4.7k-PullUp-Widerstand helfen, wie man z.B. hier lesen kann. |
Anmerkungen
- Der JST-PH-Stecker für den RFID-Reader ist 10 Pins breit. Alle Drähte werden für den PN5180 benötigt, für den RC522 jedoch nicht. Da sich kein kleinerer Stecker auflöten lässt, bleiben einige Drähte dann eben unbeschaltet.
- Löte das ESP32-Modul nicht direkt auf den PCB auf, sondern verwende weibliche Konnektoren als Sockel. Die Kontaktierung funktioniert gut.
- PN5180 scheint es ausschließlich in China zu geben. Kostet etwa 7€ und ist damit etwas teurer als der RC522, bietet jedoch auch eine deutlich bessere Reichweite.
Benötigte Teile
Herz dieses PCBs ist der ESP32-WROVER auf einem Lolin D32 pro. Wichtig: Bevor dieser genutzt werden kann, muss zuerst der passende Treiber installiert werden für den USB/seriell-Chip darauf. Vergisst man das, so wird der Lolin D32 pro nicht erkannt beim Anstecken via USB.
Wichtig: Es gibt immer mal Berichte hier im Forum, wonach manche MAX98357a nicht richtig funktionieren. Gib’ mir gerne Feedback mit einem Link, wo du einen funktionierenden ergattert hast. Und gerne auch, wenn es der hier verlinkte nicht tut (ich habe einfach den „Erstbesten“ von AliExpress verlinkt).
Die nachfolgende Liste spiegelt nur Vorschläge wieder. Bestelle die Sachen wo immer du willst und bestelle vor allem die Taster, die dir gefallen.
- MAX98357A
- Verschiedene SMD-Widerstände in SMD-Größe 0805
- Port-Expander PCA9555PW
- Mosfet N-Channel IRLML6244 (z.B. IRLML2502 geht alternativ bestimmt auch)
- Mosfet P-Channel IRLML2244 (z.B. IRLML6401 geht alternativ bestimmt auch)
- µSD-Board (nur für 3.3V!)
- RFID-Leser PN5180
- RFID-Karten
- Neopixel-Ring
- Drehencoder
- Taster
- Lautsprecher
- µSD-Karte: Muss keine super schnelle sein. Mit 32 GB läuft das Ganze auf jeden Fall.
- JSP PH-2.0-Konnektoren
- Weibliche Verbinder
- (optional) IDC-Verbinder weiblich 6pin für Kopfhörerplatinen-Anschluss
- (optional) IDC-Verbinder männlich 6pin ür Kopfhörerplatinen-Anschluss
- (optional) Mikroschalter
- (optional) LiPo-Akku
Teileliste
- 1x IRML6244 (N-channel MOSFET) (SMD SOT23)
- 1x IRML2244 (P-channel MOSFET) (SMD SOT23)
- Port-Expander PCA9555PW (SMD TSSOP24)
- 1x 1k Widerstand (SMD 0805)
- 2x 4.7k Widerstand (SMD 0805)
- 1x 10k Widerstand (SMD 0805)
- 3x 100k Widerstand (SMD 0805)
- 6x JST-PH2.0-Konnektor (2 Pins) (ggf. auch weniger, wenn keine fünf Buttons und/oder kein Reset)
- 1x JST-PH2.0-Konnektor (3 Pins) (für Neopixel)
- 1x JST-PH2.0-Konnektor (4 Pins) (kann weggelassen werden, wenn kein externer I2C-Anschluss gebraucht wird)
- 1x JST-PH2.0-Konnektor (5 Pins) (für Drehencoder)
- 1x JST-PH2.0-Konnektor (10 Pins) (für RFID)
- Weibliche Verbinder zum Sockeln des Lolin32 (2,54 mm)
- Männliche Pinheader für Jumper (2,54 mm) (wichtig!)
- Männliche Pinheader (doppelreihig) für unbelegte Port-Expander-Pins (2,54 mm)
- 1x Jumper (2,54mm) (um RFID-Modus zu konfigurieren; wichtig!)
- 1x 100uF Kondensator zur Spannungsstabilisierung => Einlöten zwischen EXT.8 (+) und EXT.10 (-)
Interesse?
Falls du Interesse an einem solchen PCB hast, dann melde dich bei mir. Auch viele Teile, die man so zum Bau des ESPuinos braucht, habe ich normalerweise auf Lager, so dass du nicht bei zehn Händlern Ware bestellen musst. Was grundsätzlich jeder jedoch selbst besorgen muss, das ist Lolin D32 pro, Neopixel, Drehencoder, MAX98357a, Lautsprecher und die Buttons.
Kann man da einen Kopfhörer anschließen?
Nein, aber mit der passenden Kopfhörerplatine dazu geht es: Kopfhörerplatine basierend auf UDA1334 / PJ306b.
Probleme?
Dafür gibt es dieses Forum hier. Schreib’ uns einfach!
Ggf. hilft auch das: Lolin D32 Pro Upload - Timeout
SMD-Löten
Zum SMD-Löten gibt es auf Youtube zahlreiche Tutorials, bei denen man auf unterschiedlichen Wegen zum Ziel kommt.
- Herkömmlich per Lötkolben - auch schwierige Sachen
- Reflow mittels heißer Luft
- Reflow im Reflow-Ofen bzw. in der Pfanne
Ich persönlich setze eine solche Lötstation ein und löte speziell so etwas wie den Port-Expander mittels Lötpaste und heißer Luft (Reflow). Eine gute Pinzette braucht es für die SMD-Teile auf jeden Fall noch, da sie zu klein zum Greifen sind. Traue dich einfach mal - es gibt auch Übungsplatinen! In vielen Videos ist auch beschrieben, wie man mit Problemen wie dabei entstandene Lötbrücken umgeht (z.B: das hier).
Hier ein paar Dinge, die ich inzwischen gelernt habe:
- Bei bleihaltiger Lötpaste besteht eher die Chance, dass sich ein nicht so gut platziertes Bauteil korrekt in Position schiebt. Ist so ein bisschen wie beim herkömmlichen Löten, da tut man sich mit Blei auch einfacher.
- Die dünnste Lötspitze ist eher nicht die beste, da vergleichsweise wenig Wärme übertragen werden kann.
- Darauf achten, die Bauteile nicht zu grillen. Bevor ich anfange das zu beschreiben: Am besten bei Youtube Videos anschauen.
- Als bleifreie Lötpaste wird gerne mal PPD S600 mit 183°C-Schmelzpunkt empfohlen.
- Als bleihaltige Lötpaste mit 183°C-Schmelzpunkt wird gerne mal Mechanic XG50 empfohlen.
- Lötpaste hat, wenn man es mit einer Spritze aufträgt, gerne die Angewohnheit, dass es nicht auf der Platine haften will, sondern an der Nadel bleibt. Was hier hilft, ist die Platine (z.B. mit heißer Luft) vorher zu erwärmen.
- Lötpaste nach Gebrauch immer im Kühlschrank aufbewahren und vor Gebrauch entsprechend auf Zimmertemperatur erwärmen, da es sich sonst schlechter verarbeiten lässt.
- Flussmittel bereithalten (z.B. bei AliExpress mal nach „Solder Flux“ suchen). Zum klassischen SMD-Löten per Lötkolben braucht man es eh. Aber wenn man z.B. beim Reflow-Löten Brücken hat, so kann man diese wunderbar mit Flussmittel benetzen und anschließend durch drüberziehen des Lötkolbens entfernen (wird auch oft in Youtube-Videos gezeigt).
- Das Auftragen von Lötpaste muss gar nicht so supergenau sein. Speziell beim Einlöten des o.g. Port-Expanders trägt man einfach eine dünne „Wurst“ quer zu den Kontaktflächen auf. Beim Reflow-Löten läuft das anschließend passend hin. Trägt man allerdings deutlich zu viel auf, so muss man im Anschluss viele Brücken entfernen. Klar, ist zusätzliche Arbeit, aber auch keine große Sache.
Ansonsten hier nochmal in ausführlicher: 📗 (SMD-)Löten.
Wie wird das Ganze in Platformio eingerichtet?
Grundsätzliche Infos zur Einrichtung gibt es hier: 📗 Einrichtung von Visual Studio Code mit Platformio. Im Anschluss sind insbesondere zwei Punkte wichtig.
-
Ganz unten im Fenster von VSC, etwas außerhalb der Mitte auf der linken Seite, steht irgendwas mit „env:…“. Das kann man anklicken, so dass dort „env_lolin_d32_pro_sdmmc_pe“ steht. Passend dazu muss links oben der zugehörige Project Task ausgewählt werden, wobei das glaube ich automatisch geht, wenn man unten das Profil wechselt.
Und noch der Project-Manager:
-
Die ganzen Profile, die man unten (und in Project Tasks) auswählen kann, sind in der Datei
platformio.ini
hinterlegt. Suche dort mal nach dem zugehörigen Profil und schaue dirmonitor_port
undupload_port
an. Das ist der Port, über den der Lolin D32 pro per USB erreichbar ist. Das, was dort aktuell steht, ist auf meine Bedürfnisse für Mac OS zugeschnitten. Unter Windows könnte das irgendwas mit COM (z.B. COM3) sein und unter Linux z.B. /dev/ttyUSB0. Eine Möglichkeit ist es, beide Zeilen mal auszukommentieren und zu testen, ob es dann schon von selbst geht. Tut es das nicht, muss man den passenden Port für sein System recherchieren. Achtung: Dieser Port kann sich auch ändern!
Ok, ESP32 ist geflasht. Wie geht es nun weiter? Gibt es Dokumentation?
Aber klar!
- Im Speziellen: 📗 Der erste Start deines ESPuino.
- Im Allgemeinen: Anleitungen - ESPuino :: Rfid-controlled musicplayer.