📗 Kleiner Leitfaden für Einsteiger

Du bist neu hier? Herzlich willkommen!
Um mehr über ESPuino zu erfahren schlage ich vor, dass du hier stöberst, denn dort habe ich sämtliche Dokumentation zu ESPuino hinterlegt.
Eine FAQ gibt es hier: 📗 Oft gestellte Fragen (FAQ)

Aber ich verstehe, dass so viel Dokumentation erschlagend ist und du erstmal einen Einstieg brauchst. Daher nachfolgend ein paar einleitende Worte, die dir den Einstieg in ESPuino hoffentlich etwas erleichtern.

Zuerst ist es wichtig zu wissen, aus was ein ESPuino besteht:

  • Mikrocontroller ESP32
  • SD-Modul samt micro SD-Karte
  • Digital/Analog-Converter (DAC)
  • Verstärker (der ist oft in den DAC schon integriert)
  • RFID-Modul (RC522 oder PN5180)
  • LED-Ring („Neopixel“)
  • Taster (bis zu fünf)
  • Drehencoder (optional, aber zu empfehlen!)

Ein Mikrocontroller, nachfolgend geht es auschließlich um den ESP32 der chinesischen Firma Espressif, stellt an seine Umgebung einige Anforderungen, die speziell am Anfang nicht so einfach zu überblicken sind. Auch um sie zu löten braucht es etwas Erfahrung. Arduino (als Plattform) hat sie, die Mikrocontroller, sowohl in Software, aber auch in Hardware, wesentlich „nahbarer“ gemacht. Und so kommt es, dass man sie seit Jahren „gut und handlich verpackt“ auf sog. Develboards kaufen kann. Mit dabei ist dann üblicherweise ein USB/seriell-Konverter (z.B. CH340), so dass man die Mikrocontroller problemlos per USB programmieren kann. Weiterhin ein Festspannungsregler (z.B. ME6211 oder AMS1117), der aus den an USB üblichen 5 V die für den ESP32 notwendigen 3.3 V macht. Auch findet man Reset-Buttons und auf den besseren Develboards (beispielsweise Wemos Lolin D32 oder Lolin D32 pro) auch einen Laderegler für LiPo-Akkus. Aus meiner Entwicklung stammt ein Develboard, welches den Anschluss eines als wesentlich sicherer geltenden LiFePO4-Akkus ermöglicht. D.h. man hat auch gleich die Möglichkeit, das Ganze im Akkumodus zu betreiben und auch zu laden.

Für ESPuino dekodiert der ESP32 Audiostreams in Software und verwendet hierfür die freie Library ESP32-audioI2S. Als Quellen sind hierbei SD und Webradio zu nennen. Aber auch Bluetooth ist möglich, so dass man z.B. per Handy, Tablet oder Laptop auf den ESPuino streamen kann. Und auch umgekehrt kann man einen BT-Kopfhörer mit ESPuino verbinden.
Nachdem der ESP32 das Ganze verarbeitet hat, gibt er das Signal über den digitalen Bus i2s aus. So kann man natürlich damit noch nichts anfangen, daher braucht man einen Digital/Analog-Converter (DAC) für Audio, damit daraus ein analoges Signal wird. Zum Schluss muss das Signal noch verstärkt werden, so dass die Ausgabe über einen Lautsprecher (oder Kopfhörer) erfolgen kann. Standardmäßig verwendet ESPuino als DAC+Verstärker einen einzigen Baustein, der beides zusammen macht: MAX98357a. Auch für diesen kann man kleine Breakout-Boards kaufen, so dass es nicht notwendig ist, SMD zu löten. Beides ist jedoch inzwischen nicht mehr notwendig, da ich für ESPuino-Zwecke eine spezialisierte Basisplatine entwickelt habe: ESPuino-mini 4Layer.

Nun will man das Ganze auch noch steuern können. Das macht man einerseits über RFID-Karten, für die man entsprechend im ESP32 eine Zuordnung über ESPuinos WebGUI anlernt. D.h. jede RFID-Karte besitzt eine fest einprogrammierte interne ID und diese ID wird mit einer Aktion verknpüft. Das wird einmalig über eine WebGUI gemacht und ist nachträglich natürlich (bei Bedarf) änderbar. Jedes Mal, wenn diese Karte wieder aufliegt, erinnert sich ESPuino wieder an diese Aktion und führt sie aus. Und klar: Um eine RFID-Karte lesen zu können, braucht man natürlich einen entsprechenden Kartenleser. ESPuino verwendet RC522 oder (besser) PN5180.
Zusätzlich benötigt man jedoch auch Taster und ggf. einen Drehencoder, über die man z.B. zum nächsten/vorherigen Titel springen kann oder auch lauter und leiser stellen kann. Die Anzahl der Taster kann man von 0 bis 5 frei wählen (der integrierte Taster des Drehencoders kommt noch dazu) und auch zahlreiche Aktionen beliebig zuweisen.

Zum Schluss gibt es noch einen LED-Ring (Neopixel-Ring), der dem ESPuino-Benutzer ein optisches Feedback gibt. Hier sieht man beispielsweise, wie laut die Audioausgabe ist: D.h. leuchten 50% der LEDs, dann liegt die Lautstärke bei 50% der Maximallautstärke. Oder man sieht, wie weit ein Titel schon gelaufen ist, ob der ESPuino beschäftigt ist oder auch, ob eine angefragte Aktion abgelehnt wurde und VIELES VIELES mehr. Dieser LED-Ring ist zwar grundsätzlich optional, aber da er viele Informationen transportiert, ist er nicht einfach nur Mäusekino, sondern aus meiner Sicht unabdingbar. Übrigens: Es muss kein Ring sein, aber rein optisch macht ein Ring üblicherweise am meisten Sinn.

Was macht ESPuino einzigartig?

Das Konzept über RFID-Karten einen Musikplayer zu steuern ist nicht neu. Im Sinne von Open Source gibt es hier z.B. TonUINO - darüber habe ich mal einen Vergleichsartikel geschrieben. Es gibt jedoch auch so etwas wie Phoniebox, das auf einem Raspberry Pi basiert und damit extrem leistungsfähig ist (Spotify etc pp). Nachteil ist hier die vergleichsweise lange Bootzeit und der für Akkuzwecke doch recht hohe Stromverbrauch. In diese Lücke stößt nun ESPuino: Es bringt Netzwerk-Konnektivität in Form von WLAN mit sich, welches Features wie Webradio, Bedienung per Web-Schnittstelle und MQTT ermöglicht - dies jedoch gleichzeitig gepaart mit wenig Strombedarf, kurzer Bootzeit und geringeren Kosten.

Welche Hardware soll ich verwenden?

Das steht dir frei, aber am einfachsten hast du es tendenziell, wenn du als Basisplatine ESPuino-mini 4Layer verwendest und darauf als Develboard einen D32 pro FePo oder Wemos Lolin D32 pro steckst. Erstgenanntes Develboard ist für LiFePO4-Akkus (von mir entwickelt), das andere für LiPo-Akkus (von Wemos). (Auch ich habe mal ein LiPo-Develboard entwickelt, es ist jedoch nicht immer verfügbar). An die Basisplatine kann man optional eine Kopfhörerplatine anschließen. Steckt man dort einen Kopfhörer ein, so geht der Lautsprecher automatisch aus (und umgekehrt).
Basisplatine, Develboard (LiFePO4), Kopfhörerplatine, Anschlussleitungen und RFID-Reader (nur PN5180) kannst du von mir beziehen; üblicherweise habe ich diese Sachen auf Lager. Schreibe mir einfach eine private Nachricht. Dinge wie Drehencoder, Lautsprecher, Taster und Neopixel muss jeder selbst besorgen - das geht mir sonst logistisch zu weit :slight_smile:.

Wer lötet das Ganze zusammen?

Mich erreichen immer wieder Anfragen von Leuten, die gerne nicht (so viel) löten möchten. Kein Problem! Ich biete daher an, z.B. ESPuino-mini 4Layer auch komplett zu löten (natürlich inkl. Funktionstest). Eine solche Platine ist dann komplett bestückt, so dass man das Develboard einfach nur noch einstecken muss.
Alternativ kann ich dir die Platine auch nur SMD-bestückt schicken und du lötest den Rest selbst. Dafür muss man wahrlich kein Lötspezialist sein.

Wie ist so ein PCB aufgebaut?

Nachfolgend ein Bild (von oben und unten) von der SMD-bestückten ESPuino-mini 4Layer, die 81x51 mm groß ist (das ist etwas kleiner als eine RFID-Karte).

Auf dem Bild sieht man nun Folgendes:

  • Port-Expander PC9555 mit Power-Mosfet darüber (Mitte)
  • Reset-Taster (unten links, nicht eingelötet)
  • uSD-Slot (unten links)
  • 5x JST-PH-Anschluss (2fach) für bis zu fünf Taster (Mitte links)
  • 1x JST-PH-Anschluss (3fach) für Neopixel (links oben)
  • 2x Pinsocket à 16 Pins, um Develboard zu sockeln (Mitte)
  • 1x JST-PH-Anschluss (6fach) für Kopfhörerplatine (rechts oben)
  • 1x JST-PH-Anschluss (10fach) für RFID-Reader (Mitte oben)
  • 1x JST-PH-Anschluss (5fach) für Drehencoder (Mitte)
  • 1x 7 Pin-Anschluss für optionalen zweiten MAX98357a (Mitte unten)
  • 1x JST-PH-Anschluss (2fach) für externen Reset-Taster (Mitte unten)
  • 1x JST-PH-Anschluss (2fach) für Lautsprecher für integrierten MAX98357a (rechts unten)
  • 1x 16 Pin-Anschluss für verschiedene Zwecke (rechts)
  • 1x JST-PH-Anschluss (4fach) für optionales i2c-Gerät (rechts)
  • Verschiedene Konfigurationsmöglichkeiten per Lötjumper (Unterseite)

So sieht ein Bausatz (mit ebenfalls bei mir erhältichen JST-Konnektoren) zum Selbstlöten aus: Links sämtliche JST PH 2.0-Buchsen zzgl. Reset-Taster und rechts JST-Stecker samt Anschlussleitungen (20 cm):

In gelötet (komplett), ohne uSD-Karte, ohne Develboard und ohne zweiten MAX98357a, sieht es dann so aus. Hinweis: Die weißen Anschlüsse sind vom Typ JST PH 2.0, besitzen also ein Rastermaß von 2 mm.

Jetzt mit eingestecktem LiFePO4-Develboard. Wichtiger Hinweis an dieser Stelle: Die USB-Buchse des Develboards zeigt immer nach unten und MUSS(!) ohne Pin-Versatz in die mini4L eingesteckt werden. Wird dies nicht beachtet, so ist mit Hardwareschäden zu rechnen!

Detailaufnahme des bereits integrierten MAX98357a. Der Anschluss für den zugehörigen Lautsprecher befindet sich direkt darunter „Speaker“. Links neben dem aufgelöteten MAX98357a sieht man einen Anschluss mit sieben Pins im 2,54 mm-Rastermaß. Hier kann ein zusätzliches MAX98357a-Breadboard eingelötet werden, wie es z.B. Adafruit anbietet. Es gibt jedoch auch bei AliExpress verschiedene Nachbauten davon, die deutlich günstiger sind. Gebraucht wird dieses Breadboard auch ohnehin nur, wenn man zwei Lautsprecher anschließen möchte:

Von links unten mit eingestecktem LiFePO4-Develboard:

Und das Gleiche nochmal von rechts unten:

Von oben rechts mit eingestecktem LiFePO4-Develboard:

Und das Gleiche nochmal von links oben:

Detailaufnahme der Sockelung von oben. Man könnte es auch fest einlöten, aber dann kann man es bei einem Defekt nicht mehr entnehmen. Daher: Alles, was ich löte und rausgebe, besitzt diese Sockel:

Und das Ganze nochmal mit angeschlossener Kopfhörerplatine:

Zum Schluss nochmal eingestecktem LiFePO4-Develboard (alte Revision), zweitem MAX98357a und Peripherie. Die Peripherie besteht aus zwei Lautsprechern, zwei Buttons (ich verwende normalerweise drei), RFID-Reader (PN5180), zwei Lautsprechern, einen Drehencoder, einem Neopixelring mit 24 LEDs, einem Drehencoder und einer Kopfhörerplatine:

Was bewirkt ein zweiter MAX98357a?

Normalerweise werden beide Kanäle (links / rechts) über einen Lautsprecher ausgegeben. Das reicht den meisten Usern (inkl. mir) auch aus. Möchte man jedoch zwei Lautsprecher anschließen, so kann man einen zweiten MAX98357a verwenden und die ESPuino-mini 4Layer so konfigurieren, dass ein Lautsprecher das linke Signal ausgibt und der andere das rechte. Während der erste MAX98357a direkt auf die ESPuino-mini 4Layer aufgelötet ist, wird der zweite MAX98357a auf einem Breadboard (gibt’s statt von Adafruit auch günstiger via AliExpress) über den 7Pin-Anschluss aufgelötet. Hinweis: Während man das Develboard über 2x16 Pins sehr gut sockeln kann, sollte man das beim zweiten MAX98357a eher sein lassen - damit habe ich schlechte Erfahrungen gemacht. Daher auflöten!

Kann ich auch komplett eigene Hardware nutzen?

Hinweis: Mit dem Wechsel auf Arduino2 ist ESPuino nicht mehr auf ESP32 lauffähig, die keinen PSRAM besitzen. Das bedeutet, dass zwingend ein ESP32-WROVER gebraucht wird. Möchtest du ein WROOM-Develboard verwenden, so musst du bei Arduino1 bleiben. Dieser Zweig wird jedoch nicht mehr weiterentwickelt.

Ansonsten: Klar! Ich will absolut niemand etwas andrehen, was er/sie eigentlich nicht braucht.
📗 Welche Hardware nutzen? (Develboard, RFID, SD, Akku) gibt dir einen grundsätzlichen Überblick über die Möglichkeiten. Speziell in Deutschland ist der erste Kontaktpunkt mit dem ESP32 häufig ein Develboard von AZ-Delivery. Grundsätzlich ist das in Ordnung und funktioniert, es eignet sich jedoch für Batteriebetrieb nicht sonderlich gut (weil es dafür keinen Anschluss hat und dessen Festspannungsregler für Batteriebetrieb auch etwas ineffizient ist). Wenn du nicht gerade schon ein solches Develboard besitzt und es deshalb, aus naheliegenden Gründen, unbedingt verwenden möchtest, dann würde ich dir an dieser Stelle am ehesten empfehlen, einen Wemos Lolin D32 bzw. D32 pro zu nutzen.

Wie baue ich den ESPuino mit eigener Hardware selbst auf? Gibt es einen Schaltplan?

Vorab nochmal der Hinweis: ESP32-Arduino2 ist aufgrund von Speicherlimitierungen nur auf ESP32-WROVER lauffähig.
Also zuerst mal gibt es nicht DEN ESPuino und insofern gibt es auch unterschiedliche Schaltpläne. So gibt es für das zuvor genannte Develboard von AZ-Delivery z.B. diesen Schaltplan. Dort siehst du die ganzen Zuordnungen zu den einzelnen GPIOs. In Grenzen kann man sich die GPIOs nach seinen Bedürfnissen anpassen. Welche Hardware du im Einzelnen benötigst und was sonst noch so zu beachten sind, findest du hier: ESP32 NodeMCU / Devkit C mit SD_MMC und PN5180 als RFID-Leser.
Die Frage ist nun, wie man sowas aufbaut. Hier hat man drei Möglichkeiten.

  1. Man verwendet ein Breadboard und Jumper Wires. Damit kann man sich alles zusammenstecken (gemäß dem Schaltplan) und dann wird es normalerweise mehr oder weniger gut laufen. Problem ist, dass dieser Aufbau nicht sonderlich haltbar und die Zuverlässigkeit gefühlt von der Tagesform abhängig ist :slight_smile:. Kurzum: Von dieser Variante würde ich eher abraten, da sie fehleranfällig ist und nicht reproduzierbar funktioniert.
  2. Man lötet alles auf Lochrasterplatinen auf. Spricht grundsätzlich nix dagegegen. Aber es ist halt viel Arbeit und ggf. wird es relativ groß, da man auf die Rasterung angewiesen ist.
  3. Man verwendet verwendet speziell für den ESPuino entwickelte Platinen, sog. PCBs. Mit einer Software wie z.B. KiCad kann man so etwas entwickeln, aber das brauchst du gar nicht. Es gibt hier im Forum eine eigene PCB-Sektion, in der verschiedene solcher PCBs beschrieben sind. Meine eigenen beschreibe ich immer sehr detailiert und supporte sie auch. Hervorheben möchte ich an dieser Stelle jedoch dieses und dieses. Erstgenannte ist von den Develboard-PCBs (Basisplatinen) am weitesten entwickelt + am kompaktesten und kann von mir bezogen werden. Vom zweiten Board sind in meinem Github-Repository auch die Gerberfiles online. Mit diesen kannst du dir deine Platinen auch selbst bestellen - beispielsweise bei jlcpbc.com. So oder so: Die PCB-Variante ist auf jeden Fall am komfortabelsten.

Wie kommt die Software auf den ESP32?

Es sei an der Stelle erwähnt, dass es keine fertige ESPuino-Firmware gibt, die man runterlädt, damit den ESP32 flasht und dieser kann dann universell alles so, wie man das braucht. Das heißt: Man muss den Code von meinem Repository auschecken (runterladen) und Visual Studio Code samt Platformio als Plugin installieren. Wie man das alles einrichtet steht hier und hier. Die Arduino-IDE kann auf jeden Fall nicht verwendet werden. Die Konfiguration von ESPuino sieht so aus, dass man zwei Dateien gemäß seinen Anforderungen anpassen muss, wobei man sagen muss, dass alles schon bestmöglich vorkonfiguriert ist. Einerseits ist das die settings.h, in der man globale ESPuino-Eigenschaften konfiguriert. Hier sagt man z.B., ob man einen Neopixel oder einen Drehencoder verwenden möchte, auch konfiguriert man dort, welchen RFID-Reader man verwendet. Zudem gibt es noch ein weiteres Configfile, welches abhängig davon ist, welches PCB/Develboard du verwendest. Ist es z.B. ESPuino-mini 4Layer, dann ist settings-lolin_d32_pro_sdmmc_pe.h die für dich maßgebliche Datei. Im Normalfall musst du hier lediglich INVERT_POWER aktivieren und (je nach Konfiguration) aus der 32 eine 115 machen. Der Rest ist passend konfiguriert.
Ist es dagegen ESP32 NodeMCU / Devkit C mit SD_MMC und PN5180 als RFID-Leser, dann müsstest du settings-azdelivery_sdmmc.h verwenden. Hier musst du gar nichts ändern. Startest du hingegen eine Eigenentwicklung, dann wirst du settings-custom.h verwenden wollen. Allerdings bist du dann auch komplett für die passende Konfiguration selbst verantwortlich. Am Anschluss muss man die Software kompilieren und den ESP32 damit flashen.

Gibt’s Bilder von ESPuinos anderer Forenteilnehmer?

Na klar! Zeigt her eure ESPuinos.

Noch Fragen?

Ansonsten stöbere bitte hier um dich mit weiteren Infos zu ESPuino zu versorgen. Insbesondere die FAQ sei hier auch nochmal erwähnt.

Wenn du Fragen hast, dann frag’ hier gerne. Dafür ist das Forum da!

7 „Gefällt mir“

Hallo, Meine erste Frage :
Nach langem stöbern auf den Seiten, wo finde ich eine Bauanleitung mit Schaltplan und allem drum und dran?
Dankeschön :wink:

Ich habe mal ein paar einleitende Worte hier geschrieben. Ich hoffe das hilft erstmal.

Als Anfänger, der sich nicht mit dem ganzen Code-Zeug auskennt, hat man es echt schwer. Ich dachte, 2h am Sonntag reichen, um die Software lauffähig auf der Platine zu haben, aber das war wohl nix.
Vielleicht liegts ja auch an mir. :slight_smile: