ESP32 Audio Kit (ESP32-A1S)

Hallo, irgendwie kriege ich es ums verrecken nicht zum laufen. Die SW Version von November/Dezember funktioniert bei mir. Leider mit der aktuellen SW funktioniert der RFID nicht. MFRC522 verbunden über SPI parallel zu SD. CS scheint zu Funktionieren. CLK nicht. Irgendeine Idee? VG

Hi. Ich habe ein pololu mini Schalter nach der Induktivität L2 angeschlossen. Im ausgeschaltenem Zustand werden 2 mA von der Batterie gezogen. 3,3V Spannungswandler ist aktiv. DO des uC auf HIGH schaltet das System ab. Nur ein Tip.

Mein Problem hatte ich oben beschrieben: Ich hatte einen der Pins, den ich oben in der settings-*.h für SPI definiert hatte, „weiter unten“ dann für einen anderen Zweck nochmal genutzt (oder eher: noch nicht angepasst). Bei mir war es

#define DREHENCODER_CLK              5

Da war mein strikt sequenzielles Vorgehen („ich passe die settings von oben nach unten an, und schaue nach jedem Block, den ich geändert haben, ob alles läuft“) nicht zielführend.

Danke Dir für den Hinweis! Ich kenne den pololu mini Schalter nicht, aber das hört sich nach einer guten Lösung an. Ich werde den gleich mal bestellen. Kannst Du mir da noch mehr Details geben? Insbesondere die Umbauten am A1S Board würden mich interessieren. Hier wäre eine Skizze oder ein Foto für mich hilfreich.
PS: Du meinst den hier? Pololu Mini Pushbutton Power Switch with Reverse Voltage Protection,

ja, den gleichen habe ich verwendet. Spannungsteiler ist notwendig, weil sonnst ist der Ausgang IO19 >1V.

2 „Gefällt mir“

Hallo an alle A1S-User , vor allem @Wolle und @kkloesener .

Ich habe mal ein ein Board erstellt als Vorstufe für ein ESP32_complete.


Alles funktioniert wie erhofft , jedoch gibt es mit Audio ein Problem . Sowohl Kopfhörer als auch Line_Out sind sehr leise . Als Endstufe nutze ich zum Testen ein Fertigmodul mit PAM8403 . Da sich alles im ESP32-Modul selbst abspielt und das Geheimnis von AIThinker ist, bin ich etwas ratlos . Wie ist das mit dem fertigen Board ? Für mich sieht es so aus als würde Torstens Code nicht die volle Lautstärke das AC101 ausnutzen . Ich bin aber schlecht in Code und Libraries , habe schon lebhaft geforscht , weiß aber nicht weiter . Ich habe auch diese beiden Werte
uint8_t maxVolume = 21;
uint8_t maxVolumeSpeaker = 21; erhöht .
Geht aber trotzdem nur bis 21 weil wahrscheinlich noch irgendwo eine Abfrage ist, finde ich aber nicht .@Wolle , ich habe in deiner ESP32_A1S.ino diese Zeilen gefunden
static AC101 ac;
int volume = 40; // 0…100
Hat das etwas damit zu tun ?

Ansonsten habe ich folgendes auf dem Board implementiert .
SD_MMC , Ladecontroller für LiPo , LDO , Akkuspannungsmessung , Autoflash .
Flashen nur mit diesem genialen Teil und FTDI232 , welches ich auch für Arduino Mini Pro nutze .
Sowas gibt es auch in etwas kleiner bei Thingiverse . Ich baue voll auf die Zukunft , sprich OTA .
Der Laderegler kann etwa 1A und kann laut Hersteller Texas Inst. charge and system load at the same time . Damit können wieder ein paar Bauteile ( Mosfet , Schottky-Diode ) entfallen .
Der Ruhestrom des Boards ist mit Spannungsteiler für Ackuspannungsmessung knapp 50 µA . Damit bin ich zufrieden und ist deutlich besser als (fast) alle China-Teile.

VG

3 „Gefällt mir“

Das wird wohl tatsächlich daran liegen. Als ich das eben zum ersten Mal gesehen habe, habe ich mich noch darüber gewundert, weil ich war mir eigentlich ziemlich sicher, dass ich das getestet und eingebaut hatte. Und tatsächlich ist das auch der Fall - jedoch in meiner alten Implementierung, die ich extra für den ESP32-A1S angepasst hatte. Das habe ich demletzt halt alles mal gelöscht, da ich ziemlich „alt“ war.

In meinen Master-Branch wurde das später von @kkloesener integriert.

Inzwischen lebt die Erkennung jedoch hier:

Glaube es ist am einfachsten, wenn man ac-volume auf 100 belässt und halt nur die Volume von Wolles Lib anpasst. Aber das ist jetzt nur eine Vermutung; muss man testen.

@compactflash Kannst ja mal hinter der Stelle, wo ac instanziert wird, einfach mal statisch den Wert auf 100 setzen. Dann müsste es lauter werden. Also du kannst hier zwei Werte ändern: Die AC-Lautstärke und dann auch nochmal die Lautstärke von Wolles Lib.

Ohne eine Lautstärkeanpassung in der AC101 Lib hat das bei mir ganz gut funktioniert und die Lautstärke war okay. Aber mit

 ac.SetVolumeHeadphone(63);
 ac.SetVolumeSpeaker(63);

an geeigneter Stelle im setup() lässt sich die Lautstärke noch deutlich erhöhen
vG
Wolle

Danke @biologist und @Wolle für die Hinweise, werde ich morgen mal checken , bin heute zu müde.

Hi @Wolle
Die Lautstärke des Lautsprechers war etwas zu leise und die des Kopfhörers nicht vernünftig nutzbar .

Ich habe die beiden Zeilen in diesen Abschnitt
// Function to play music as task eingefügt .
Es funktioniert einwandfrei . Ich habe einiges getestet mit unterschiedlichen Einstellungen der max. Lautstärke im WebGui usw. Ich habe bisher noch keinen Fehler festgestellt . Jetzt ist es fast zu laut aber das läßt sich ja anpassen und der Regelbereich ist voll nutzbar . Super .
Leider verstehe ich den Code nicht und das Zusammenspiel der Libraries , z.Bsp. dass der Wert 63 von AC101 und der Regelbereich bis 21 irgendwie zueinanderpassen .
Ich werde es noch final mit den Endstufen-IC´s NS5140 testen und dann bin ich einen großen Schritt weiter zur Erstellung eines minimalistischen ESP32-A1S_Complete .

VG und danke nochmals

Hi @compactflash,
die Wertebereiche passen nicht wirklich zusammen. Ich habe mir das Datenblatt vom AC101 angesehen, das Register HPOUT verarbeitet 5 Bits (0…31) und SPOUT 5 Bits (0…63)
Damit alles etwas einheitlich wird mit größerem Regelbereich:

audio.setVolume(currentVolume);
ac.SetVolumeHeadphone(currentVolume * 3);
ac.SetVolumeSpeaker(currentVolume * 3);

@Wolle: Führt diese Multiplikation nicht aber im Endeffekt dazu, dass es um unteren Bereich sehr leise ist und die Lautstärke dann oben raus enorm zunimmt? Also ich habe auch drüber nachgedacht, einen Faktor einzumultiplizieren, habe es jedoch (aus meiner Vermutung raus) nicht gemacht. Ich hätte jetzt gesagt: Man die AC-volume auf einen hohen Wert und passt dann nur noch audio.setVolume() an.

Hi , ich habe das heute mal kurz ausprobiert. Ich bin mir nicht sicher wo die 3 Zeilen hin müssen , habe es im Setup gemacht . Danach war es wieder sehr leise , ich habe aber bestimmt aus Ahnungslosigkeit etwas falsch gemacht.
Die Lösung von gestern ist für mich ok , auch wenn es vielleicht mathematisch nicht korrekt ist , das merkt kein Mensch.
Ich habe nicht weiter gemacht weil ich noch mit Hardware beschäftigt war . Das ist erledigt und ich habe jetzt die für mich finale Lösung bis auf ein paar Kleinigkeiten fertig.
VG und gute Nacht

Was verwendest Du denn genau?
Die Boardgrösse finde ich super!

@biologist: ich habe nir die AC101 Lib etwas genauer angesehen. Nach der Initialisierung ist für Kopfhorer und Lautsprecher der Wert 30 voreingestellt. Wenn dort auf 63 erhöht wird ist nach meiner Einschätzung die unterste Stufe etwas zu laut.
ich ahbe das jetzt so:
in setup()

audio.setVolume(initVolume);
#if (HAL == 2)
    ac.SetVolumeHeadphone(initVolume * 3);
    ac.SetVolumeSpeaker(initVolume * 3);
#endif

und in
AudioSetVolume()

    audio.setVolume(currentVolume);
#if (HAL == 2)
    ac.SetVolumeHeadphone(currentVolume * 3);
    ac.SetVolumeSpeaker(currentVolume * 3);
#endif

So ist einfach der Regelbereich besser.

Ok, dann nehme ich das mal auf, wenn @tuniii mit dem Refactoring durch ist.
Danke.

Hi @Christian
Anbei mal die vorläufige Schaltung .ESP32_A1S Breakout Board.pdf (155,7 KB) Das Board ist ein Schnellschuß weil ich etwas anderes bei JLCPCB bestellt habe und wegen Porto sparen dieses dann gleich mit . Die Schaltung wird so bleiben , aber das Layout habe ich nochmals geändert .

  1. der SD_Card_Reader ist nicht sehr hochwertig und in der neuen Version will ich einen mit mechanischer Verriegelung verwenden ( ist bestellt ) .
  2. Ich habe den Footprint des ESP32-Wrover benutzt , leider ist der A1S etwas breiter . Das war mir nicht aufgefallen und somit ließ sich der Chip nur sehr schlecht auflöten . Ich habe einen neuen Footprint erstellt . Deshalb mußte ich einige Leiterbahnführungen ändern und die Lage einiger Ausgangspins haben sich geändert .

Das Board hat ca. die Größe eines Lolin D32 Pro .
Da ich nur mit FTDI232-Adapter flashe und dieser max ca. 30mA liefern kann ist es nicht möglich die komplette Schaltung mit allen Komponenten wie Neopixel , Cardreader usw. zu versorgen . Deshalb habe ich J9 vorgesehen . Dieser ist normalerweise nicht gesteckt und wird nur benötigt wenn man das Board außerhalb des „Motherboards“ flashen will . Das geht dann problemlos .
Das Motherboard ist theoretisch fertig , soll heißen alle Komponenten funktionieren auf einem Lochrasterboard wie erwartet . Die letzte Änderung von @Wolle funktioniert und ist auch erforderlich sonst ist Audio zu leise .
Bis Ali liefert habe ich jetzt Zeit das Layout zu erstellen . Es wird ähnlich sein wie das bereits von mir veröffentlichte , da ich die vorhanden Komponenten in den fertigen Boxen 1:1 übernehmen will .
VG

1 „Gefällt mir“

@Wolle ich habe das mal getestet . Für den Lautsprecher ist mir die max. Lautstärke etwas zu leise . Ich habe aber auch eine kleine Regalbox dran . Für Kopfhörer ok , wenn es auch im unteren Bereich etwas leise ist ( mit verschiedenen Kopfhören probiert). Ich habe es für Lautsprecher wieder herausgenommen . Der Regelbereich ist ok .
@biologist . Ich würde es so übernehmen . Kann ja jeder ändern wie er will und an seine Hardwarekomponenten anpassen . Im Zusammenhang mit den Einstellungen in der WEBGUI ist dann alles möglich und .
Auf jeden Fall bin ich vom A1S begeistert , nur noch wenige Komponenten erforderlich .
VG

Ich habe eine Frage an die User des ESP32-A1S Development Kits .
Gibt es beim Ein/Ausschalten ( auch beim Reset ) irgendwelche Knackgeräusche ? .

Das Datenblat des verwendeten NS5140 sagt folgendes:
Pop noise reduction function
The Pop Noise Reduction Function works in the cases of Power-on, Power-off, Power-down on, and Power-down off. And, the pop-noise can be suppressed according to control the power down by the following procedure.
・Power down mode is cancelled after power-on and the power supply is stabilized enough.
・Power down mode is set before Power-off.

Der CTRL-Pin liegt an GPIO21 und wäre damit per Software schaltbar .

Bei meinem A1S knackt es etwas, allerdings denke ich dass dies vom DAC AC101 kommt weil es auch im Kopfhörer leise hörber ist .

Wie verhält sich das Board bei euch ?

VG

Betrifft: analoge Tastenabfrage

Ich habe bei meinem neuen ESP32-A1S complete genug Pins . Trotzdem interessiert es mich ob und wie es im aktuellen Code möglich ist die Tastenabfrage per analogread zu lösen . Ich möchte keinen Portexpander verwenden, weil das wieder mehr Hardware erfordert . Per analoger Abfrage würde auch das Kabelwirrwarr im Gehäuse und die Anzahl der Buchsen auf dem Board deutlich reduziert werden .
Statt wie z.Bsp. bei mir 3 Tasten und Rotary mit insgesamt 8 Adern (GND , 3x Taste , 3,3V , CLK , DT , SW ) wären nur noch 2 Adern( GND , 1 x gemeinsam ) erforderlich .
HeadPhone detect lasse ich mal außen vor weil dort sowieseo ein Kabel wegen Audio hin muss .
Die z.Zt. noch 6 Adern für Ladestatus-LED und Single-Neopixel-LED werde ich mit 2 SMD-LED und LWL ersetzen .

@kobel , denkst du , dass es mit dem derzeitigen Stand der Software umzusetzen ist ? Dazu fehlen mir die Kenntnisse.

Hat sonst noch jemand einen Tipp dazu ?

VG