Hinweis:
Diese Platine ist die Weiterentwicklung der bisherigen mini-Platine. Als gröbstes Unterscheidungsmerkmal kann gesagt werden, dass die bisherige Platine auf ZWEI Kupfer-Layern basierte, während die nachfolgend beschriebene deren VIER besitzt (was man äußerlich erstmal nicht sieht). Dies eröffnet mir die Möglichkeit, je einen eigenen Layer für GND und 3.3 V zu verwenden. Auch zu erwähnen: Nachdem seit einer Weile bereits der µSD-Slot onboard ist, gilt das Gleiche nun auch für den MAX98357a. D.h. es müssen keinerlei Breadboards mehr für MAX98357a und/oder µSD-Slot aufgelötet werden. Das spart Arbeit + Zeit/Aufwand + Müll. Allerdings (siehe Bilder) befinden sich weiterhin die Löcher zum Auflöten eines MAX98357a-Breadboards auf der mini-Platine, so dass ein (optionaler) Stereobetrieb mit zwei Lautsprechern möglich ist, indem man zwei MAX98357a verwendet. Standardmäßig wird jedoch nur ein Lautsprecher verwendet, der beide Kanäle ausgibt.
Ansonsten ist der Funktionsumfang jedoch, abgesehen von der besagten Stereofunktion mit zwei MAX98357a, grundsätzlich gleich. Da es jedoch mit den unterschiedlichen Revisionen der mini langsam unübersichtlich wird, habe ich mich dazu entschlossen, hier einen neuen Thread zu öffnen. Umgangssprachlich werde ich sie jedoch beide „mini-Platine“ nennen, da sie ganz grundsätzlich gleich sind.
Revisions-Historie
- rev3: 01/2023. Änderungen zu rev2.x sind hier beschrieben.
Kompatibilität:
Dieser PCB eignet sich für folgende Develboards:
- Wemos Lolin D32
- Wemos Lolin D32 pro
- D32 pro FePo (meine Empfehlung)
- E32 LiPo
Lolin D32 besitzt im Gegensatz zu den restlichen Develboards zusätzlich die GPIOs 16+17. Sie werden jedoch von der mini-Platine nicht benutzt und somit ist das Ganze vollständig pinkompatibel. Der Nachteil am D32 ist, dass man OTA nicht nutzen kann, weil nur 4 MB Flash vorhanden ist. Der Vorteil ist jedoch, dass der Bootvorgang 1-2 Sekunden schneller ist, da kein PSRAM verbaut ist.
Bitte beachten, dass für den D32 (im Gegensatz zu allen anderen drei) immer das Profil settings-lolin_d32_sdmmc_pe.h
verwendet werden muss.
Einstellungen auf die Schnelle / Kurzfehlersuche:
Weiter unten sind alle Einstellungen im Detail beschrieben, aber hier in einer Kurzzusammenfassung alle Änderungen, die mindestens vorgenommen werden müssen, um diese Platine erfolgreich in Betrieb zu nehmen:
- Als Profil muss lolin_d32_pro_sdmmc_pe gewählt werden in Platformio für Wemos Lolin D32 pro, D32 pro FePo und auch E32 LiPo. Nur für den Wemos Lolin D32 entsprechend abweichend settings-lolin_d32_sdmmc_pe.h - das gilt auch auf die nachfolgenden Punkte.
- In
settings.h
mussPORT_EXPANDER_ENABLE
aktiviert werden. Siehe hier. - In
settings-lolin_d32_pro_sdmmc_pe.h
muss POWER von 32 auf 115 geändert werden. - In
settings-lolin_d32_pro_sdmmc_pe.h
muss INVERT_POWER aktiviert werden. - Solltest du das Stereo-Feature (zwei MAX98357a) verwenden dann achte drauf, dass
PLAY_MONO_SPEAKER
auskommentiert ist.
Ist von den beschriebenen Einstellungen (1-4) auch nur eine falsch konfiguriert, so wirst du in der seriellen Konsole mind. eine solche Fehlermeldung kriegen:
[E][SD_MMC.cpp:85] begin(): Failed to initialize the card (263). Make sure SD card lines have pull-up resistors in place.
Achte auch darauf, dass für den Start zwingend die µSD-Karte eingelegt werden muss. Vergisst du das, so kommt die gleiche Fehlermeldung.
Bilder:
SMD-bestückte Platine von oben und von unten. Rechts unten, der kleine viereckige Baustein, ist der aufgelötete MAX98357a. Links daneben sieben Löcher übereinander, die das optionale MAX98357a-Breadboard aufnehmen können. Unten rechts weiterhin der JST PH-Anschluss „Speaker“, an dem man den Lautsprecher anschließt.
Zusätzlich mit Konnektoren (optionaler JST PH für Reset fehlt). Ebenfalls ist kein externer MAX98357a eingelötet. In diesem Bereich (rechts unten) sieht man jedoch den nun aufgelöteten MAX98357a samt Lautsprecheranschluss (JST PH).
Nun mit eingestecktem D32 pro FePo.
Und hier noch ein Bild der mini 4L (fast) im Vollausbau mit zusätzlichem MAX98357a-Breadboard (blau), zwei Lautsprechern, Drehencoder, zwei Tastern, Kopfhörerplatine, Neopixel-Ring und RFID-Reader PN5180. Beim internen MAX93857a zu sehen, dass er Lautsprecher-Ausgänge per JST PH besitzt während auf dem aufgelöteten MAX-Board ein Schraubterminal vorhanden ist. Als Develboard ist hier E32 LiPo zu sehen.
Wer sich fragt warum die Platine jetzt grün ist und nicht mehr so schön blau: Bei 4 Layern in bleifrei und mit Bestückung verlangt JLCPCB Aufpreis für blau, da diese Kombination wohl nicht ganz so häufig ist. Und so wichtig war es mir dann doch nicht .
Schaltplan:
Schematics_ESPuino-mini_4Layer.pdf (273,0 KB)
STEP-File
ESPuino mini4L.step (751,1 KB)
Features:
- Die Außenmaße sind 81x51 mm. Das ist etwas kleiner als eine RFID-Karte.
- Alle SMD-Teile ab Werk bereits aufgelötet. Lediglich JST-PH-Buchsen, Pinsocket und optionaler Reset-Taster müssen per Durchstecktechnik (THT) aufgelötet werden. Insgesamt ist der Lötaufwand und die Schwierigkeit recht überschaubar. Tipps zum Löten gibt es hier: 📗 (SMD-)Löten. Pinsockets sind die schwarzen Buchsenleisten in der Mitte, in die das Develboard einfach eingesteckt wird.
- Passend für die Develboards Wemos Lolin D32, Wemos Lolin D32 pro, D32 pro FePo und E32 LiPo.
- Die Peripherie (MAX98357a, SD, Neopixel und (nicht jedoch bei LPCD) RFID) wird per Mosfet-Schaltung zum Stromsparen im Deepsleep spannungslos geschaltet. Aufgrund der restlichen Verdrahtung ist sie jedoch auch dann nicht 0 V sondern liegt bei etwa 0,6 V.
- RFID: 10pin (JST-PH). Bedarf (Anzahl Pins) orientiert sich primär an PN5180, RC522 kann auch verwendet werden.
- Taster: 2pin (JST-PH). Maximal fünf Stück. Wieviele man verwendet das kann man sich aussuchen. Sind allesamt am Port-Expander angeschlossen.
- Drehencoder: 5pin (JST-PH). Kann optional verwendet werden.
- Neopixel: 3pin (JST-PH). Kann optional verwendet werden. 📗 Was zeigt der Neopixel des ESPuino alles an?.
- I2C: 4pin (JST-PH). Kann optional für externe i2c-Geräte verwendet werden.
- Reset: 2pin. Es gibt einen aufgelöteten Reset-Taster (links unten) und weiterhin kann per JST-PH ein weiterer angeschlossen werden.
- Kopfhörerplatine: 6pin (JST-PH). Falls die Kopfhörerplatine verwendet wird, so wird der MAX98357a automatisch auf lautlos gestellt wenn ein Kopfhörer eingesteckt wird (und umgekehrt). Das Aus- und Einschalten des MAX98357a übernimmt hierbei der Port-Expander über
PA_EN
. Der Port-Expander erkennt viaHP_DETECT
, ob ein Kopfhörer eingesteckt ist. - Lautsprecher: 2pin (JST-PH). Als Verstärker wird der integrierte MAX98357a verwendet. GAIN ist über die Widerstände R13/R14 einstellbar - ab Werk ist 3 dB voreingestellt. Standardmäßig werden über einen Anschluss gleichzeitig der linke und rechte Kanal ausgegeben.
- Lautsprecher extern: 7pin. Optional kann ähnlich der alten mini-Platine rechts unten ein zusätzlicher MAX98357a aufgelötet werden. Der interne MAX wird dann auf den linken Kanal konfiguriert und der externe auf rechts. So kann man zwei Lautsprecher nutzen. GAIN wird hier über R7/R8 eingestellt.
- Die GPIs, die für DT und CLK des Drehencoders verwendet werden, werden auch auf den doppelreihigen Pinheader (EXT) geführt. D.h. wird kein Drehencoder verwendet oder DT und/oder CLK auf den Port-Expander geroutet, so stehen diese GPIs anderweitig zur freien Verfügung.
- Die GPIOs 0 und 5 werden ebenfalls auf EXT geführt. Sie sind unbeschaltet und können grundsätzlich frei verwendet werden. Weitere Infos hier: 📗 Die GPIOs des ESP32: Welche eignen sich für was?.
- Im Falle von PN5180 kann LPCD genutzt werden. Infos: 📗 Was ist LPCD und wie funktioniert es?. Was man machen muss, damit der PN5180 LPCD unterstützt, steht hier: Firmwareupdate des PN5180 an der ESPuino-mini 4Layer Platine.
- GPIO32 ist ebenfalls auf den externen Pinheader geführt und aber nur dann anderweitig nutzbar, wenn LPCD nicht verwendet wird.
- Auf dem EXT-Konnektor befinden sich noch weitere Anschlüsse zur freien Verfügung.
Hardware-Konfiguration
- Auf Unterseite der Platine befinden sich mehrere Lötbrücken (JP1 bis JP7, JP5 fehlt), die konfiguriert werden können bzw. müssen. Sie werden im Folgenden beschrieben. Kursiv markiert ist die Konfiguration, die aus meiner Sicht „standard“ ist (sofern anwendbar):
- JP1: Schließe 1+2 wenn du kein LPCD benötigst (Normalzustand). Schließe 2+3, wenn du LPCD benötigst. Auswirkung: Für LPCD wird das RFID-Modul dauerhaft mit Spannung versorgt, so dass eine etwas höhere Stromaufnahme im Deepsleep anfällt. Vergisst du JP1 komplett, so wird dein RFID-Reader nicht funktionieren, da er (egal wann) keine Versorgungsspannung erhält. Hinweis: Willst du dieses Feature nutzen, dann musst du auch die Brücke von JP4 schließen. Sollte dir unklar sein, was LPCD bedeutet, so findest du hier die Erklärung: 📗 Was ist LPCD und wie funktioniert es?.
Pflicht! - JP2: Schließe 1+2 wenn DT des Drehencoders auf GPI(O)39 geroutet werden soll. Schließe 2+3, wenn GPIO39 frei sein soll und DT stattdessen auf dem Port-Expander (109) landen soll. Stand jetzt (01/2023) macht ausschließlich GPIO Sinn, da ESPuino hier den Port-Expander noch nicht unterstützt. Vergisst du JP2 komplett, so funktioniert die Drehbewegung deines Drehencoders nicht (sofern du diesen verwendest).
Pflicht wenn ein Drehencoder verwendet wird! - JP3: Schließe 1+2 wenn CLK des Drehencoders auf GPIO34 geroutet werden soll. Schließe 2+3, wenn GPIO34 frei sein soll und DT stattdessen auf dem Port-Expander (110) landen soll. Stand jetzt (01/2023) macht ausschließlich GPIO Sinn, da ESPuino hier den Port-Expander noch nicht unterstützt. Vergisst du JP3 komplett, so funktioniert die Drehbewegung deines Drehencoders nicht (sofern du diesen verwendest).
Pflicht wenn ein Drehencoder verwendet wird - JP4: Schließe diese Brücke, wenn du LPCD verwenden möchtest (beachte dafür unbedingt auch JP1!).
Optional! - JP5: Gibt es nicht (mehr).
- JP6: Schließe 1+2 wenn der 3.3 V-Pin am externen I2C-Konnektor dauerhaft mit Spannung versorgt werden soll. Schließe 2+3, wenn er im Deepsleep des ESP32 spannungslos geschaltet werden soll. Da so gut wie niemand bisher externe I2C-Devices anschließt, hat ein Vergessen der Brücke erstmal keine Auswirkungen. Hintergrund der Konfigurationsmöglichkeit ist hier beschrieben.
Optional! - JP7: Wenn du einen zweiten MAX98357a anschließen möchtest, dann solltest du diese Brücke schließen, so dass der aufgelötete MAX98357a nur den linken Kanal ausgibt. Der zweite MAX98357a wird automatisch den rechten Kanal ausgeben, so dass du stereo über zwei Lautsprecher nutzen kannst. Achte in diesem Falle auch drauf, dass du
PLAY_MONO_SPEAKER
auskommentieren musst.
Optional!
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. Achte darauf, dass die unbenutzten Drahtenden nicht frei herumliegen und mache etwas z.B. Isolierband darüber (Kurzschlussgefahr)! BSY, RST, 5 V und IRQ benötigst du beim RC522 nicht. CS mappt beim RC522 auf SDA und beim PN5180 auf NSS. Die Anschlüsse GPIO, AUX und REQ werden beim PN5180 modulseitig nicht benötigt.
- Löte das ESP32-Develboard nicht direkt auf die mini-Platine auf, sondern verwende weibliche Konnektoren als Sockel. Die Kontaktierung funktioniert verlässlich und somit kann man das Develboard jederzeit wieder entnehmen.
- Wenn du dich dafür entscheidest, einen zweiten MAX98357a zu verwenden, dann bedenke bitte, dass die gesamte Stromversorgung nur über einen Festspannungsregler (LDO) auf dem Develboard läuft. Der Strombedarf kann hier bei höheren Lautstärken zu groß werden, so dass der ESP32 neu startet. Ausnahme: Du verwendest D32 pro FePo im Akkubetrieb (USB nicht eingesteckt!). Dann wird der LDO umgangen und es sollte stromtechnisch keine Engpässe geben. Ich habe es jedoch mit zwei solchen Lautsprechern über einen LDO und der Einstellung von je 3 dB probiert und hatte auch in der höchsten Lautstärke (21) keine Probleme. Scheint also grundsätzlich zu klappen. Die dauerhafte Stromaufnahme via USB lag dann bei etwa 250 mA (Stromspitzen nicht gemessen).
Allgemeine Software-Konfiguration / Einrichtung
- Ggf. musst du Treiber für den USB/seriell-Chip (CH340) auf dem Lolin D32 pro installieren. Bei aktuellen Versionen von Mac OS oder Linux muss man dies nicht tun. Bei Windows, soweit ich weiß, schon. Weitere Infos dazu gibt es bei Wemos (siehe Links weiter oben).
- Auf deinem Rechner benötigst du Visual Studio Code als Programmierumgebung (IDE) mit PlatformIO als Plugin. 📗 Einrichtung von Visual Studio Code mit Platformio.
- Lade dir ESPuino aus meinem GitHub-Repository herunter. Wie das geht steht hier: 📗 ESPuino in Platformio anlegen und mit git aktuell halten. Dort erfährst du auch, wie du die Software aktuell halten kannst.
- Wähle nun das passende Profil aus. Für den D32:
lolin_d32_sdmmc_pe
und für alle andere:lolin_d32_pro_sdmmc_pe
und . Wie das geht steht hier: Projekt- und Profilwechsel in Visual Studio Code. - Nun müssen
src/settings.h
undsettings-lolin_d32_pro_sdmmc_pe.h
bzw. settings-lolin_d32_sdmmc_pe.h` editiert werden. Alternativ sei an dieser Stelle für Profis noch das hier beschrieben: 📗 Override: Eigene Settings und Boards verwenden. Dessen sollte man sich jedoch IMMER bewusst sein, wenn man sich dazu entscheidet, es zu verwenden. settings.h
: Zwingend mussPORT_EXPANDER_ENABLE
aktiviert werden. Benutzt du einen PN5180 (anstelle eines RC522), so musst duRFID_READER_TYPE_MFRC522_SPI
auskommentieren undRFID_READER_TYPE_PN5180
aktivieren. Ich würde empfehlenHEADPHONE_ADJUST_ENABLE
ebenfalls zu aktivieren, auch wenn keine Kopfhöreplatine angeschlossen ist. Warum? Weil es nicht stört und du es später dann nicht vergessen kannst, wenn du doch mal eine anschließt.
settings-lolin_d32_pro_sdmmc_pe.h
/settings-lolin_d32_sdmmc_pe.h
: AktiviereINVERT_POWER
und setzePOWER
auf 115. Weiterhin mussRFID.IRQ
auf 32 gesetzt werden wenn du LPCD benutzt.- Möchtest du die Drehrichtung deines Drehencoders umkehren, so aktiviere
REVERSE_ROTARY
. - Ansonsten gibt es, speziell über
settings.h
, noch zahlreiche Konfigurationsmöglichkeiten: 📗 Welche Optionen beim Kompilieren gibt es?. - Schließe deinen ESPuino mit einstecktem Develboard per USB an deinen Rechner an und klicke auf
Upload and Monitor
. Wenn alles klappt, wird nun die Firmware kompiliert und anschließend auf deinen ESP32 geladen. - Hat alles funktioniert, dann startet dein ESPuino und es geht hiermit weiter: 📗 Der erste Start deines ESPuino. Ansonsten (allgemein): Anleitungen - ESPuino :: Rfid-controlled musicplayer.
Probleme?
Kein Problem, dafür gibt es dieses Forum hier. Schreib’ uns einfach!
Ggf. hilft auch das: Lolin D32 Pro Upload - Timeout.
Pinout
Es ist in settings-lolin_d32_pro_sdmmc_pe.h
bzw. settings-lolin_d32_sdmmc_pe.h
bereits fast alles entsprechend voreingestellt. Dennoch zur Erklärung: GPIO-Werte zwischen 0 und 39 sind GPIOs des ESP32, solche zwischen 100 und 115 zeigen, dass der Anschluss über den Port-Expander PCA9555 erfolgt. Der Port-Expander besitzt zwei Kanäle mit je 8 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 sind teilweise auf den zweireihigen Pinheader Ext. rausgeführt. Deren Nutzen ist aktuell (Stand 01/2023) begrenzt, aber möglicherweise für künftige Anwendungen noch sinnvoll. Gleiches gilt für den I2C-Anschluss. Deaktiviert werden Pins mittels der Nummer 99 - nicht auskommentieren!
Benötigte Teile / Vorschläge
Herz dieses PCBs ist der Mikrocontroller ESP32. Möchtest du USB-C nutzen, so frage am besten direkt bei mir D32 pro FePo oder E32 LiPo an.
Die nachfolgende Liste spiegelt nur Vorschläge wieder - bestelle die Sachen wo immer du willst. Sollte ein Link kaputt sein, so teile mir das bitte mit.
- RFID-Leser PN5180 oder hier
- RFID-Leser RC522
- RFID-Karten
- Neopixel-Ring
- Drehencoder
- Taster
- Lautsprecher
- µSD-Karte. Mit 32 GB läuft das Ganze auf jeden Fall. Mit 64 GB auch (es gab jedoch vereinzelt auch schon Probleme), jedoch muss etwas beachtet werden.
- JST PH-2.0-Konnektoren 2, 3, 4, 5, 10fach
- Weibliche Verbinder zum Sockeln des Develboards
- (optional für Akkubetrieb) LiPo-Akku => mit JST-PH-Anschluss bestellen - nicht für FePo-Develboards verwenden!!!
- (optional für Akkubetrieb) FePo-Akku => mit JST-PH-Anschluss bestellen - nicht für LiPo-Develboards verwenden!!!
- (optional für Akkubetrieb) kleiner FePo-Akku => mit JST-PH-Anschluss bestellen - nicht für LiPo-Develboards verwenden!!!
- (optional) MAX98357A
Interesse?
Falls du Interesse an einem solchen PCB hast, dann melde dich bei mir per privater Nachricht. Die Platine kommt immer mindestens komplett SMD-gelötet und muss nur noch mit Pinsocket (Buchsenleiste), JST-Konnektoren und (optional) Reset-Taster bestückt werden. Das sind allesamt Durchsteckteile, so dass kein SMD gelötet werden muss. Traust du dir das Löten gar nicht zu, dann kann ich auch diese Lötarbeiten für dich übernehmen, so dass du eine fertig bestückte + getestete Platine erhältst. Es ist auch möglich, dass du ein Set bei mir orderst, welches aus mini-Platine und Kopfhörerplatine und Develboard besteht - all inclusive also! Mitunter habe ich auch RFID-Reader (nur PN5180) vorrätig.
Was grundsätzlich jeder jedoch selbst besorgen muss, das sind RFID-Reader, Neopixel, Drehencoder, Lautsprecher, Akkus und die Buttons. Wer einen zweiten MAX98357a braucht kann mich auch anschreiben, ein paar habe ich noch hier liegen.
Kann man da einen Kopfhörer anschließen?
Nicht direkt, aber mit der passenden Kopfhörerplatine geht es: Kopfhörerplatine basierend auf MS6324 und TDA1308. Sie wird einfach per JST-Konnektor angeschlossen - Plug’n’Play! Melde dich bei mir, wenn du eine solche benötigst.