ESPuino-mini 4Layer

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. Dies eröffnet mir die Möglichkeit, je einen eigenen Layer für GND und 3.3 V zu verwenden. Auch zu erwähnen: Es müssen keinerlei Breadboards mehr für MAX98357a und/oder µSD-Slot aufgelötet werden. Das spart Arbeit + Zeit/Aufwand + Müll.

Ansonsten ist der Funktionsumfang jedoch, abgesehen von der optionalen 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:

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:

  1. Als Profil muss lolin_d32_pro_sdmmc_pe gewählt werden in Platformio. Für den Lolin D32 entsprechend settings-lolin_d32_sdmmc_pe.h - das gilt auch auf die nachfolgenden Punkte.
  2. In settings.h muss PORT_EXPANDER_ENABLE aktiviert werden. Siehe hier.
  3. In settings-lolin_d32_pro_sdmmc_pe.h muss POWER von 32 auf 115 geändert werden.
  4. In settings-lolin_d32_pro_sdmmc_pe.h muss INVERT_POWER aktiviert werden.
  5. 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.

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 :woman_shrugging:.

Schaltplan:

Schematics_ESPuino-mini_4Layer.pdf (273,0 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 via HP_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?.
  • 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 und settings-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 muss PORT_EXPANDER_ENABLE aktiviert werden. Benutzt du einen PN5180 (anstelle eines RC522), so musst du RFID_READER_TYPE_MFRC522_SPI auskommentieren und RFID_READER_TYPE_PN5180 aktivieren. Ich würde empfehlen HEADPHONE_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 :slight_smile:.
  • settings-lolin_d32_pro_sdmmc_pe.h / settings-lolin_d32_sdmmc_pe.h: Aktiviere INVERT_POWER und setze POWER auf 115. Weiterhin muss RFID.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! :slight_smile:
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.

Interesse?

Falls du Interesse an einem solchen PCB hast, dann melde dich bei mir. 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!

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.

7 „Gefällt mir“

Ja, sehr interessiert. Bitte um Infos.
VD & VG

So, die erste kleine Charge ist jetzt weg. Ich habe leider die Sache mit dem chinesischen Neujahrsfest ein bisschen verpeilt. In der Folge wird meine Order bei JLC erst ab dem 29.1 verarbeitet. D.h. ich schätze mal, dass die neue Order dann zwischen 10 und 15. Februar hier eintrifft.

Habe das Board jetzt in Betrieb genommen…Die Kinder sind mega Happy wieder einen Espuino zu haben. Die Ton**box bleibt links liegen :wink:

Das Board funktioniert einwandfrei und die Größe ist Klasse für mein Gehäuse.
Danke dafür!

2 „Gefällt mir“