Forum: Mikrocontroller und Digitale Elektronik ESP32 A1S Eval


von Salvus M. (salvus)


Angehängte Dateien:

Lesenswert?

Moin oder auch Guten Morgen.

Ich habe hier ein ESP32 AI Thinker Modul ais China .

Wie fange ich damit an?

Zunächst möchte ich es als Wifi Server laufen lassen so das ich es im 
meinem Wifi Netz anmelden kann und dann eine eine kommunikation 
herstellle um Daten zu verarbeiten.

Da mein Englisch nicht so gut ist frage ich hier mal.

Da gibt es doch bestimmt ein EVAL System für den WIN7 Rechner .
Auf der seriellen kommt schon mal ein Boot meldung.

Wer Lust hat kann mir ja ein Link zusenden.

Gruss Salvus.

von Sebastian R. (sebastian_r569)


Lesenswert?

Salvus M. schrieb:
> Da mein Englisch nicht so gut ist frage ich hier mal.

Salvus M. schrieb:
> Wer Lust hat kann mir ja ein Link zusenden.

https://www.ils.de/fernkurse/fremdsprachen/englisch/technisches-englisch/

Ja, ich weiß, es ist nicht das, was du suchst, aber in der Welt der 
Programmierung und Elektronik kommst du um englisch eigentlich nicht 
umher. Alle Datenblätter siond auf Englisch. Viele Dokumentationen, 
Programme,... sind auf Englisch.

Ansonsten gibt es Webseiten, die einem automatisiert Links zu bestimmten 
Themen in einer bestimmten Sprache liefern, wenn man sie mit ein paar 
Suchbegriffen füttert. Nicht exakt Suchmaschine, aber ganz weit vorne 
liegt z.B. "Google".

Wenn man dort in die Suchzeile z.B. "ESP32 Tutorial Deutsch" eingibt, 
findet man sehr viele Ergebnisse.

Beitrag #5844438 wurde von einem Moderator gelöscht.
von Sebastian R. (sebastian_r569)


Lesenswert?

Salvus M. schrieb im Beitrag #5844438:
> ? schlecht geschlafen !!
> frust mit der freundin ?
> langeweile ?

So ähnlich :D
Eigentlich gehen mir nur Fragen auf den Keks, die nicht alle Angaben 
machen, um die Frage korrekt und umfassend zu beantworten.
Es ist zum Beispiel nicht hilfreich, wenn Fragensteller eine 
Programmier-Aufgabe lösen möchten und dabei nicht angeben, welche 
Programmierkenntnisse sie haben und in welcher Programmiersprache sie 
ihr Problem lösen möchten.

Da bleibt eigentlich nur Hilfe zur Selbsthilfe. Und es ist dann schade, 
wenn der Fragensteller eingeschnappt ist, weil man ihm keine 
Musterlösung präsentiert, sondern im sagt, wie und wo man Informationen 
finden kann. Es gibt z.B. Programmier-Umgebungen und Ökosysteme, bei 
denen alle Tools dabei sind und sogar schon Beispiel-Programme gegeben 
sind, die genau die vom Fragensteller geforderte Antwort liefern. 
Allerdings weiß ich nicht, ob es sinnvoll ist, darauf zu verweisen, da 
der Fragensteller verschweigt, in welcher Programmierumgebung er es 
lösen möchte.

Naja. Aber ansonsten ist alles gut. Danke der Nachfrage :D

von Michael U. (amiga)


Lesenswert?

Hallo,

Salvus M. schrieb:
> Ich habe hier ein ESP32 AI Thinker Modul ais China

ich habe nur 1 oder 2 Angebote gefunden, wo es das ESP32 A1S Eval 
überhaupt gibt. Der Preis war merklich über meiner "China-Grenze", also 
habe ich es nicht weiter verfolgt.
Ich hatte es nur interessant gefunden, weil I2S-Dac, Verstärker, SD-Slot 
usw. drauf sind.

Letztlich ist ja nur ein ESP32 drauf mit einigem Drumrum. Also 
ArduinoIDE, Unterlagen zum Board suchen oder/und Demosourcen, 
IC-Datenblätter, was da drauf ist usw. usw. und dann eben loslegen.

Wenn man erstmal nur einen Webserver raufwerfen will, reicht ja schon 
die IDE und die Examples, die dabei sind. Da muß man über den Rest ja 
noch nichts wissen.

Wie kommt man ausgerechnet an solch ein Modul, offenbar mit wenig 
Ahnung, was man da hat?

gruß aus Berlin
Michael

von Michael U. (amiga)


Lesenswert?

Hallo,

irgendwie interessant. Der benutzt I2S-Chip AC101 von X-Powers sieht 
interessant aus, bei github findet man
https://github.com/phkehl/esp32-a1s-audio_hal
zumindest grundsätzlich Unterlagen.

Arduino-Libs für den AC101 gibt es noch keine, aber das ist erstmal 
nebensächlich. Mal schauen, ob ich das Teil irgendwo bezahl- und 
beschaffbar finde...

Nachtrag: ich habe das Teil aus Neugier jetzt mal bestellt...
Könnte noch bis zum Wochenende hier sein.

Gruß aus Berlin
Michael

: Bearbeitet durch User
von Michael U. (amiga)


Lesenswert?

Hallo,

falls es doch jemanden interessiert:

Mein Board ist heute angekommen. Netterweise (oder auch nicht) wurd mir 
die neue Version v2.2 geliefert. Layout geringfügig anders, es gibt 
mittig jetzt einen 5-fach DIP-Schalter, der ist beschriftet, aber der 
Zweck ist mir nich völlig unklar...
Ansonsten meldet es sich seriell, aktiviert BT als Speaker. Win7 
connected den auch problemlos und spielt Musik darüber ab.
SD-Karte mit MP3 wird erkannt, Files werden seriell gelistet, aber zum 
Abspielen habe ich das noch nicht bekommen.
Suche im Netz ergab zu dieser Version bisher keine sinnvollen Infos.

Gruß aus Berlin
Michael

: Bearbeitet durch User
von Sven K. (quotschmacher)


Lesenswert?

hallo,

hat sich hier denn mitlerweile was getan? habe das board auch und bin 
gerade fleißig am infos sammeln und dabei auf diesen thread hier 
gestoßen...

von Michael U. (amiga)


Lesenswert?

Hallo,

naja, ich habe das Board gerade am letzten Wochenende wieder vorgekramt, 
dazwischen nicht wirklich was gemacht bzw. erreicht.
Es gibt eine Arduino-Lib für den Codec AC101:
https://github.com/Yveaux/AC101
Das Example läuft auf dem Board, komme im Moment aber nicht dazu, weiter 
zu machen.
Da ich die ESP8266Audio-Lib ganz gern benutze, will ich da eigentlich 
zusammen mit der Codec-Lib mal weitermachen, erstmal MP3 Play von SD und 
Streamplay für meinen IceCast-Stream. Mit ESP32 Wrover und ext. I2S-DAC 
habe ich das hier ja am Laufen.

Gruß aus Berlin
Michael

von Sven K. (quotschmacher)


Lesenswert?

danke für das feedback. ich wollte mich mal hierdran probieren: 
https://github.com/schreibfaul1/ESP32-audioI2S

gucken, ob man das zum laufen bekommt...

von Michael U. (amiga)


Lesenswert?

Hallo,

naja, das wäre ja eine völlig andere Baustelle. Er benutzt einen 
normalen ESP32 und einen externen I2S Decoder.
Auf dem Board hier ist ja ein ESP32A1S, also ein ESP32 Modul, daß 
bereits einen AC101 Audio-Codec enthält.
Und genau mit dem besagten AC101 muß man ja erstmal klarkommen...

Er hat da eine eigene Audio-Lib für die Play- und Streamfunktionen 
gebaut, ich benutze dafür die ESP8266Audio-Lib, das dürfte aber 
Ansichtssache sein.

Für das ESP32 A1S Board ist dieses Projekt relativ nutzlos.

Gruß aus Berlin
Michael

von Ich (Gast)


Lesenswert?

Salvus M. schrieb:
> Ich habe hier ein ESP32 AI Thinker Modul ais China .

Wo hast du das Board in China bestellt?

von Michael U. (amiga)


Lesenswert?

Hallo,

da die Preise alle ähnlich sind entweder bei Amazon, dauert eben auch 
3-4 Wochen oder
https://www.banggood.com/de/ESP32-Aduio-Kit-WiFi-bluetooth-Module-ESP32-Serial-to-WiFi-Audio-Development-Board-with-ESP32-A1S-p-1449256.html?rmmds=search&cur_warehouse=CN

da ist der Preis im Moment aber eher ungünstiger. Dauert auch 3-4 
Wochen.
Meins hatte ich damals für rund 22€ bei Amazon Prime gefunden, das war 
in wenigen Tagen da. Ist aber nicht mehr im Angebot.

Gruß aus Berlin
Michael

von Ich (Gast)


Lesenswert?

Michael U. schrieb:
> Hallo,
>
> da die Preise alle ähnlich sind entweder bei Amazon, dauert eben auch
> 3-4 Wochen oder
> 
https://www.banggood.com/de/ESP32-Aduio-Kit-WiFi-bluetooth-Module-ESP32-Serial-to-WiFi-Audio-Development-Board-with-ESP32-A1S-p-1449256.html?rmmds=search&cur_warehouse=CN
>
> da ist der Preis im Moment aber eher ungünstiger. Dauert auch 3-4
> Wochen.
> Meins hatte ich damals für rund 22€ bei Amazon Prime gefunden, das war
> in wenigen Tagen da. Ist aber nicht mehr im Angebot.
>
> Gruß aus Berlin
> Michael

Danke

von Sven K. (quotschmacher)


Lesenswert?

Michael U. schrieb:
> Auf dem Board hier ist ja ein ESP32A1S, also ein ESP32 Modul, daß
> bereits einen AC101 Audio-Codec enthält.
> Und genau mit dem besagten AC101 muß man ja erstmal klarkommen...

siehste - ich hab mir das board noch nicht genau angeguckt. dachte, da 
wäre der decoder auch über i2s angebunden. danke für die aufklärung!

von Paula Q. (bytebuffer)


Lesenswert?

Das Board gibt es hier für 21.96 € bei einem vernünftigen Händler aus 
Deutschland.

https://www.exp-tech.de/plattformen/esp32/9181/esp32-a1s-wi-fi-bt-audio-development-kit

von Michael U. (amiga)


Lesenswert?

Hallo,

Sven K. schrieb:
> siehste - ich hab mir das board noch nicht genau angeguckt. dachte, da
> wäre der decoder auch über i2s angebunden. danke für die aufklärung!

der Decoder (hier AC101) ist innerhaöb des ESP32A1S über I2S angebunden. 
Allerdings mußt Du eben dem AC101 noch beibringen, daß er ein vom ESP32 
kommendes I2S-Signal nach analog wandelt und ausgibt. Der AC101 kann 
nämlich noch einiges mehr und macht das nur, wenn man ihm das richtig 
sagt.
Und genau da hänge ich z.Z. noch etwas fest...

Gruß aus Berlin
Michael

von Michael U. (amiga)


Lesenswert?

Hallo,

so, vorhin etwas Zeit gehabt und das Audio-Kit vorgekramt.
Nach dem Sortieren der benutzten Pins und der DIP-Schalter läuft meine 
Webplayersoftware aus einem anderen Projekt und spielt artig über den 
ESP32A1S den Stream ab. Benutzt habe ich die AC101-Lib:
https://github.com/Yveaux/AC101
Außerdem die ESP8266Audio-Lib:
https://github.com/earlephilhower/ESP8266Audio

Gruß aus Berlin
Michael

von Sven K. (quotschmacher)


Lesenswert?

schön zu hören!

ich hab die beiden projekte jetzt mal kurz überflogen..
1
ESP8266Audio
 benötigt ein ausgabegerät. da dann "einfach" den
1
AudioOutputI2S
 aus dem
1
AC101
 projekt nehmen?

magst du deine erkenntnisse über die pins teilen?

Beitrag #6132740 wurde vom Autor gelöscht.
von Michael U. (amiga)


Angehängte Dateien:

Lesenswert?

Hallo,

alles so richtig wie Du es schreibst.

Da ich mir die ESP32-audioI2S-Lib sowieso mal genauer anschauen wollte:
https://github.com/schreibfaul1/ESP32-audioI2S
habe ich jetzt mal den AC101 in seinen Beispielcode gepackt. Lief auf
Anhieb.
Ich hänge den Sketch hier mal an, die Pinbelegung ist da mit drin.

Mal schauen, was ich da jetzt drumrum baue.

Gruß aus Berlin
Michael

von Sven K. (quotschmacher)


Lesenswert?

hab vielen dank. schau ich mir heute abend mal in ruhe an!

was mir bei einem deiner kommentare aufgefallen ist: ein taster liegt 
auf dem cs pin für die sd karte? das wäre dann ziemlich dämlich 
entworfen, oder? "wenn ihr was von der karte lest, drückt dabei bitte 
nicht den taster"

von Michael U. (amiga)


Lesenswert?

Hallo,

bei meiner Version mit DIP-Schaltern kann man das damit auswählen.
Da das aber keine Umschalter sind, kann man natürlich beides 
einschalten...
Meine Anmerkung ist mehr als Hinweis, daß man Key2 nicht zur Verfügung 
hat, wenn man eine SD-Karte benutzt.
Beschreibungen zu ESP32-Boards sind doch ohnehin immer etwas Glücksache, 
einen passenden Schaltplan der V2.2 suche ich sowieso immernoch.
JTAG ist bei dem Board ja auch extra rausgeführt und beißt sich dann mit 
anderen Belegungen, nutze ich aber ohnehin nicht.

Die Tasten sind mit Widerständen codiert, die bestückt/nicht bestückt 
sind, Wertangaben fehlen da natürlich...
Key1 dürfte bei mir an GPIO36 sein. Man könnte auch so bestücken, daß 
alle Tasten als Spannungsteiler geschaltet werden und mit dem ADC an 
GPIO36 abgefragt werden könnten.

Gruß aus Berlin
Michael

von Torsten (Gast)


Lesenswert?

Ich habe vor ein paar Tagen ein Projekt veröffentlicht, welches rein von 
der Idee ein Tonuino ist. Es basiert jedoch auf einer komplett eigenen 
Code-Basis. Ich erwähne es deshalb, weil es einerseits einen ESP32 
verwendet, andererseits einen breiten Tonuino-Funktionsumfang umsetzt, 
den Audio-Output jedoch via I2S macht. Tatsächlich setze ich die bereits 
von euch referenzierte Lib 
https://github.com/schreibfaul1/ESP32-audioI2S. Ich finde es ja 
interessant, dass die AC101 quasi genauso aussieht und wüsste gerne mal, 
wer da von wem abgekupfert hat, hehe.

Wie auch immer, mein Code liegt hier: 
https://github.com/biologist79/Tonuino-ESP32-I2S

Wichtig ist an dieser Stelle zu erwähnen, dass es noch "im Fluss" ist 
und sich täglich an der Codebasis was ändern kann. Was bereits 
funktioniert ist auf Github auf jeden Fall beschrieben und wird auch 
noch erweitert. Es fehlt noch der Webserver, über den man verschiedene 
Parameter konfigurieren kann und über den auch den RFIDs Aktionen 
zugewiesen werden. Aktuell sind noch zwei Webserver-Libs eingebunden, 
aber das werde ich komplett auf ESPAsyncWebServer umstellen. Da 
Webdesign nicht so meins ist, schiebe ich diesen Part irgendwie ein 
wenig vor mir her, hehe. Im Optimalfall schwebt mir eine GUI mit 
Treeview der Struktur der SD-Karte auf Basis von Bootstrap oder Angular 
vor. Und zwar optimalerweise so, dass Unterverzeichnisse dynamisch 
nachgeladen werden, wenn man draufklickt, weil dieser Prozess rekursiv 
für / halt ein bisschen dauern kann, wenn da viele Files am Start sind. 
Aber ob ich das so hinkriege und die Muße dafür habe, weiß ich noch 
nicht. Werde wohl erstmal mit der einfachen /-Variante starten.

Der Code liegt auf jeden Fall hier:
https://github.com/biologist79/Tonuino-ESP32-I2S
War viel Arbeit (auch wenn ich Spaß dran hatte), das auf eine eigene 
Code-Basis zu stellen. Vielleicht hilft es euch ja, für das Board, so 
dass ihr das Rad nicht neu erfinden müsst. GPIOs wird man auf jeden Fall 
anpassen müssen und ggf. kann man den Drehencoder auch nicht nutzen, 
weil die Anzahl der rausgeführten GPIOs nicht reicht. Aber das war nur 
mein erster Eindruck; mit der chinesischen Doku tue ich mir etwas schwer 
:-)

von Michael U. (amiga)


Lesenswert?

Hallo,

Ich hatte das ESP32A1S-Kit nur zum Spaß bestellt, außer dem 
https://github.com/phkehl/esp32-a1s-audio_hal
war da wenig zu finden. Da ich keine wirkliche Lust hatte, mich durch 
das IDF zu wühlen, lag alles erstmal rum. Der AC101 ist ja recht komplex 
mit seinen Funktionen, das werde ich mir auf jeden Fall noch genauer 
anschauen.
Die AC101 Lib hatte ich dann mehr durch zufall gefunden.
Da ich mich meist in der ArduinoIDE rumtreibe, sparte das einfach 
Arbeit.
Über die ESP32-audioI2S bin ich auch nur zufällig gestolpert.
Eigentlich gibt es hier 2 Streamplayer, einer in eine alte 
Sony-Centerbox eingebau und einer in einem Pollin-BT-Lautsprecher. Die 
speilen beim Einschalten einfach meinen provaten IceCast-Strem hier von 
einem RasPi.
Ansonsten noch ein Dauerprojekt mit LCD-Touch, Streamplay mehrerer 
Streams und Play von SD-Card. Ansätze für Uhr und Wecker sind drin, 
keine Ahnung, ob das je was fertiges wird...
Das alles basiert auf der ESP8266Audio-Lib und verschiedenen I2S-DACs 
dran, auch die MAX98357 waren da schon dran.
Über das Tonuino war ich schon gestolpert, da fehlte noch eine 
Verwendung bei mir.
Ansich ist der AC101 ja kein Hexenwerk, sind letztlich ja erstmal viel 
defines und ein paar Grundfunktionen. Aufwand machen ja die Feinheiten, 
das Zusammenspiel der internen Komponenten usw. Da ist aber mehr 
Datenblattstudium angesagt. Da werde ich aber nur ins Detail gehen, wo 
mir eine ganz konrete Anwendung einfällt.

Gruß aus Berlin
Michael

von Torsten (Gast)


Lesenswert?

Wir sind uns ja, in verschiedenen Foren, jetzt schon öfter über den Weg 
gelaufen. Die Welt ist klein :-)
Die ESP8266Audio-Lib hatte ich auch schon in Verwendung. Was mir daran 
gut gefällt ist der modular zuschaltbare Puffer. Was mir nicht so 
gefällt ist die Lautstärkeregelung mit float-Werten von 0 bis 4. Das 
gefällt mir in der "Schraubfaul-Lib" besser. Gut, über ein Array könnte 
ich mir natürlich float auf int mappen, das wäre jetzt kein Showstopper.

Ich fand die Tonuino-Idee einfach gut und da ich kleine Kinder habe, hat 
das auch gepasst. Mir ist allerdings noch ein Teilprojekt dazu in den 
Sinn gekommen. Und zwar habe ich im Keller kein WLAN (dafür aber 
Ethernet), weil ich es an für sich nicht brauche. Wohl aber ne Anlage 
und manchmal würde ich beim Schrauben/Basteln da unten gerne Webradio 
hören. Ich werde mir also einen Tonuino bauen, allerdings mit Ethernet, 
Line-Ausgang und (außer Drehencoder für laut/leise/aus/an) keine Tasten. 
Den stecke ich dann einfach ein und lege mir nen Satz RFID-Karten für 
meine Webradios hin. Also im Grunde mein o.g. Projekt in reduziert, aber 
Ethernet statt Wifi.

von Michael U. (amiga)


Lesenswert?

Hallo,

ja, die Welt ist klein. :-)
Ich muß mir die ESP32-audioI2S unbedingt mal genauer anschauen. Das Ding 
spielt hier jetzt schon den ganzen Tag ohne Aussetzer. Hier sorgt 
eigentlich die WLAN-Auslastung auch durch viele Nachbarn immer mal für 
einen Reconnect und damit ist relativ viel Buffer für die Streamdaten 
nötig.
Irgendwie hat er das in seiner Lib besser gelöst als die ESP8266Audio.
Einen Abkömmling des Tonuino wird es hier wohl auch geben, bei mir dann 
mittlerweile für die Urenkel...
Bei Deinem Kellerproblem würde es bei mir wohl eher bei einem alten 
Router oder sonstigen AP enden, der dort ein lokales WLAN aufspannt. 
Macht dann das nächste ESP-Modul z.B. als Sensor auch einfacher. ;-)

Ähnliches macht ja mein Pollin-Teil:
https://www.pollin.de/p/portabler-designlautsprecher-schwarz-641081
inzwischen für 3,99€...
Das hat Original eine USB-Soundkarte drin und einen LineIn. Am LineIn 
hängt der ESP32+I2S-Decoder. Prinzipiell hätte der Audiochip da drin 
selbst I2S in, passte aber alles nicht so richtig zusammen.
Batteriefach ist für 4xAAA, also gelich ein USB-Netzteil ran, die 
Batterien sind nach wenigen Stunden leer.
Eigentlich wäre das auch was für den Tonuino, jmuß ich mir mal durch den 
Kopf gehen lssen und notfalls noch welche bei Pollin bestellen, bevor 
die alle sind.

Gruß aus Berlin
Michael

von Wolle (Gast)


Lesenswert?

Hallo,
auf diesem Thread bin ich durch Zufall gestossen nachdem einige Besucher 
meies Github Repositorys https://github.com/schreibfaul1/ESP32-audioI2S 
von diesem Forum verlinkt wurden.
Ich wusste gar nicht, dass der ESP32-A1S überhaupt so angesteuert werden 
kann wie ein normaler DAC. Danke an Michael für seine gute Arbeit!.
Nun habe ich zwei A1S Audioboards von AI Thinker zum testen bestellt die 
nach 3 Wochen Wartezeit aus China geliefert wurden. Die 
AC101_I2S_Audiolib-Test.ino von Michael lief sofort. Zwei Lautsprecher 
lassen sich über die eingebauten Verstärker (je 3W) problemlos 
ansteuern. Ein TFT-Display lässt sich jedoch nicht so einfach anbinden. 
Die GPIOs 5,13,18,19 und 23 sind zwar über die Stiftleiste herausgeführt 
aber alle mit einem Kondensator (gemessen: 100nF) nach Masse geblockt. 
Das soll sicher ein Prellschutz für die Tasten sein ist aber für 
höherfrequente Signale vollkommen schädlich. Nachdem ich die 
Kondensatoren C57-C61 ausgelötet habe sind die GPIOs nutzbar. Schade, 
dass GPIO2 (MISO) nicht zugänglich ist. Auch ein 5V-Pin wäre 
wünschenswert. Hier die Schaltung meines Audioboards (hab die V2.2) 
https://github.com/schreibfaul1/ESP32-audioI2S/blob/master/examples/ESP32-A1S/A1S.pdf

vG Wolle

von Michael U. (amiga)


Lesenswert?

Hallo,

Wolle schrieb:
> Ich wusste gar nicht, dass der ESP32-A1S überhaupt so angesteuert werden
> kann wie ein normaler DAC. Danke an Michael für seine gute Arbeit!.

Danke zurück für die Lib von mir.
Mein Audioboard 8auch die V2.2) liegt leider jetzt schon länger etwas 
raum...
Ich habe auch eingegriffen und etwas umgelötet, ich schau mal nach, wie 
genau...
Card Select from SD-Slot aufgetrennt, brauch ich real nicht. Ich will da 
eigentlich noch einen RFID-Reader per SPI ranhängen, passt prinzipiell 
mit dem HTAG-Anschluß (nutze ich nicht), CS und evtl. Reset für den 
Cardreader muß ich noch sinnvoll zuordnen. Letztlich soll es für einen 
tonduino-Abkömmling dienen, das Audioboard als Testplattform. Ich hatte 
inzwischen ein paar nackte ESP32-A1S aus China bestellt, einer läuft 
hier im Test als reiner Streamplayer meines internen IceCast-Streams mit 
einem Pollin-Lautsprecher:
https://www.pollin.de/p/portabler-designlautsprecher-schwarz-641081
Da wird das ESP32-A1S-Modul dann direkt eingebaut, als 
"Klo-Lautsprecher" o.ä. Ein BEkannter hat sich da gleich 10 Stück 
jeweils bestellt und "beschallt" sein halbes Haus schon damit, MQTT und 
Webserver zur Steuerung jeweils mit drauf, da bastelt er noch dran rum.
Ich komme im Moment etwas selten dazu, da weiterzumachen, Rentner haben 
eben niemals Zeit... ;-)

Gruß aus Berlin
Michael

von Wolfgang F. (schreibfaul1)


Angehängte Dateien:

Lesenswert?

Hallo Michael,
IO2 (MISO) der SD-Karte habe ich nun auf eine Stiftleiste gelegt. Somit 
kann das vorhandene SPI auch extern benutzt werden, ohne einen SPI2 
aufzumachen. Desweitern auch mit IO4 und +5V. Die Stiftleiste habe ich 
einfach mit Sekundenkleber auf das Board wo noch Platz war geklebt. Die 
Vebindungen sind Fädeldraht. Ein TFT Display mit ILI9341 läuft mit dem 
Board super. Zwei Brüllwürfel sorgen für den notwendigen Krach :-)
Mit einem ordentlichen Gehäuse könnte das ein gutes Zweitradio (mit MP3 
Player) werden. Hab sogar noch zwei GPIOs für Erweiterungen frei.

vG
Wolle

von Thomas G. (Gast)


Lesenswert?

Hallo,
auch ich hab mir das AI-Thinker V2.2 Board bestellt und damit ein wenig 
probiert. Als Basis nutze ich das A1S example von Wolle ( Vielen 
Dank!!).
Mir ist aufgefallen, dass mein Board vor allem bei Sprache erkennbare 
Verzerrungen produziert. Als Grund vermute ich ein Problem beim clocking 
des AC101.
Wenn ich das richtig verstehe, gibt der ESP32 das MCLK-Signal nicht aus. 
In der AC101.cpp wird aber MCLK als Clock source gesetzt.

Wenn ich also in der ACA101.cpp unter AC01::begin folgendes ändere:
1
// Clocking system
2
  //ok &= WriteReg(SYSCLK_CTRL, 0x8b08); // 1000 1011 0000 1000
3
  ok &= WriteReg(SYSCLK_CTRL, 0xab08); // 1010 1011 0000 1000

verbessert sich der Klang (bei mir) deutlich. Die Änderung stellt die 
PLL-Quelle auf BCLK.

Grüße
Thomas

von Stef J. (poeffy)


Lesenswert?

Wolfgang F. schrieb:
> Hallo Michael,
> IO2 (MISO) der SD-Karte habe ich nun auf eine Stiftleiste gelegt. Somit
> kann das vorhandene SPI auch extern benutzt werden, ohne einen SPI2
> aufzumachen. Desweitern auch mit IO4 und +5V. Die Stiftleiste habe ich
> einfach mit Sekundenkleber auf das Board wo noch Platz war geklebt. Die
> Vebindungen sind Fädeldraht. Ein TFT Display mit ILI9341 läuft mit dem
> Board super. Zwei Brüllwürfel sorgen für den notwendigen Krach :-)
> Mit einem ordentlichen Gehäuse könnte das ein gutes Zweitradio (mit MP3
> Player) werden. Hab sogar noch zwei GPIOs für Erweiterungen frei.
>
> vG
> Wolle

Darf ich da nochmal kurz nachhaken? Ich hatte in einem Nachbarthread 
einen SPI2 aufgemacht und den Clock für den RC5222 stark reduzieren 
müssen (Beitrag "ESP32 Esp32-Audio-Kit A1S v2.2 + RC522") ich vermute das 
liegt an den Kondensatoren, dass man dort keine höher frequenten Signale 
anlegen kann?

Meine Frage nun: Wie hast du genau den SPI-Bus der SD-Card für den 
RC5222 zugänglich gemacht? Ich sehe du hast zwei Drähte an den SD-Card 
Slot gelötet? Welche Ports sind das genau? Für was benötigst du die +5V? 
Bei mir läuft der RC5222 mit 3.3V?

Grüße
Chris

von Wolfgang F. (schreibfaul1)


Lesenswert?

Hallo Chris,
ich brauche die +5V für ein RPI Display (320x480px), 3,3V reichen leider 
nicht aus. Um IOs zu sparen benutze ich nur einen SPI Bus (für TFT, 
Tochpad und SD gemeinsam). Dazu habe ich MISO der SD Karte auf eine 
extra Stiftleiste gelegt. Wenn du die IOs der Taster benutzen möchtest 
empfielt es sich die Kondensatoren C56...C61 die parallel zu den Tastern 
liegen auszulöten.

vG
Wolle

von Stef J. (poeffy)


Lesenswert?

Wolfgang F. schrieb:
> Hallo Chris,
> ich brauche die +5V für ein RPI Display (320x480px), 3,3V reichen leider
> nicht aus. Um IOs zu sparen benutze ich nur einen SPI Bus (für TFT,
> Tochpad und SD gemeinsam). Dazu habe ich MISO der SD Karte auf eine
> extra Stiftleiste gelegt. Wenn du die IOs der Taster benutzen möchtest
> empfielt es sich die Kondensatoren C56...C61 die parallel zu den Tastern
> liegen auszulöten.
>
> vG
> Wolle

Achso dann hab ich das falsch verstanden. Dachte du hast auch mit den 
RC5222 experimentiert und an den SD-Card SDMMC angeschlossen.

Aber das müsste doch ebenfalls funktionieren, oder? Für den RC5222 
benötige ich einen MISO, MOSI, CLK, CS und einen RST. Meinst du man kann 
die beiden kaskadieren oder sollte man eher auf eine Sternverbindung 
zurück greifen? Bevor ich dort anfange an den Pins zu löten wollte ich 
erstmal auf Nummer sicher gehen dass das theoretisch funktionieren 
könnte :-)

von Stef J. (poeffy)


Lesenswert?

Wolfgang F. schrieb:
> Hallo Chris,
> ich brauche die +5V für ein RPI Display (320x480px), 3,3V reichen leider
> nicht aus. Um IOs zu sparen benutze ich nur einen SPI Bus (für TFT,
> Tochpad und SD gemeinsam). Dazu habe ich MISO der SD Karte auf eine
> extra Stiftleiste gelegt. Wenn du die IOs der Taster benutzen möchtest
> empfielt es sich die Kondensatoren C56...C61 die parallel zu den Tastern
> liegen auszulöten.
>
> vG
> Wolle

Ich hab mir jetzt ein zweites Board geholt und wollte an den SPI Bus der 
SD Card ran. Ich sehe dass du zwei Kabel an zwei Ports der SD-Card 
angelötet hast? Im Text beschreibst du aber, dass du nur den MISO Port 
benötigst. Wieso dann zwei Kabel? Ist das obere oder das untere der MISO 
Port?

Vielen lieben Dank für deine Hilfe
Chris

von Wolfgang F. (schreibfaul1)


Lesenswert?

Ja, das ist richtig. Ich habe noch GPIO4 für eventuelle Erweiterungen 
herausgeführt. GPIO4 wird bezüglich der SD-Card nicht benutzt, ist also 
für den SPI-Bus nicht notwendig.
vG Wolle

von Stef J. (poeffy)


Lesenswert?

Vielen Dank für deine Hilfe.

OK, so ganz verstehe ich leider immernoch nicht wie du neben der SD-Card 
noch einen weiteren Slave auf diesem SPI-Bus verwenden kannst, da du nur 
Zugang zu dem MISO Port hast? Liege ich richtig, dass du eine 
SPI-Sternverbindung verwendest? 
(https://de.wikipedia.org/wiki/Serial_Peripheral_Interface)

Dann hätten wir jetzt über I02 den gemeinsamen/geteilten MISO-Port. 
Jetzt benötigen wir doch noch einen gemeinsamen SCLK/SCK Port und einen 
gemeinsamen MOSI-Port. Über getrennte Chip Select Leitungen können wir 
dann die Slaves ansprechen/auslesen?
Kommt man an diese Ports über die richtige DIP-Schalterstellung und 
andere Ausgänge auf dem Board heran, oder wie löst du dieses Problem?

Es tut mir leid, dass ich dir solche Löcher in den Bauch frage, aber 
bevor ich mit meinen Lötfähigkeiten anfange auf dem Board rumzubasteln, 
würde ich lieber genau vorher Bescheid wissen.

Grüße
Chris

von Wolfgang F. (schreibfaul1)


Lesenswert?

Ich habe den SPI-Bus nicht geteilt. Alle Slaves liegen parallel auf dem 
SPI. Über CS wird der Slave ausgewählt, dazu benötigt jeder eie eigene 
Leitung, so wie auf diesem Bild: 
https://obrazki.elektroda.pl/2824647100_1536587694.png . CLK (GPIO14) 
und MOSI (GPIO15) liegen bereits auf einer Stiftleiste und heißen dort 
MTMS und MTDO. Hier der Schaltplan von dem Board: 
https://github.com/schreibfaul1/ESP32-audioI2S/blob/master/examples/ESP32-A1S/A1S.pdf 
Die Schalter sind 1-off und 2...5-on. Hoffe, das hilft weiter.

vG Wolle

von Stef J. (poeffy)


Lesenswert?

Perfekt, vielen Dank. Das bestärkt mein Vorhaben den SPI-Bus der SD-Card 
zu verwenden. Mal sehen ob ich das vernünftig praktisch umsetzen kann 
:-)

von Torsten (Gast)


Lesenswert?

@Michael:
Hattest du eigentlich Erfolg dabei, einen RFID-Reader am genannten Board 
zum Laufen zu bringen?

@Wolle:
Sind die von dir genannten 100 nF-Caps auf deinem Board namentlich 
eingezeichnet? Weil bei mir sind sie es nicht (v2.2) und ich bin mir gar 
nicht so sicher, wo genau die liegen. Das Einzige, was ich sehe, ist R66 
bis R70 und jeweils zwischen diesen Widerständen und den Keys 2 bis 5 
ist dann jeweils ein weiteres Bauteil eingelötet, welches jedoch nicht 
beschriftet ist.

von Peter B. (pewibe)


Angehängte Dateien:

Lesenswert?

Ich habe (wie andere auch) ein solches Board V2.2 und würde es gern 
zusammen mit einem RFID zum Leben als Musiktruhe (Projekt Tonuino) 
erwecken. Neben der Software (hier kümmert sich Gast Torsten darum) geht 
es um den möglichst "schmerzfreien" Anschluss eines RFIDs. Daneben habe 
ich die eine und andere Unsicherheit / Frage wahrgenommen, weswegen ich 
meine bisherigen Erkenntnisse zum Board zur Diskussion / Bestätigung 
stellen möchte (siehe auch Foto):

1. Die Keys 1..6 können analog über IO36 erfasst werden und benötigen 
keine einzelnen IOs.

2. Ergänzend zu 1. können die orange-umrandeten Widerstände R66..70 ( je 
0 Ohm, also Drahtbrücken) „durchgeknipst“ werden, womit IO5, IO18, IO23, 
IO19 frei werden und an P2 zur freien Nutzung (ohne parallele 
Kondensatoren) verfügbar sind. IO13 hängt damit zwar auch nicht mehr an 
Key2, wird aber für den SD weiter als CS benötigt.

3. Mäuseklavier S1: Wird der SD benutzt, generiert IO13 den CS dafür 
(also S1.1 = OFF,  S1.2 = ON,  S1.4 = OFF) und IO15 den MOSI (also S1.3 
= ON,  S1.5 = OFF). Setzt man zusätzlich S1.4 und S1.5 = ON, so liegt 
wahrscheinlich IO15 / MOSI auf P1.1 und IO13 / CS auf P1.2.

4. JTAG / P1: Die Belegung mit IO15, IO13, IO12, IO14 bringt einen Teil 
des SPI (MOSI, CS_SD, frei, CLK) an Pfosten, leider aber nicht MISO / 
IO2. Den freien IO12 kann man wohl als CS_ExternalDevice (z.B. CS_RFID) 
einsetzen.
--> Vermutung: Setzt man S1.4 = OFF, so liegt CS_SD nicht am P1.2 an und 
man hätte einen freien Pfosten, um MISO / IO2 darauf zu „verdrahten“. 
Als Ergebnis wäre P1 ein kompletter Pfosten für ein RFID (bis auf GND / 
V3.3, was es aber wenigstens auf P3.1 / P3.6 gibt).

5. P2 / P3: Neben 2x GND und 2x V3.3 stehen 6 IOs zur Verfügung.
P2.1 / IO21 ist als Output mit dem Ein-Aus-Schalten der beiden Endstufen 
3W belegt.
P2.2 / IO22 ist als Output mit dem Ein-Aus-Schalten der LED4 belegt, was 
aber kein Hemmnis für eine Benutzung als Ausgang sein muss. Knipst man 
R14 (neben D4) durch, so ist der Pin frei und auch als Eingang zu 
verwenden.
P2.3 / IO19 ist als Output mit dem Ein-Aus-Schalten der LED5 belegt, was 
aber kein Hemmnis für eine Benutzung als Ausgang sein muss. Knipst man 
R76 (neben D5) durch, so ist der Pin frei und auch als Eingang zu 
verwenden.
P2.4 / IO23, P2.5 / IO18, P2.6 / IO5 sind bei Beachtung von 2. Frei und 
können in beide Richtungen verwendet werden.

6. J1  Earphones  Headphone: IO39 / HP_Detect (ESP32 SENSOR_VN) kann 
als Input benutzt warden, um das Einstecken der Phones zu detektieren.
--> Problem: Im Schaltplan ist hier ohne Bezug zu einer Leitung der IO12 
erwähnt, der an SD1 anliegt und im SPI-Modus für SD frei ist. Ich 
vermute einen Fehler im Schaltplan.

7. Ohne Stecker / Pfosten: Wenn der SD im SPI-Modus gefahren wird, ist 
der IO4 (DATA1) unbenutzt und steht intern an SD1.8 als Output bzw. 
Input mit 10K Pullup zur Verfügung.

Für den Anschluss eines RFIDS (über SPI) ist Löten wohl nicht zu 
umgehen. Entsprechend meinem Punkt 4 wäre der kleinste Eingriff wohl ein 
Draht von SD1.7 auf P1.2 für MISO / IO2. Oder – Frage an die Runde – 
kann man den IO2 / MISO irgendwie auf einen anderen, freien IO 
„duplizieren“, ohne die Bibliothek für den SPI / SD ändern zu müssen? 
Das würde den Draht ersetzen können.

von Chris (Gast)


Lesenswert?

Thomas G. schrieb:
> 0xab08

Thomas G. schrieb:
> Wenn ich also in der ACA101.cpp unter AC01::begin folgendes ändere://
> Clocking system
>   //ok &= WriteReg(SYSCLK_CTRL, 0x8b08); // 1000 1011 0000 1000
>   ok &= WriteReg(SYSCLK_CTRL, 0xab08); // 1010 1011 0000 1000

Das kann ich übrigens bestätigen. Ich habe das gefühl das es weniger 
"klirrt"

von Alfredo (Gast)


Lesenswert?

Hallo

ich bin neu hier und danke für die vielen wertvollen Informationen.
Kann mir noch jemand verraten, welchen ESP Controller ich unter Arduino 
einstellen muss? Der ESP32-A1S ist ja noch nicht vertreten.

von Wolfgang F. (schreibfaul1)


Angehängte Dateien:

Lesenswert?

Das sind meine Einstellungen in Eclipse. In der Arduino-IDE kann das 1:1 
übernommen werden.

von Alfredo (Gast)


Lesenswert?

Vielen Dank

von Alfredo (Gast)



Lesenswert?

Hallo
ich habe die Einstellungen für Arduino übernommen und die Libs ins 
Projektverzeichnis eingestellt (siehe Anlage 1). Trotzdem bekomme ich 
noch Fehlermeldungen (Anlage 2,3)?
Wird die Datei dummy.h benötigt ?

von Wolfgang F. (schreibfaul1)


Lesenswert?

Die Libs werden als *.zip von GitHub heruntergeladen und mit der 
Adruino-IDE installiert (Bibliothek einbinden/ZIP-Bibliothek 
hinzufügen...) Es müssen keine Dateien ins Projektverzeichnis kopiert 
werden.

von Alfredo (Gast)


Lesenswert?

Herzlichen Dank.  Da habe ich wieder etwas dazugelernt!

von Torsten (Gast)


Lesenswert?

Meinen Tonuino-Fork (https://github.com/biologist79/Tonuino-ESP32-I2S) 
habe ich gestern zum Laufen gebracht auf diesem Board. Kurz zur 
Beschreibung: Man steuert mittels RFID letztlich, was gespielt werden 
soll. Also RFID-Tags sind immer mit Aktionen verknüpft so alà "Spiele 
Verzeichnis x im Modus Hörspiel". Man legt sie also auf und dann gehts 
los. Also für Kinder einfach bedienbar. Weiterhin gibt es drei Tasten: 
vor, Pause/Play, zurück und einen Drehencoder, mit dem man lauter/leiser 
und aus/einschalten kann. Es gibt eine GUI, über die man diverse 
Parameter konfigurieren kann (z.B. neue RFID-Tags anlernen), einen 
Neopixel, der verschiedene Dinge signalisiert und einen FTP-Server, über 
den man Files auf die SD-Karte kopieren kann. Steuerbar ist das Ganze 
auch per MQTT. Verwendet wird die Lib von Wolfgang zum Dekodieren von 
mp3s. Webstreams werden entsprechend auch unterstützt.

Zum Board:
Es besitzt Keys 1-6, die jedoch auch entsprechend viele GPIOs belegen. 
Durch Auslöten der Widerstände R66, 67, 68, 69 und 70 habe ich die 
Tasten erstmal von den GPIOs abgekoppelt, so dass auch keine 
Kondensatoren auf den GPIOs "lasten" und diese damit für andere Dinge 
nutzbar werden. Der Schaltplan sieht vor, dass man alternativ die Taster 
auch analog via GPIO36 über Spannungsteiler auslesen kann. Die dazu 
notwendigen Widerstände 55/60, 56/61, 57/62, 58/63, 59/64 muss man 
jedoch selbst bestimmen und dann auch einlöten. Bauform ist (glaube ich; 
habe keine Erfahrung mit SMD) SMD0603. Habe ich auf jeden Fall noch 
nicht gemacht; ist nur eine Idee. Ausgelötet habe ich zudem den 
Widerstand für D4, so dass diese LED nicht mehr leuchtet.

SPI läuft via:
CS (SD): 13 (erreichbar via Pin-Header)
CS (RFID): 12 (erreichbar via JT_MTDI)
MOSI: 15 (erreichbar via JT_MTDO)
MISO: 2 (muss man an Pin7 des SD-Slots anlöten)
SCK: 14 (erreichbar via JT_MTMS)

RFID an GPIOs, die nicht dem SPI-Default entsprechen, unterstützt die 
originale Lib (https://github.com/miguelbalboa/rfid/) nicht. Habe daher 
eine Angepasste verwendet: 
https://github.com/madias123/STM32duino-RFID-Mp3-Player/tree/master/3d%20party%20libraries%20(modified)/MFRC522.
RFID.RST habe ich mit GPIO 35 initialisiert. Spielt keine Rolle, man 
benötigt ihn nicht und muss den Pin gar nicht anschließen.

An freien GPIOs bleiben jetzt noch:
4 (muss man sich von SD.8 holen (anlöten); Drehencoder.Button würde ich 
bei mir drauflegen, da man GPIO4 zum Aufwecken des ESP verwenden kann)
5 (Drehencoder.CLK)
18 (Drehencoder.DT)
19 (ggf Power. D.h. da hänge ich eine Mosfet-Schaltung dran, die zum 
Stromsparen externe Peripherie ein/abschaltet, wenn der ESP im Deepsleep 
ist.)
22 frei
23 (Neopixel)

Dip-Schalter: off  on  on / off /on

Bei 22 kann man sich jetzt überlegen, ob man dort zB extern Buttons 
dranhängt und via Spannungsteiler analog ausliest. Habe ich noch nicht 
gemacht, aber wäre eine Option.

Ohne RFID zieht das Board im Deepsleep ca. 30 mA, was halt schon recht 
viel ist, wenn man es mit Akku betreiben will. Akkubetrieb habe ich 
nicht getestet. 105 mA sind es mit WiFi im Idle-Modus.

Ansonsten kann man GPIO39 benutzen, um zu detektieren, ob ein Kopfhörer 
eingesteckt ist. Ist das der Fall, so ist der Zustand "low" und man kann 
entsprechend die Lautsprecher abschalten (und umgekehrt beim 
Ausstecken). Beim Testen fiel mir auf, dass das gar nicht so trivial ist 
mit dem Einstecken. Denn andererseits prellen low/high hier 4-5 mal und 
andererseits ist mir das Board mitunter beim Einstecken auch mal 
abgestürzt.

Habe mir das Ganze jetzt gewissermaßen in Kooperation mit Peter B. 
erarbeitet; er hat mir das Board zur Verfügung gestellt. Er fand die 
Idee interessant, dass man quasi alles schon fertig hat und ich wollte 
mal sehen, ob ich darauf meine Software zum Laufen bringw. Man muss 
allerdings schon auch ein paar Dinge löten, insofern ist es auch kein 
Selbstläufer.

Den Code findet man hier: 
https://github.com/biologist79/Tonuino-ESP32-I2S/tree/master/Hardware-Plaforms/ESP32-A1S-Audiokit. 
Wobei ich sagen muss, dass mein eigentlicher Fokus bei einem Lolin32 in 
Verbindung mit MA98357A als Amp und einer Custom-Kopfhörer-Platine 
liegen wird.

von Sascha H. (sascha_h297)


Lesenswert?

Servus,
Ich bin unglücklicherweise an 2 esp32-a1s gekommen Version 2.2 ai 
thinker.
Hab leider noch nicht mit platformio gearbeitet und bin leicht 
überfordert den  build von biologist79 damit aufzuspielen.
Wäre es möglich, dass mir wer davon eine bin erzeugt oder ein Arduino 
Projekt?

Gruß Sascha

von Sascha H. (sascha_h297)


Lesenswert?

Sry für Doppelpost. Hab heute mit der Arduino ide einen Beispielcode wie 
im Thread schon erwähnt aufgespielt. Nun läuft zumindest 1 webstream. 
Board ist also i.O..

Würde gerne den Fork von biologist79 aufspielen.
Was muss man in PlatformIO löschen bzw verschieben, damit er alles 
compiliert und dies für das Audio Kit passt?

von Alfredo (Gast)


Lesenswert?

Auf dem ESP32 A1S Kit ist bei Lieferung ein Bluetooth-Player geladen. 
Weiß jemand zufällig, wo ich den Code dazu finde? Ich möchte ihn mit 
Web-Radio und mp3-Player kombinieren.

von Michael U. (amiga)


Lesenswert?

Hallo,

kannst ja hiermit anfangen:
https://github.com/pschatzmann/ESP32-A2DP

Gruß aus Berlin
Michael

von Alfredo (Gast)


Lesenswert?

Michael U. schrieb:
> Hallo,
>
> kannst ja hiermit anfangen:
> https://github.com/pschatzmann/ESP32-A2DP
>
> Gruß aus Berlin
> Michael

Herzlichen Dank - schaut gut aus !!

von Alfredo (Gast)


Lesenswert?

Nach dem Upload ( Leaving..., Hard resetting via RTS pin...)
 bekomme ich oft die folgende Fehlermeldung:
"Ungültige Bibliothek D:\Dok\Arduino\libraries\AC101-master in Missing 
'paragraph' from library gefunden"
obwohl alles funktioniert. Was läuft falsch?

von Andreas B. (andreas-ab)


Lesenswert?

Michael U. schrieb:
> Lief auf
> Anhieb.

Stimmt. Ich hab deinen Sketch vor ein paar Tagen mal ausprobiert. Es war 
direkt unheimlich. Das hab ich ja noch nie erlebt: Quellen übersetzen, 
Board flashen, geht! Merci.

Was mich allerdings bei diesem Board wundert ist, warum die Entwickler 
von AI-thinker für die Taster so viele GPIOs verplempert haben. 
Funktioniert denn die alternative Schaltung mit dem Analog-Eingang nicht 
so gut? Irgendwie ist alles vorbereitet worden, aber man hat trotzdem 
die andere Variante vorgezogen.

Grüße vom Bodensee
Andreas

von Marcel L. (marlic)


Angehängte Dateien:

Lesenswert?

Hallo in die Runde!

Ich habe auch ein paar Gehversuche mit dem ESP32 Audio Kit v2.2 
unternommen. Der AC101 macht definitiv erhebliche Probleme.
Gut finde ich, dass man die SD Karte mit 4pin SD_MMC betreiben kann (DIP 
2,3 auf ON, alle anderen auf OFF). Allerdings erzeugt der AC101 
Verzerrungen und Klirren.
Ich vermute auch, dass irgendwie die PLL oder irgendwas anderes noch 
richtig eingestellt werden muss. Im 24Bit Modus werden die Effekte noch 
schlimmer (den habe ich ohne AudioOutputI2S, nur mit eigener I2S 
Konfiguration getestet).
Die Tage zuvor hatte ich einen ESP32 DOIT mit einem PCM 5102a DAC 
getestet. Hier gibt es absolut keine Probleme, weder mit 16 oder 32 Bit.

=== hier mal der code zum Bild ===
1
#include "AudioOutputI2S.h"
2
#include "AC101.h"
3
4
AudioOutputI2S *out;
5
6
#define IIS_SCLK                    27
7
#define IIS_LCLK                    26
8
#define IIS_DSIN                    25
9
10
#define IIC_CLK                     32
11
#define IIC_DATA                    33
12
13
#define GPIO_PA_EN                  GPIO_NUM_21
14
#define GPIO_SEL_PA_EN              GPIO_SEL_21
15
16
static AC101 ac;
17
18
static uint8_t volume = 63;
19
const uint8_t volume_step = 2;
20
21
void setup()
22
{
23
  Serial.begin(115200);
24
25
  Serial.printf("Connect to AC101 codec... ");
26
  while (not ac.begin(IIC_DATA, IIC_CLK))
27
  {
28
    Serial.printf("Failed!\n");
29
    delay(1000);
30
  }
31
  Serial.printf("OK\n");
32
33
  ac.SetMode(AC101::MODE_ADC_DAC);
34
35
  ac.SetVolumeSpeaker(volume);
36
  ac.SetVolumeHeadphone(volume);
37
//  ac.DumpRegisters();
38
39
  // Enable amplifier
40
  pinMode(GPIO_PA_EN, OUTPUT);
41
  digitalWrite(GPIO_PA_EN, HIGH);
42
43
  // Configure keys on ESP32 Audio Kit board
44
  pinMode(PIN_PLAY, INPUT_PULLUP);
45
  pinMode(PIN_VOL_UP, INPUT_PULLUP);
46
  pinMode(PIN_VOL_DOWN, INPUT_PULLUP);
47
48
  // Create audio source from progmem, enable I2S output,
49
  // configure I2S pins to matchn the board and create ringtone generator.
50
  file = new AudioFileSourcePROGMEM( song, strlen_P(song) );
51
  out = new AudioOutputI2S();
52
  out->SetPinout(IIS_SCLK /*bclkPin*/, IIS_LCLK /*wclkPin*/, IIS_DSIN /*doutPin*/);
53
  out->begin(true);
54
55
  Serial.printf("Generating test signal...\n");
56
}
57
58
static int16_t sample[2] = {0,0};
59
60
void loop()
61
{
62
  while (!out->ConsumeSample(sample))
63
  {
64
    /* wait */
65
  }
66
67
  sample[0] -= 1;
68
  sample[1] += 1;
69
}

von Marcel L. (marlic)


Lesenswert?

Ich konnte das Problem mit der Verzerrung lösen, man muss tatsächlich 
die PLL richtig einstellen. Mit der Einstellung steht und fällt die 
Klangqualität.

In der Spec. steht, dass die I2S1CLK auf den Wert SampleRate * 512 
gestellt werden muss. Demnach wäre das bei 44,k eine I2S1CLK von 
22.5792M

Als Source können wir die BCLK nehmen (es ließe sich vermutlich aber 
auch die MCLK nehmen. Verbunden ist diese, und lässt mit ledcSetup, 
ledcAttachPin, ledcWrite einstellen).

Die BCLK ist bei 2 Känalen und 16Bit Wortbreite: 16  2  44.1k -> 
1411,2k

Gemäß der Formel FOUT = (FIN * N) / (M * (2K + 1)) erhalten wir mit K = 
1, M = 1 für N den Wert 48

Folglich erhalten wir dann für AC101::begin
1
  ok &= WriteReg(PLL_CTRL1, 0x0141);
2
3
  uint16_t N = 48<<4; /* 512 / (M * (2*K+1)) / (CHANNELS * WORD_SIZE) -> 512 / 3 * (2 * 16) */
4
  uint16_t PLL_EN = 1<<15;
5
  uint16_t N_f = 0<<0; /* 0.2 N */
6
  ok &= WriteReg(PLL_CTRL2, N | PLL_EN | N_f);
7
8
  // Clocking system
9
  uint16_t PLLCLK_ENA = 1<<15; /* 0: Disable, 1: Enable */
10
#if 1
11
  uint16_t PLL_CLK = 0x2 << 12; /*bclk1 */
12
#else
13
  uint16_t PLL_CLK = 0x0 << 12; /*MCLK1 */
14
#endif
15
  uint16_t I2S1CLK_ENA = 1<<11; /* 0: Disable, 1: Enable */
16
#if 1
17
  uint16_t I2S1CLK_SRC = 0x3<<8; /* PLL */
18
#else
19
  uint16_t I2S1CLK_SRC = 0x0<<8; /* MLCK1 */
20
#endif
21
  uint16_t SYSCLK_ENA = 1<<3;
22
23
  ok &= WriteReg(SYSCLK_CTRL, PLLCLK_ENA|PLL_CLK| I2S1CLK_ENA|I2S1CLK_SRC|SYSCLK_ENA/*0x8b08*/); /* I2S1CLK Enabled, Src: pll, sysclk enab */

Der Rest bleibt wie gehabt. Bei anderer Sampling Rate oder Word_size 
müsste man die Werte neu berechnen. Hier wäre sicherlich eine 
Überarbeitung vom Treiber sinnvoll.

Folgendes sollte auf jeden Fall noch sichergestellt werden:
1
  ac.SetI2sSampleRate(AC101::SAMPLE_RATE_44100);
2
  /*
3
   * I2S1CLK/BCLK1 -> 512 * 44100 / 44100*2*16
4
   * BCLK1/LRCK -> 44100*2*16 / 44100 Obacht ... ein clock cycle goes high and low
5
   * means 32 when 32 bits are in a LR word channel * word_size
6
   */
7
  ac.SetI2sClock(AC101::BCLK_DIV_16, false, AC101::LRCK_DIV_32, false);
8
  ac.SetI2sMode(AC101::MODE_SLAVE);
9
  ac.SetI2sWordSize(AC101::WORD_SIZE_16_BITS);
10
  ac.SetI2sFormat(AC101::DATA_FORMAT_I2S);

Und falls jemand die MCLK austesten möchte, da hilft dieser Code:
1
   // Put a signal out on pin
2
    uint32_t freq = SAMPLE_RATE*512; /* The maximal frequency is 80000000 / 2^bit_num */
3
    Serial.printf("Output frequency: %d\n", freq);
4
    ledcSetup(MCLK_CH, freq, PWM_BIT);
5
    ledcAttachPin(OUTPUT_PIN, MCLK_CH);
6
    ledcWrite(MCLK_CH, 1<<(PWM_BIT-1)); /* 50% duty -> The available duty levels are (2^bit_num)-1, where bit_num can be 1-15. */

von Planloser (Gast)


Lesenswert?

Ist doch schön, dass wieder jemand den Wert des guten alten RTFM zu 
schätzen gelernt hat... :)

von rom3 (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

hab auch so ein kit. Wollte erst mal einen passthru mit Frequenzanalyse 
programmieren. Häng da aber irgendwie fest. Die Arduino FFT library 
macht auch irgend was, aber die Ergebnisse sind für mich sehr 
unplausibel. Laut Ausgabe liegt meine Stimmfrequenz bei 8 - 16 kHz. Mir 
war nicht bewusst das ich so eine hohe Stimme hab. Hab leider keinen 
Signalgenerator als Testmöglichkeit. Als Anhang hab ich das Programm 
gehängt. Ist ein PlatformIO project. Sollte sich aber auch mit anderen 
IDEs kompilieren lassen.  Als Ausgabe hab ich ein ILI9341 Display 
drangehängt. Die Verkabelung ist in der platformio.ini hinterlegt sowie 
benötigten libraries(werden aber von PlatformIO automatisch 
nachgeladen). Passthru(Mic nach Kopfhörer) und Wellenform-Ausgabe auf 
Display funktionieren, nur leider die Analyse nicht(Ausgabe schon, aber 
meiner Meinung falsch).

von Peter B. (pewibe)


Lesenswert?

ich könnte dir als Ersatz für den fehlenden Signalgenerator diese 
Software empfehlen: SweepGen - An Audio Sweep Generator - David J Taylor
SweepGen turns a PC into an Audio Oscillator and Sweep Generator which 
can be used for testing audio or educational purposes. In conjunction 
with audio test instruments, you can make frequency response plots.

: Bearbeitet durch User
von rom3 (Gast)


Lesenswert?

Vielen dank für den Tipp. Werde mir die Tage das Programm mal anschauen. 
Dann kann ich wenigstens mal sehen, was die Frequenzanalyse macht.

von rom3 (Gast)


Lesenswert?

David J Taylor SweepGen ist echt ein super Programm. Nochmal danke für 
den Tipp. Mit der Samplingroutine stimmt was nicht, habe irgendwelche 
Störsignale drauf. Hätte ich ohne das Programm bestimmt nicht so schnell 
herausbekommen. Dadurch natürlich keine anständige Frequenzanalyse. Muss 
mir dem post von Marcel mal genauer anschauen. Ich glaube bei mir ist 
auch eine falsche PLL eingestellt.

von Marcel L. (marlic)


Lesenswert?

Hattest du das Mikrofonsignal denn an den LineOut mal in der Software 
durchgeschliffen und angehört? Dort würde eine falsche Einstellung recht 
schnell hörbar. Ansonsten kann man auch einfach einen Sinus erzeugen und 
sich einmal anhören. Wenn der nicht 100%ig sauber ist, könnte es die PLL 
sein.

von rom3 (Gast)


Lesenswert?

Liegt bestimmt an der PLL. Nachdem ich die Frequenz manuell eingestellt 
habe(SAMPLE_RATE*512), ist der linke Kanal sauber, aber der rechte 
knackt. Hab bestimmt bei der Kanaltrennung des streams irgendwo einen 
Fehler.

von Marcel L. (marlic)


Lesenswert?

Ich habe leider auch so einen Effekt mit Line In oder Mikrofon als 
Eingang.
Zudem ist die ganze Zeit so ein fieses Knistern auf dem einem Kanal 
(ADCL) zu hören, sobald das Mikrofon oder LineIn ein Signal bekommt.

Das Signal ist an der Quelle in Ordnung. Direkt reinhören kann man, wenn 
man den Eingang an den Ausgang routet:
ok &= WriteReg(DAC_MXR_SRC, 0x1100); /* ADCL and ADCR as source */

Vermutlich funktioniert mit der I2S Umwandlung etwas nicht richtig

: Bearbeitet durch User
von Marcel L. (marlic)


Lesenswert?

Marcel L. schrieb:
> Vermutlich funktioniert mit der I2S Umwandlung etwas nicht richtig

Es war wieder die PLL
Interessanter Weise war die PLL zu hoch eingestellt
1
#if 0
2
    /* this code was originally used for a clean output only */
3
    uint16_t N = 48 << 4; /* 512 / (M * (2*K+1)) / (CHANNELS * WORD_SIZE) -> 512 / 3 * (2 * 16) */
4
#else
5
    /* this works without audio problems using line in or mic input */
6
    uint16_t N = 24 << 4; /* 512 / (M * (2*K+1)) / (CHANNELS * WORD_SIZE) -> 512 / 3 * (2 * 16) */
7
#endif

In diesem Fall funktionierte die obere Variante nicht. Die Untere 
dagegen läuft sauber.

von rom3 (Gast)


Lesenswert?

Habe eine andere Möglichkeit 
gefunden(https://github.com/garygru/yummyDSP/blob/master/examples/yummyAudioKit/yummyAudioKit.ino). 
Ausgangssignal über DSP sieht sauber aus(Eingang SweepGen). Nur leider 
immer noch keine vernünftige Frequenzanalyse.

von Friedemann (Gast)


Lesenswert?

Ich versuche jetzt seit zwei Tagen Audio über den AC101 Codec zu 
erhalten - aber egal was ich mache - die Funktion ac.begin(IIC_DATA, 
IIC_CLK) liefert false in der while loop der setup() Funktion zurück. 
"Failure!"

Ich versuche die AC101 Library via Arduino auf dem Board (V2.2) zum 
laufen zu bringen. Verwendete Library: 
https://github.com/marcel-licence/AC101

https://github.com/earlephilhower/ESP8266Audio ist ebenfalls installiert

DIP Switches sind 1OFF 2ON 3ON 4OFF 5OFF

Daneben ist ESP32Dev als Board in der Arduino IDE gewählt.

23:18:27.503 -> ets Jun  8 2016 00:22:57
23:18:27.503 ->
23:18:27.503 -> rst:0x1 (POWERON_RESET),boot:0x1f (SPI_FAST_FLASH_BOOT)
23:18:27.503 -> configsip: 0, SPIWP:0xee
23:18:27.503 -> 
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
23:18:27.503 -> mode:DIO, clock div:1
23:18:27.503 -> load:0x3fff0018,len:4
23:18:27.503 -> load:0x3fff001c,len:1216
23:18:27.503 -> ho 0 tail 12 room 4
23:18:27.503 -> load:0x40078000,len:10944
23:18:27.503 -> load:0x40080400,len:6388
23:18:27.503 -> entry 0x400806b4
23:18:27.691 -> Connect to AC101 codec... Failed!
23:18:29.097 -> Failed!
23:18:30.315 -> Failed!
23:18:31.534 -> Failed!

Kann mir jemand weiterhelfen - was ich falsch mache? Die ESP32 
Basisfunktionen bis Wifi funktionieren...

von Marcel L. (marlic)


Lesenswert?

Hmm das ist wirklich merkwürdig. Sowas sollte eigentlich gar nicht 
möglich sein.

Passen die defines?
#define IIC_CLK                     32
#define IIC_DATA                    33

Das ac.bein dürfte ruhig das erste in der Setup routine sein, nach dem 
Serial.begin.

Bei dem ac.begin wird ja eigentlich nur die i2c Verbindung zum codec 
aufgebaut.

: Bearbeitet durch User
von Friedemann W. (friedemann77)


Angehängte Dateien:

Lesenswert?

Ich verwende das Example von der Library - das Board kam neu und ist 
unmodifiziert. Ich dachte evtl an einen Anfängerfehler ? 
Frequenzeinstellung o.ä. ? Eine Lib linken muss man ja nicht direkt - 
die Informationen holt er sich aus den cpp files.

von Marcel L. (marlic)


Lesenswert?

Stimmt auch wieder. Welches Beispiel ist es denn?
Die Einstellungen sehen sonst so weit in Ordnung aus. PSRAM wird bei 
einigen Sachen benötigt. Allerdings wäre das Fehlerbild dann auch 
anders. Hier scheint es ja nur das i2c nicht zu gehen.

Die defines müssten auch in dem Beispielprogram auftauchen. Die gehören 
nicht zur Bibliothek.

von Friedemann W. (friedemann77)


Lesenswert?

https://github.com/marcel-licence/AC101/blob/master/examples/ESP32AudioKit/ESP32AudioKit.ino

Ich habe auch versucht, die Header von ESP8266Audio zusätzlich 
einzufügen.
Nach dem Upload hänge ich dann wieder in der Setup() while Schleife.

von Marcel L. (marlic)


Lesenswert?

Okay, die vielen Include Zeilen hatten mich gewundert. In der ac101.cpp 
wird in begin zum einen i2c geöffnet und register vom AC101 geschrieben. 
Da nach einem Fehler zu suchen wäre sicherlich nicht so toll.

Ich habe das Beispiel auch gerade noch einmal erfolgreich getestet. Ich 
befürchte, dass entweder eine Änderung vom Beispiel oder ein 
Hardwaredefekt vorliegen könnte. Vielleicht gibt es noch andere 
Erfahrungen.

Ich hatte ein Board letztens erhalten, dort waren pins vom ESP32 A1S mit 
Lötzinn miteinander verbunden (da musste ich leider dann nacharbeiten). 
Vielleicht lohnt sich hier noch einmal ein genauer Blick.

von Friedemann W. (friedemann77)


Lesenswert?

Pins wurden durchgepiept: ESP32A1S und Platine sind konnektiert - 
nebeneinander gibt es keine verbundenen Pins - sieht eigentlich gut aus.

Gibt es für die Arduino IDE und das AI Thinker A1S ESP32 Audiokit ein 
"Setup Guide".

Ich hatte zuerst versucht diverse Toolchains zu installieren - was sich 
als deutlich aufwändiger als die Arduino IDE gestaltet hat. Die fehlende 
Doku ist hier für C++Entwickler/Maker etwas abschreckend.

: Bearbeitet durch User
von Marcel L. (marlic)


Lesenswert?

Puh ich wüsste da nichts. Habe jetzt die letzte Zeit durch die 
Synthesizer projekte alles selbst versucht heraus zu finden. Der AC101 
sitzt ja auch eigentlich im ESP A1S drin. Eigentlich sollte da ja nichts 
schief gehen können. Ich würde auch mal drauf spekulieren, dass es nicht 
an Arduino oder so liegt. Vielleicht lohnt es sich einmal ein blink.ino 
zu testen. led's sind ja einige da.

Schaltplan hatte ich hier gefunden: 
https://docs.ai-thinker.com/_media/esp32-audio-kit_v2.2_sch.pdf

Mit dem Codec gab es sonst auch keine Probleme (wenn nur falsch 
konfiguriert). Aber, dass es gar nicht geht ..
Die buttons kann man (wenn das board läuft) ggf. modifizieren: 
https://www.youtube.com/watch?v=r0af0DB1R68
Das wäre für SPI oder I2C auf dem pin header ganz interessant.

Hier (ESP A1S datasheet) findet man aber auch nicht so wirklich was. 
(Link lässt sich nicht posten, ist aber per google leicht zu finden)

von Friedemann W. (friedemann77)


Lesenswert?

Blinken funktioniert, wifi auch, sogar streamen via http - nur Audio 
schaffe ich nicht via I²C zu initialisieren. Ich probier nochmal die 
"Libs" neu zu installieren.
Dank Dir auf alle Fälle.

: Bearbeitet durch User
von Friedemann W. (friedemann77)


Lesenswert?

Ich habe jetzt auf einem zweiten Rechner folgende Schritte ausgeführt, 
um das AI Thinker ESP32 AudioKit in Betrieb zu nehmen.

1. Aktuelle Arduino IDE 1.8.15 herunterladen
2. Boardverwalter URL 
https://dl.espressif.com/dl/package_esp32_index.json
   hinzufügen und ESP32-Dev auswählen
3. AC101 lib hinzugefügt
   https://github.com/marcel-licence/AC101
4. ESP8266Audio lib hinzugefügt
   https://github.com/earlephilhower/ESP8266Audio
5. AC101 Sketchbook Beispiel geöffnet, kompiliert und hochgeladen

#define IIC_CLK                     32
#define IIC_DATA                    33

Sind die Default Werte für den I²C des AC101 am AI Thinker Audiokit ?

Da immer noch Failed! aus der setup() Funktion ausgegeben wird scheint 
die Verbindung zum AC101 Codec defekt - oder mache ich hier noch 
grundsätzlich etwas falsch? Werde das Board umtauschen - Die kurze 
Anleitung oben hätte mir wohl stundenlange Tests mit der Espressif 
Toolchain erspart :-)

: Bearbeitet durch User
von Marcel L. (marlic)


Lesenswert?

Man könnte vielleicht den I2C scanner probieren. Allerdings müsste man 
mal gegen checken, was das Ergebnis wäre, wenn der Scanner den I2C 
findet. Ich habe da keine Erfahrug mit.

Mit Arduino kann man eigentlich echt viel machen. Kompliziert ist da zum 
Glück nicht unbedingt notwendig =)

von Michael U. (amiga)


Lesenswert?

Hallo,

Friedemann W. schrieb:
> Blinken funktioniert, wifi auch, sogar streamen via http - nur Audio
> schaffe ich nicht via I²C zu initialisieren. Ich probier nochmal die
> "Libs" neu zu installieren.

lange her, daß ich mit dem Kit rumgespielt habe...
Was heißt "sogar streamen via http"? Geht, also spielt den Stream 
richtig ab?
Dann ist erstmal alles ok, das wird ja auch über den AC101 ausgegeben.

Du hast die Version mit den 5 DIP-Schaltern?
Welche DIP-Schalter-Stellungen hast Du eingestellt?

Gruß aus Berlin
Michael

von Friedemann W. (friedemann77)


Lesenswert?

Die Idee mit dem I²C Scanner ist echt gut.
Folgende Ausgabe als endlos Schleife.

Scanning...
No I²C devices found

Version 2.2 mit den 5 DIP Schaltern, 2 + 3 ON alle anderen auf OFF.

Die ESP32 Funktionalität inkl WIFI funktioniert - nur der Zugriff auf 
den AC101 wird verweigert.

: Bearbeitet durch User
von Marcel L. (marlic)


Lesenswert?

Wire.begin() muss ersetzt werden durch: Wire.begin(33, 32);
Ansonsten nimmt er die falschen Pins.

Wenn es klappt würde dann folgendes angezeigt:
15:20:29.945 -> Scanning...
15:20:29.945 -> I2C device found at address 0x1A  !
15:20:29.979 -> done

von Michael U. (amiga)


Lesenswert?

Hallo,

Friedemann W. schrieb:
> Version 2.2 mit den 5 DIP Schaltern, 2 + 3 ON alle anderen auf OFF.

habe ich hier in einem alten Sketch auch so vermerkt.
Auf die I2C-Pins wurde ja schon hingewiesen.
Der AC101 ist ja direkter Bestandteil des ESP32A1S und intern verbunden.
Ich habe auch schon nackt ES32A1S vernaut, ein Bekanter auch mehrere, 
wäre so zumindest der erste defekte...

Gruß aus Berlin
Michael

: Bearbeitet durch User
von Friedemann W. (friedemann77)


Angehängte Dateien:

Lesenswert?

Ich hab mal einen Screenshot gemacht.

von Jean-Luc Deladriere (Gast)


Lesenswert?

Ich habe das ESP-Audio-Kit 2.2 und habe das gleiche Problem wie 
Friedemann:
- Ich habe 3 verschiedene Boards getestet - alle haben das gleiche 
Problem
- Upload und Wifi funktioniert gut
- Ich habe alle Bibliotheken für das AC101 ausprobiert: es lässt sich 
immer nicht initialisieren
- Der I2C Scanner erkennt das AC101 nicht
- Ich habe alle Schaltereinstellungen getestet, die ich finden konnte

Gruss aus Belgien
Jean-Luc

ps sorry, wenn mein Deutsch nicht korrekt ist, ich schreibe dies auf 
Englisch und benutze DeepL um zu übersetzen ....

von Marcel L. (marlic)


Lesenswert?

Darf ich fragen, woher die Boards kommen? Das wäre schon ärgerlich nach 
4 Wochen warten defekte Hardware zu bekommen.
Thanks for your effort =)

von Friedemann W. (friedemann77)


Angehängte Dateien:

Lesenswert?

Das Board das ich verwende stammt von 
https://www.ebay.de/itm/203245868170
Seriennummer unter den DIP Schaltern steht bei mir
ESP32 Audio Kit
V2.2 2957

Ausgabe der MacID (ChipID)
ESP32 Chip model = ESP32-D0WDQ5 Rev 1
ESP32 Chip ID = 582B75ACCD98
This chip has 2 cores

Muss Power Supply ebenfalls verbunden sein, damit der A1S arbeitet - 
oder reicht der serielle USB Anschluss. Reichen die 5 obigen 
Installationsschritte für die Arduino IDE? Die Installation des 
Espressif IDF macht dann der Board Manager? Ein explizites ADF (Audio 
Development Framework) benötigt man ja auch nicht - das macht ja die 
ESP8266 Audio Klasse in Verbindung mit der AC101...

: Bearbeitet durch User
von Michael U. (amiga)


Lesenswert?

Hallo,

habe mal mein Audiokit rausgekramt...
Gleiche Boardrevision, gleiche CPU-ID.

Ich habe mal einen alten Testsketch angepasst, WLAN-Daten müssen 
eingetragen werden.
Er streat einen Antenne Bayern Stream, wo der Link gerade noch 
drinstand.
Lautsprecher und Kopfhörer sind auf mittlerer Lautstärke.
Benutzt wird die ESP32-audioI2S lib von schreibfaul1 und die AC101 von 
Yveaux.
https://github.com/schreibfaul1/ESP32-audioI2S
https://github.com/Yveaux/AC101

Board ESP32 Dev-Module, IDE 1.8.15, ESP32 1.0.6 unter Win10/64
PS-Ram ja oder gleich den ESP32 Wrover auswählen. Spielt hier aber keine 
Rolle, die Lib nutzt keinen PS-Ram.
1
#include "Arduino.h"
2
#include "WiFi.h"
3
#include "Audio.h"
4
#include "AC101.h"
5
6
// I2S GPIOs          die Pinnamen beziehen sich auf den AC101
7
#define I2S_DSIN      25           
8
#define I2S_BCLK      27
9
#define I2S_LRC       26
10
#define I2S_MCLK       0
11
#define I2S_DOUT      35
12
13
// I2C GPIOs
14
#define IIC_CLK       32
15
#define IIC_DATA      33
16
17
#define GPIO_PA_EN    21
18
19
int8_t volume = 40;
20
21
String ssid =     "xxxxxxxxx";
22
String password = "xxxxxxxxx";
23
24
bool wifi_flag = false;
25
26
static AC101 ac;
27
28
Audio audio;
29
30
//#####################################################################
31
32
void setup()
33
{
34
  Serial.begin(115200);
35
  Serial.println("\r\nReset");
36
  Serial.printf_P(PSTR("Free mem=%d\n"), ESP.getFreeHeap());
37
38
  Serial.printf("Total heap: %d \r\n", ESP.getHeapSize());
39
  Serial.printf("Free heap: %d \r\n", ESP.getFreeHeap());
40
  Serial.printf("Total PSRAM: %d \r\n", ESP.getPsramSize());
41
  Serial.printf("Free PSRAM: %d \r\n", ESP.getFreePsram());
42
43
// Start WiFi
44
  WiFi.mode(WIFI_STA);
45
  WiFi.begin(ssid.c_str(), password.c_str());
46
47
  while (WiFi.status() != WL_CONNECTED)
48
  {
49
    Serial.print(".");
50
    delay(100);
51
  }
52
  wifi_flag = true;
53
  
54
  Serial.printf_P(PSTR("Connected\r\nRSSI: "));
55
  Serial.print(WiFi.RSSI());
56
  Serial.print(" IP: ");
57
  Serial.println(WiFi.localIP()); 
58
59
  // Start AC101
60
  Serial.printf("Connect to AC101 codec... ");
61
  while (not ac.begin(IIC_DATA, IIC_CLK))
62
  {
63
    Serial.printf("Failed!\n");
64
    delay(1000);
65
  }
66
  Serial.printf("OK\n");
67
68
  ac.SetVolumeSpeaker(volume);
69
  ac.SetVolumeHeadphone(volume);
70
//  ac.DumpRegisters();
71
72
  // Enable amplifier
73
  pinMode(GPIO_PA_EN, OUTPUT);
74
  digitalWrite(GPIO_PA_EN, HIGH);
75
76
// Start I2S Aduio  
77
  audio.setPinout(I2S_BCLK, I2S_LRC, I2S_DSIN);
78
  audio.setVolume(10); // 0...21
79
80
  audio.connecttohost("http://mp3channels.webradio.antenne.de:80/oldies-but-goldies");
81
82
}
83
84
//------------------------------------------------------------------
85
86
void loop()
87
{
88
  if (WiFi.status() != WL_CONNECTED)
89
  {
90
    WiFi.reconnect();
91
    Serial.println("WiFi verloren...");
92
    while (WiFi.status() != WL_CONNECTED)
93
    {
94
      Serial.print(".");
95
      delay(100);
96
    } 
97
  }  
98
99
  audio.loop();
100
}
101
102
//################################################################
103
//---------------------- Audio Tools -----------------------------
104
//################################################################
105
106
void audio_showstreamtitle(const char *info)
107
{
108
    Serial.println(info);
109
}
110
111
//------------------------------------------------------------------

Dudelt hier jetzt so vor sich hin.

Gruß aus Berlin
Michael

: Bearbeitet durch User
von Jean-Luc Deladriere (Gast)


Lesenswert?

Ich habe einen in Bangood gekauft:
https://www.banggood.com/ESP32-Aduio-Kit-WiFi+-bluetooth-Modul-ESP32-Serial-to-WiFi-Audio-Development-Board-mit-ESP32-A1S-p-1449256.html?cur_warehouse=CN

und zwei weitere bei Aliexpress :
https://www.aliexpress.com/item/1005002660692468.html?spm=a2g0s.9042311.0.0.27424c4d1yZnPH

ESP32 Chip model = ESP32-D0WDQ5 Rev 1
ESP32 Chip ID = EC2E75ACCD98
This chip has 2 cores

Seriennummer unter den DIP Schaltern steht bei mir
ESP32 Audio Kit
V2.2 2957

von Friedemann W. (friedemann77)


Lesenswert?

Auch bei amiga`s sketch antwortet er nach Aufbau der Wifi Verbindung wie 
erwartet mit "Failed!" beim Versuch I2C zu AC101 aufzubauen.
(Getestet ohne Speaker, ohne µSD-Karte und ohne zusätzliche 
Stromversorgung via USB)

Ich habe jetzt noch eine weitere Platine bei eBay geordert, mal sehen 
was ein Test mit einer weiteren Platine ergibt...

Kann man die betroffenen A1S Chips eventuell klassifizieren:

Betroffen wären dann folgende CPUIDs/Mac Adressen?

-> ***E75ACCD98

: Bearbeitet durch User
von Michael U. (amiga)


Lesenswert?

Hallo,

langsam wird es wirklich seltsam...
CPUID ist unique, da hat also jeder Chip eine andere.
MAC beginnt mit 24:0A:C4 das ist die Vendor Kennung von Espressif Inc.

Mir ist so, als ob die Kits im Lieferzustand eine Software drauf, die 
irgendein MP3 aus dem Flash spielte und per Tastendruch auf BT-Audio 
Gerät umschalten konnte. Ich meine zumindest, daß ich mit dem Board im 
Lieferzustand was machen konnte.

Gruß aus Berlin
Michael

von Friedemann W. (friedemann77)


Lesenswert?

Vom AI Thinker support wurde mir gestern mitgeteilt, dass dort ein 
ESP8388 verbaut ist... ("the audio decoder chip used in our new 
development board is esp8388"). Das entspräche dann ungefähr dem LyraT 
4.3 - sobald ich das neue Board erhalte werde ich die initiale Software 
testen.

von Michael U. (amiga)


Lesenswert?

Hallo,

jetzt wird es lustig... Der Chip heißt ES8388 nicht ESP8388.
Ich habe mir gersde mal das Datenblatt gezogen.
Passt aber eigentlich nicht zum Board, der ESP32A1S hat den Codec 
(AC101) intern, bei Espressif finde ich da auch keine Hinweise auf eine 
Änderung.
Die Kombi ES8388 wäre dann mit einem ESP32Wroom oder ESP32Wrover und der 
ES8388 wäre extern bestückt.

Kann ich noch nicht richtig glauben, zumindest wenn die Blechbüchse 
weiter mit ESP32-A1S AI-Thinker beschriftet ist.

Gruß aus Berlin
Michael

von Marcel L. (marlic)


Lesenswert?

Vielleicht weiss AI Thinker gar nicht mehr, dass es die Audio Kit boards 
noch gibt. Online sind ja alle Informationen verschwunden und Teils nur 
per Web Archive auffindbar. Der A1S scheint aber auch mit dem WROOM32 
compatibel zu sein. Jedenfalls hatte ich mal zu Anfang versehentlich mit 
der DOIT ESP32 DEVKIT V1 board option den Chip betrieben.
Wobei der WROVER müsste (wegen PSRAM) vermutlich besser passen.

: Bearbeitet durch User
von Michael U. (amiga)


Lesenswert?

Hallo,

naja, viel verschwinden kann ja da nicht, gab immer nur Fragmente.
Ist aber noch da:
https://github.com/Ai-Thinker-Open/ESP32-A1S-AudioKit

Bei Banggood habe ich deren Archive auch noch vorgefunden:
https://www.banggood.com/ESP32-Aduio-Kit-WiFi+-bluetooth-Module-ESP32-Serial-to-WiFi-Audio-Development-Board-with-ESP32-A1S-p-1449256.html?cur_warehouse=CN&rmmds=search

In der Übersicht etwas unten sind 2 Links zum Downloaden.
Da ist auch die Auslieferfirmware dabei, allerdings fehlen da die 
Partitionangaben für den ESP32.

Der A1S ist ein ESP32 + 4MB Flash (ESP32-Wroom) und zusätzliche 4MB 
PSRAM (ESP32 Wroover) und einem AC101 Codec in eine gemeinsame 
Blechbüchse gesperrt.

So gesehen sind sogar identisch. ESP32 Dev-Kit und PSRAM enabled kommt 
auf das gleiche raus.

Gruß aus Berlin
Michael

von Friedemann W. (friedemann77)


Lesenswert?

Nachdem ich die auf der Espressif 3.3.1 basierende AIThinker Version der 
ADF Toolchain zum laufen gebracht habe - kann der Fehler dort ebenfalls 
bestätigt werden. "AC101_DRIVER: reset failed!". Was für eine 
Challenge... Wahrscheinlich müsste man unter das Blech schauen und auf 
dem A1S nach einem Fehler suchen...

von Friedemann W. (friedemann77)


Lesenswert?

Jean-Luc, allez-vous retourner les planches - ou jeter un coup d'œil 
sous la tôle ? La connexion entre l'AC101 et l'ESP32 est probablement 
défectueuse.
Il serait intéressant de savoir où se situe exactement le problème...

- La puce AC101 est-elle manquante
- Le joint de soudure est défectueux
- Court-circuit sur AC101

von Friedemann W. (friedemann77)


Angehängte Dateien:

Lesenswert?

Ist der Wifi-Antennenanschluss auf euren ESP32 A1S Boards vorhanden?

Es gibt noch mehr aktuelle Posts auf anderen Boards - ich befürchte 
fast, dass alle aktuell verkauften AI Thinker A1S Audiokits "defekt" 
sind.
Das wäre ein ganz schöner Hammer.

Beispiel:
https://forums.slimdevices.com/showthread.php?112697-ANNOUNCE-Squeezelite-ESP32-(dedicated-thread)&p=1026858&viewfull=1#post1026858

von Michael U. (amiga)


Lesenswert?

Hallo,

Friedemann W. schrieb:
> Ist der Wifi-Antennenanschluss auf euren ESP32 A1S Boards vorhanden?

ja, ist er. Der Aufruck ist aner anders, er entspricht dem aus dem Post 
weiter oben:
Beitrag "Re: ESP32 A1S Eval"

Deine Variante ist mir bisher noch nicht begegnet.

Gruß aus Berlin
Michael

von Jean-Luc Deladriere (Gast)


Angehängte Dateien:

Lesenswert?

Ich habe die Abdeckung entfernt: keine Spur vom AC101, aber es gibt 
einen Chip mit der Bezeichnung 8388 !

von Jean-Luc Deladriere (Gast)


Lesenswert?

Ich habe einige Fortschritte gemacht, dank dieser Seite :
https://pcbartists.com/products/es8388-module/esp32-es8388-audio-codec-interfacing/

Jetzt kann ich das Gerät mit dem I2C-Scanner sehen :

Wire.begin(18,23);
Scannen...
I2C-Gerät an Adresse 0x10 gefunden !
fertig

Weiter : Treiber für die Arduino-Welt finden !

von Michael U. (amiga)


Lesenswert?

Hallo,

es bleibt spannend...
Ich habe bei AI Thinker ein Datenblatt gefunden wo diese Kombi für den 
ESP32A1S angegeben ist. Das datiert auf 2017, also früher als mir die 
ESP32A1S begegnet sind.
Allerdings müßte sich auch dieser am I2C melden, Adresse habe ich jetzt 
nicht nachgeschaut. 2019 war offenbar der AC101 im ADF von Espressif 
noch nichtmal erwähnt.
https://github.com/Edzelf/ESP32-Radio/issues/223
Da hat wohl jemand ESP32A1S billig bekommen und auf die Audiokits 
gelötet.
Getestet wird vermutlich ohnehin nicht...

Gruß aus Berlin
Michael

von Michael W. (mihovil)


Lesenswert?

Ich habe ebenfalls ein "ESP32 Audio Kit v2.2 2957" erwischt, und bekomme 
die Fehlermeldung
1
E (1026) AC101: reset failed!
2
E (1026) AUDIO_HAL: codec init failed!
mit allen bisher ausprobierten Examples von 
https://github.com/Ai-Thinker-Open/ESP32-A1S-AudioKit .

Ich nach langer Suche folgendes Dokument gefunden:
https://docs.ai-thinker.com/_media/esp32-a1s/esp32-a1s_es8388%25E6%259B%25BF%25E6%258D%25A2ac101%25E7%259A%2584%25E5%258C%25BA%25E5%2588%25AB.pdf&usg=ALkJrhit93-Dd2cFLAkYswHqCNjb_50ntg
welches sich auf ein v2.3 zu beziehen scheint.
Leider kann ich kein Chinesisch - konnte also lediglich ausprobieren was 
in den Screenshots zu sehen ist.
Die Umstellung des "Audio Boards" auf Lyrat v4.3 hatte positive Effekte 
(keine Codec-Init-Fehler mehr, und kaum hörbares Audio), die Änderung 
der I2C und I2S-Pins führt jedoch nur zu anderen Fehlermeldungen.

Lg,
Michael

von Marcel L. (marlic)


Lesenswert?

Bei dem Dokument werden allerdings Pins 32, 33 erwähnt. Vielleicht gibt 
es noch ein weiteres Dokument zum dem ESP32 A1S!? Vielleicht wissen die 
bei der Herstellung vom Audio Kit V2.2 gar nichts von der Änderung des 
A1S

von Friedemann W. (friedemann77)


Angehängte Dateien:

Lesenswert?

Danke Jean-Luc,

so etwas hatte ich schon fast vermutet - scheinbar gibt es mehrere 
unterschiedliche HW Varianten des A1S ESP32 Audio Kit Ver 2.2 - bzw. der 
sich darauf befindlichen A1S Platine.

Hier mal auf die schnelle ein Arduino File um die Boards zu 
unterscheiden...
Beim AC101 brennt LED4 - beim ES8388 brennt LED5 (hinter der 
Kopfhörerbuchse).


   Important note:

   There are different A1S HW variants.
   These are installed onto the A1S Audio Kit

   There is a version using AC101 for audio
   others use the ES8388.

   Attached is an Arduino file you can use
   to differ between both boards.

: Bearbeitet durch User
von Michael U. (amiga)


Lesenswert?

Hallo,

ich habe obiges pdf mal durch ein online-Tool geschickt.
https://www.onlinedoctranslator.com/de/translationform

Zum neuen A1S gehört Boardrev. 2.3
Ob der auf einer rev. 2.2 spielt wäre also zu testen. Es gibt 
Unterschiede bei den R/L Ausgängen und bei MIC1/2. Müßte ich mal mit dem 
rev. 2.2 Schaltplan vergleichen.
I2C bleibt auf 32/33.
I2S habe ich mal versucht zu sortieren:
// I2S GPIOs          AC101        ES8388
#define I2S_DSIN      25           // 25
#define I2S_BCLK      27           // 27
#define I2S_LRC       26           // 25
#define I2S_MCLK       0
#define I2S_DOUT      35           // 26
müßte ich aber noch mit dem Datenblatt des ES8288 vergleichen wegen 
verschiedener Benennungen der Pins.
 Vermutlich bin ich aber hier erstmal etwas raus weil:
- ich habe kein Kit mit dem ES8388 A1S
- die ES8388 Treiber sind wohl noch nicht ins Arduino-Framework als Lib 
verfügbar.
Ich habe kein aktuelles IDF/ADF hier auf dem Rechner. Man kann zwar die 
ADF-Funktionen auch aus der ArduinoIDE nutzen, macht aber wenig Sinn 
wenn man keine Hardware zum Testen dazu hat.

Gruß aus Berlin
Michael

von Marcel L. (marlic)


Lesenswert?

https://docs.ai-thinker.com/_media/esp32-audio-kit_v2.2_sch.pdf
hier sind 18 und 23 auch am GPIO header verfügbar.
Hat jemand den Schaltplan mit dem ES8388 entdeckt? Zudem wäre ein 
Datasheet vom ESP32 A1S interessant.

Es scheint so, dass der ESP32 A1S (der eigentlich auf dem Audio Kit 
V2.2) verbaut sein sollte eine blanke Antenne hat (Kupferfarben).

Der andere Chip heisst laut Google ESP32-LyraT und ist von Expressif und 
nicht von AI. Bei dem scheint die Antenne schwarz lackiert zu sein.

Hier ist eine schöne Übersicht: 
https://smc2020torino.it/adminupload/file/SMCCIM_2020_paper_74.pdf

Sieht aber dann fast so aus, als seien falsche Deckel auf den Chips 
gelandet -> der A1S ist dann in Wirklichkeit ein LyraT (erkennbar an der 
Antennenfarbe)

von Michael W. (mihovil)


Lesenswert?

Ich habe die im Dokument beschriebene Änderung von 
esp-adf/components/audio_board/lyrat_v4_3/board_pins_config.c auf 
GPIO_NUM_33/GPIO_NUM_32 ausprobiert, leider initialisiert der Codec 
damit nicht:
1
I (26) boot: ESP-IDF v4.4-dev-1849-g8e3e65a47 2nd stage bootloader
2
I (27) boot: compile time 10:29:06
3
I (27) boot: chip revision: 1
4
I (31) boot_comm: chip revision: 1, min. bootloader chip revision: 0
5
I (38) boot.esp32: SPI Speed      : 40MHz
6
I (43) boot.esp32: SPI Mode       : DIO
7
I (47) boot.esp32: SPI Flash Size : 4MB
8
I (52) boot: Enabling RNG early entropy source...
9
I (57) boot: Partition Table:
10
I (61) boot: ## Label            Usage          Type ST Offset   Length
11
I (68) boot:  0 nvs              WiFi data        01 02 00009000 00006000
12
I (75) boot:  1 phy_init         RF data          01 01 0000f000 00001000
13
I (83) boot:  2 factory          factory app      00 00 00010000 00100000
14
I (90) boot: End of partition table
15
I (95) boot_comm: chip revision: 1, min. application chip revision: 0
16
I (102) esp_image: segment 0: paddr=00010020 vaddr=3f400020 size=885c8h (558536) map
17
I (312) esp_image: segment 1: paddr=000985f0 vaddr=3ffb0000 size=02460h (  9312) load
18
I (316) esp_image: segment 2: paddr=0009aa58 vaddr=40080000 size=055c0h ( 21952) load
19
I (327) esp_image: segment 3: paddr=000a0020 vaddr=400d0020 size=2a6b0h (173744) map
20
I (390) esp_image: segment 4: paddr=000ca6d8 vaddr=400855c0 size=083b4h ( 33716) load
21
I (405) esp_image: segment 5: paddr=000d2a94 vaddr=50000000 size=00010h (    16) load
22
I (411) boot: Loaded app from partition at offset 0x10000
23
I (412) boot: Disabling RNG early entropy source...
24
I (425) cpu_start: Pro cpu up.
25
I (425) cpu_start: Starting app cpu, entry point is 0x40081280
26
0x40081280: call_start_cpu1 at /home/hamradio/esp/esp-idf/components/esp_system/port/cpu_start.c:150
27
28
I (0) cpu_start: App cpu up.
29
I (439) cpu_start: Pro cpu start user code
30
I (439) cpu_start: cpu freq: 160000000
31
I (439) cpu_start: Application information:
32
I (444) cpu_start: Project name:     play_mp3_control
33
I (449) cpu_start: App version:      v2.3-14-g76f1a1a-dirty
34
I (455) cpu_start: Compile time:     Jul 10 2021 15:07:21
35
I (462) cpu_start: ELF file SHA256:  d63225ec5dce1e0c...
36
I (468) cpu_start: ESP-IDF:          v4.4-dev-1849-g8e3e65a47
37
I (474) heap_init: Initializing. RAM available for dynamic allocation:
38
I (481) heap_init: At 3FFAE6E0 len 00001920 (6 KiB): DRAM
39
I (487) heap_init: At 3FFB2EF0 len 0002D110 (180 KiB): DRAM
40
I (494) heap_init: At 3FFE0440 len 00003AE0 (14 KiB): D/IRAM
41
I (500) heap_init: At 3FFE4350 len 0001BCB0 (111 KiB): D/IRAM
42
I (506) heap_init: At 4008D974 len 0001268C (73 KiB): IRAM
43
I (514) spi_flash: detected chip: generic
44
I (517) spi_flash: flash io: dio
45
I (522) sleep: Configure to isolate all GPIO pins in sleep state
46
I (528) sleep: Enable automatic switching of GPIO sleep configuration
47
I (535) cpu_start: Starting scheduler on PRO CPU.
48
I (0) cpu_start: Starting scheduler on APP CPU.
49
I (546) PLAY_FLASH_MP3_CONTROL: [ 1 ] Start audio codec chip
50
E (556) I2C_BUS: /home/hamradio/esp/esp-adf/components/esp_peripherals/driver/i2c_bus/i2c_bus.c:101 (i2c_bus_write_bytes):I2C Bus WriteReg Error
51
E (566) I2C_BUS: /home/hamradio/esp/esp-adf/components/esp_peripherals/driver/i2c_bus/i2c_bus.c:101 (i2c_bus_write_bytes):I2C Bus WriteReg Error
52
E (576) I2C_BUS: /home/hamradio/esp/esp-adf/components/esp_peripherals/driver/i2c_bus/i2c_bus.c:101 (i2c_bus_write_bytes):I2C Bus WriteReg Error
53
E (596) I2C_BUS: /home/hamradio/esp/esp-adf/components/esp_peripherals/driver/i2c_bus/i2c_bus.c:101 (i2c_bus_write_bytes):I2C Bus WriteReg Error
54
E (606) I2C_BUS: /home/hamradio/esp/esp-adf/components/esp_peripherals/driver/i2c_bus/i2c_bus.c:101 (i2c_bus_write_bytes):I2C Bus WriteReg Error
55
E (616) I2C_BUS: /home/hamradio/esp/esp-adf/components/esp_peripherals/driver/i2c_bus/i2c_bus.c:101 (i2c_bus_write_bytes):I2C Bus WriteReg Error
56
E (636) I2C_BUS: /home/hamradio/esp/esp-adf/components/esp_peripherals/driver/i2c_bus/i2c_bus.c:101 (i2c_bus_write_bytes):I2C Bus WriteReg Error
57
E (646) I2C_BUS: /home/hamradio/esp/esp-adf/components/esp_peripherals/driver/i2c_bus/i2c_bus.c:101 (i2c_bus_write_bytes):I2C Bus WriteReg Error
58
E (666) I2C_BUS: /home/hamradio/esp/esp-adf/components/esp_peripherals/driver/i2c_bus/i2c_bus.c:101 (i2c_bus_write_bytes):I2C Bus WriteReg Error
59
E (676) I2C_BUS: /home/hamradio/esp/esp-adf/components/esp_peripherals/driver/i2c_bus/i2c_bus.c:101 (i2c_bus_write_bytes):I2C Bus WriteReg Error
60
E (686) I2C_BUS: /home/hamradio/esp/esp-adf/components/esp_peripherals/driver/i2c_bus/i2c_bus.c:101 (i2c_bus_write_bytes):I2C Bus WriteReg Error
61
E (706) I2C_BUS: /home/hamradio/esp/esp-adf/components/esp_peripherals/driver/i2c_bus/i2c_bus.c:101 (i2c_bus_write_bytes):I2C Bus WriteReg Error
62
E (716) I2C_BUS: /home/hamradio/esp/esp-adf/components/esp_peripherals/driver/i2c_bus/i2c_bus.c:101 (i2c_bus_write_bytes):I2C Bus WriteReg Error
63
E (726) I2C_BUS: /home/hamradio/esp/esp-adf/components/esp_peripherals/driver/i2c_bus/i2c_bus.c:101 (i2c_bus_write_bytes):I2C Bus WriteReg Error
64
E (746) I2C_BUS: /home/hamradio/esp/esp-adf/components/esp_peripherals/driver/i2c_bus/i2c_bus.c:101 (i2c_bus_write_bytes):I2C Bus WriteReg Error
65
E (756) I2C_BUS: /home/hamradio/esp/esp-adf/components/esp_peripherals/driver/i2c_bus/i2c_bus.c:101 (i2c_bus_write_bytes):I2C Bus WriteReg Error
66
E (766) I2C_BUS: /home/hamradio/esp/esp-adf/components/esp_peripherals/driver/i2c_bus/i2c_bus.c:101 (i2c_bus_write_bytes):I2C Bus WriteReg Error
67
E (786) I2C_BUS: /home/hamradio/esp/esp-adf/components/esp_peripherals/driver/i2c_bus/i2c_bus.c:101 (i2c_bus_write_bytes):I2C Bus WriteReg Error
68
E (796) I2C_BUS: /home/hamradio/esp/esp-adf/components/esp_peripherals/driver/i2c_bus/i2c_bus.c:101 (i2c_bus_write_bytes):I2C Bus WriteReg Error
69
E (816) I2C_BUS: /home/hamradio/esp/esp-adf/components/esp_peripherals/driver/i2c_bus/i2c_bus.c:101 (i2c_bus_write_bytes):I2C Bus WriteReg Error
70
E (826) I2C_BUS: /home/hamradio/esp/esp-adf/components/esp_peripherals/driver/i2c_bus/i2c_bus.c:101 (i2c_bus_write_bytes):I2C Bus WriteReg Error
71
E (836) I2C_BUS: /home/hamradio/esp/esp-adf/components/esp_peripherals/driver/i2c_bus/i2c_bus.c:101 (i2c_bus_write_bytes):I2C Bus WriteReg Error
72
E (856) I2C_BUS: /home/hamradio/esp/esp-adf/components/esp_peripherals/driver/i2c_bus/i2c_bus.c:101 (i2c_bus_write_bytes):I2C Bus WriteReg Error
73
E (866) I2C_BUS: /home/hamradio/esp/esp-adf/components/esp_peripherals/driver/i2c_bus/i2c_bus.c:101 (i2c_bus_write_bytes):I2C Bus WriteReg Error
74
E (876) I2C_BUS: /home/hamradio/esp/esp-adf/components/esp_peripherals/driver/i2c_bus/i2c_bus.c:101 (i2c_bus_write_bytes):I2C Bus WriteReg Error
75
E (896) I2C_BUS: /home/hamradio/esp/esp-adf/components/esp_peripherals/driver/i2c_bus/i2c_bus.c:101 (i2c_bus_write_bytes):I2C Bus WriteReg Error
76
E (906) I2C_BUS: /home/hamradio/esp/esp-adf/components/esp_peripherals/driver/i2c_bus/i2c_bus.c:101 (i2c_bus_write_bytes):I2C Bus WriteReg Error
77
E (916) I2C_BUS: /home/hamradio/esp/esp-adf/components/esp_peripherals/driver/i2c_bus/i2c_bus.c:101 (i2c_bus_write_bytes):I2C Bus WriteReg Error
78
E (936) AUDIO_HAL: codec init failed!
79
E (936) AUDIO_BOARD: /home/hamradio/esp/esp-adf/components/audio_board/lyrat_v4_3/board.c:55 (audio_board_codec_init): Got NULL Pointer
80
E (956) AUDIO_HAL: audio_hal handle is null
81
E (956) AUDIO_HAL: audio_hal handle is null

mit den default-Werten
1
         i2c_config->sda_io_num = GPIO_NUM_18;
2
         i2c_config->scl_io_num = GPIO_NUM_23;

started der Codec:
1
I (0) cpu_start: App cpu up.
2
I (439) cpu_start: Pro cpu start user code
3
I (439) cpu_start: cpu freq: 160000000
4
I (439) cpu_start: Application information:
5
I (443) cpu_start: Project name:     play_mp3_control
6
I (449) cpu_start: App version:      v2.3-14-g76f1a1a-dirty
7
I (455) cpu_start: Compile time:     Jul 10 2021 15:07:21
8
I (462) cpu_start: ELF file SHA256:  a559d6454791ae1a...
9
I (468) cpu_start: ESP-IDF:          v4.4-dev-1849-g8e3e65a47
10
I (474) heap_init: Initializing. RAM available for dynamic allocation:
11
I (481) heap_init: At 3FFAE6E0 len 00001920 (6 KiB): DRAM
12
I (487) heap_init: At 3FFB2EF0 len 0002D110 (180 KiB): DRAM
13
I (493) heap_init: At 3FFE0440 len 00003AE0 (14 KiB): D/IRAM
14
I (500) heap_init: At 3FFE4350 len 0001BCB0 (111 KiB): D/IRAM
15
I (506) heap_init: At 4008D974 len 0001268C (73 KiB): IRAM
16
I (514) spi_flash: detected chip: generic
17
I (517) spi_flash: flash io: dio
18
I (522) sleep: Configure to isolate all GPIO pins in sleep state
19
I (528) sleep: Enable automatic switching of GPIO sleep configuration
20
I (535) cpu_start: Starting scheduler on PRO CPU.
21
I (0) cpu_start: Starting scheduler on APP CPU.
22
I (546) PLAY_FLASH_MP3_CONTROL: [ 1 ] Start audio codec chip
23
I (576) PLAY_FLASH_MP3_CONTROL: [ 2 ] Create audio pipeline, add all elements to pipeline, and subscribe pipeline event
24
I (576) PLAY_FLASH_MP3_CONTROL: [2.1] Create mp3 decoder to decode mp3 file and set custom read callback
25
I (586) PLAY_FLASH_MP3_CONTROL: [2.2] Create i2s stream to write data to codec chip
26
I (606) PLAY_FLASH_MP3_CONTROL: [2.3] Register all elements to audio pipeline
27
I (606) PLAY_FLASH_MP3_CONTROL: [2.4] Link it together [mp3_music_read_cb]-->mp3_decoder-->i2s_stream-->[codec_chip]

... so richtig funktionsfähig scheint das Board damit aber nicht zu 
sein. Beispielsweise hat die Funktion audio_hal_set_volume überhaupt 
keine Auswirkung.

@amiga: Ich würde auch die I2S-Settings testen - sollte es in der Tat 2 
mal Pin 25 lauten?

von Friedemann W. (friedemann77)


Lesenswert?

@amiga
Michael U. schrieb:
> Ich habe bei AI Thinker ein Datenblatt gefunden wo diese Kombi für den
> ESP32A1S angegeben ist. Das datiert auf 2017, also früher als mir die
> ESP32A1S begegnet sind.

Hast du einen Link zu dem Datenblatt? Ich denke auch das auf der A1S 
Platine ein LyraT sitzt - leider nicht pinkompatibel zu den Espressif 
LyraT Beispielen...

von Michael U. (amiga)


Lesenswert?

Hallo,

Michael W. schrieb:
> @amiga: Ich würde auch die I2S-Settings testen - sollte es in der Tat 2
> mal Pin 25 lauten?

natürlich nicht...
War aus der chinesischen Änderungsanleitung.
bck_io_num   27 (I2S_BCLK)
ws_io_num    25 (I2S_LRC)
data_out_num 26 (I2S_DOUT)
data_in_num  35 (I2S_DSIN)

Passt so zumindest zu dem Datenblatt:
https://fccid.io/2AHMR-ESP32A1S/User-Manual/User-manual-4883458

Das mit I2C auf 18/23 passt dazu wieder garnicht...
Der ES8388 hat keine Differnzialausgänge als Speaker-Out sondern nur 
LineOut.
Müßte man mit der Schaltung des rev. 2.2 Boards nochmal genauer 
vergleichen ob da was rauskommen kann.
KopfhörerOut ist recht identisch.

Gruß aus Berlin
Michael

von Friedemann W. (friedemann77)


Lesenswert?

Falls jemand das MP3 Playback testen möchte - für den ESP32 mit ES8388 
habe ich folgende Seite mit gut erklärten Informationen und Beispielen 
gefunden:

https://pcbartists.com/products/es8388-module/esp32-es8388-audio-codec-interfacing

https://pcbartists.com/design/embedded/esp32-mp3-audio-playback-sd-card

von Friedemann W. (friedemann77)


Lesenswert?

I²C GPIO entspricht beim "neuen" A1S mit ES8388 Chip dem LyraT 4.3.
Unter Verwendung der Defaultbeispiele hört man einen Kopfhörerkanal - 
allerdings sehr leise.

"\esp-adf\components\audio_hal\board\lyrat_v4_3_board.h"

/* I2C gpios */
#define IIC_CLK                     23
#define IIC_DATA                    18

von Michael W. (mihovil)


Lesenswert?

Friedemann W. schrieb:
> I²C GPIO entspricht beim "neuen" A1S mit ES8388 Chip dem LyraT 4.3.
> Unter Verwendung der Defaultbeispiele hört man einen Kopfhörerkanal -
> allerdings sehr leise.

Kann ich bestätigen - an der Lautstärke ändert sich auch nichts, wenn 
sie mit audio_hal_set_volume versucht zu ändern - egal ob 0 oder 100 
(oder etwas dazwischen), es ist gleich leise.

Mein naiver Verdacht, der "neue A1S mit ES8388 Chip" wäre somit der 
selbe wie am LyraT 4.3, aber "versehentlich" auf einem "ESP32 Audio Kit 
v2.2 gelandet, dürfte sich aber nicht bewahrheiten:
Am LyraT 4.3 befindet laut 
https://docs.espressif.com/projects/esp-adf/en/latest/design-guide/board-esp32-lyrat-v4.3.html 
ein ESP32 WROVER mit folgendem Datasheet:
https://www.espressif.com/sites/default/files/documentation/esp32-wrover_datasheet_en.pdf
verglichen mit dem "original" ESP32-A1S 
http://www.ai-thinker.com/Uploads/file/20190715/20190715141756_57655.pdf 
sieht man: Selbst RXD0 und TXD0 sitzen auf unterschiedlichen Pins, somit 
müsste man schon beim Flashen scheitern?

von Michael U. (amiga)


Lesenswert?

Hallo,

das Datenblatt der AI-Thinker-Variante des ESP32A1S mit ES8388 hatte ich 
verlinkt:
https://fccid.io/2AHMR-ESP32A1S/User-Manual/User-manual-4883458

PinOut ist nach Außen nahezu identisch.
Die Unterschiede sind in dem China-Dokument aufgeführt.
Ich hänge mal die automatisch Übersetzung hier ran.

Ich bin mir inzwischen recht sicher, daß da das rev. 2.2 mit den 
falschen ESP32A1S bestückt wurde.
Schaltung eines rev.2.3 ist wohl nicht zu finden, müßte man als mit 
ES8388 Datenblatt bzw. dem Lyra-Board die Außenbeschaltung speziell der 
Audioausgänge mit der rev.2.2 Schaltung vergleichen ob das ohne 
Änderungen am Board überhaupt spielen kann. Beim AudioKit rev 2.2 muß 
mit GPIO21 auch die PA eingeschaltet werden, ich weiß nicht, ob das im 
ADF so drin ist.

Gruß aus Berlin
Michael

von Michael W. (mihovil)


Lesenswert?

@amiga: Das Datenblatt 
https://fccid.io/2AHMR-ESP32A1S/User-Manual/User-manual-4883458 scheint 
meiner Meinung nach nicht auf diesen Chip zu passen - zumindest die 
GPIOs 33/32 für I2C funktionieren hier nicht. Inwieweit somit Rest 
anwendbar ist, ist halt fraglich.

Lg,
Michael

PS: Thx für den Hinweis mit dem GPIO21 - dem muss ich noch nachgehen - 
aber ich befürchte das muss bis zum Wochenende warten.

von Michael U. (amiga)


Lesenswert?

Hallo,

@Michael W. (mihovil):
ja, I2C irritiert mich auch, mehr habe ich bisher dazu aber nicht 
gefunden.
Ich habe nur keine Lust aus reiner Neugier in China zu bestellen.
Einmal sind mir die Lieferzeiten zu lang und, wenn ich Pech habe, kommt 
dann ein rev.2.2 mit dem "richtigen" A1S an...
Ist mir der Spaß dann doch nicht wert.

Gruß aus Berlin
Michael

von Friedemann W. (friedemann77)


Lesenswert?

Hier ist eine Übersetzung des Upgrade Dokuments von AC101 -> ES8388
Leider werden auch darin die GPIOs 32, 33 des AC101 verwendet, welche 
eigentlich bereits auf IIC_CLK 23 und IIC_DATA 18 und somit kompatibel 
zum LyraT 4.3 liegen.

D.h. auch dieses PDF von 2021 scheint nicht ganz aktuell zu sein.

AI Thinker bietet auch keinen A1S mehr mit AC101 an...

https://www.docdroid.net/L6LX9SK/esp32-a1s-esv23zh-cnen-pdf

von Friedemann W. (friedemann77)


Lesenswert?

Der ESP32A1S(8388) kann mp3 Stereo Playback auf den Kopfhörern. 
Allerdings kann ich die Lautstärke bisher nicht regeln. Das Kopfhörer 
Verbindungsevent liegt Default auf Key3 (GPIO19) (gedrückt halten - 
Kopfhörer ist angeschlossen)...
Testweiser Wechsel auf GPIO12(falls der stimmt...) hat das Verhalten 
nicht verändert.
Gibt es eine Beschreibung der DIP Schalter?

von Michael U. (amiga)


Lesenswert?

Hallo,

Friedemann W. schrieb:
> Gibt es eine Beschreibung der DIP Schalter?

Schaltung des AudiKit v2.2 ist im Netz verfügbar:
https://docs.ai-thinker.com/en/esp32-audio-kit
unten, Beschreibunbg oben ist aber von 2.1, die DIP-Schalter schalten 
ein paar GPIO-Verbindungen.

Man müßte eben die Beschaltung des A1S-ES8388 spzeill bei den 
Unterschieden vergleichen und das v2.2 modifizieren. Geht sicher mit 
Kratzen und Brücken zu machen, dürfte auch nicht allzuviel sein.

Ich habe die Gschaichte nicht weiter verfolgt, ein solches Board werde 
ich nicht in sinnvoller Zeit bekommen, ob dann das richtige ankommt, ist 
auch unsicher, ich brauche es ja auch nicht...

Gruß aus Berlin
Michael

von Michael W. (mihovil)


Lesenswert?

Hallo,

ich habe vom Support den Tipp erhalten das Board auf LyraT 4.3 
umzustellen, und in audio_hal/driver/es8388/es8388.c in der Funktion 
es8388_set_voice_volume(int volume) in die register 26 und 27 'volume' 
andtatt von '0' zu schreiben.
( 
https://github.com/Ai-Thinker-Open/ESP32-A1S-AudioKit/blob/12c183311967449cbe30ad405d27b08e49fe5147/components/audio_hal/driver/es8388/es8388.c#L352 
).
Damit scheint das Problem der zu leisen/nicht regelbaren Lautstärke 
behoben zu sein.

Lg,
Michael

von Friedemann W. (friedemann77)


Lesenswert?

Hast du mit der Einstellung Audio auf den Kopfhörern?
Ich habe auf der Platine zwei Lötbrücken auf Grund des Dokuments 
hinsichtlich Wechsel AC101 -> ES8388 gesetzt.
Wenn das auch ohne Löten geht... dann mach ich die wieder weg :-)

von Michael W. (mihovil)


Lesenswert?

Ja (mehr als die Kopfhörer habe ich bisher auch noch nicht getestet).
Ich habe uzm testen das get-started/play_mp3/main/play_mp3_example.c um 
die Zeile
audio_hal_set_volume(board_handle->audio_hal, 100)
erweitert - seit der obigen Änderung im es8388.c hört man damit etwas.

von Friedemann W. (friedemann77)


Lesenswert?

Werte von Volume > 70 hatten bei mir zu starkem Rauschen geführt - bei 
dir nicht ? Dann muss ich gleich noch zum Lötkolben greifen :-)
Mein Ziel ist es eine Basis zum erstellen von Audioeffekten (DSP) zu 
kreieren.
Mit entsprechender Lötbrücke klingt es sauber - über Aktivierung 
Register 26 und 27 (LOUT2 / ROUT2) mittels Volume klingt die Wiedergabe 
bei mir deutlich nach einem Phasenproblem.

: Bearbeitet durch User
von Michael W. (mihovil)


Lesenswert?

Hi,

@friedemann77: Übermäßiges Rauschen habe ich nicht bemerkt (kenne aber 
auch den Vergleich nicht).

Ich stehe gerade bei einem anderen Problem an: hat bereits jemand das 
example pipeline_a2dp_source_stream erfolgreich zum Laufen gebracht?

Ich habe mehr Aussetzer als eigentliches Audio. (geschätzt: <0,5s Musik, 
gefolgt von > 1s Pause). Das selbe mp3 wird im play_mp3 erfolgreich 
analog ausgegeben, und ein sink-example hat auch funktioniert. Aber an 
der A2DP-Source scheitere ich ...

von Friedemann W. (friedemann77)


Lesenswert?

Bei so Problemen macht es evtl Sinn mit einem original LyraT 4.3 zu 
vergleichen...
Ich verwende das aktuellste IDF, ADF + Eclipse IDE (ist im Offline 
Installer mit drin).

von Michael W. (mihovil)


Lesenswert?

@friedemann77: das war mein Plan - und habe extra dafür auch ein LyraT 
bestellt - leider hat sich der Händler "geirrt" (?) und mir ein AudioKit 
v2.2 (diesmal mit AC101) geschickt ...
Das pipeline_a2dp_source_stream funktioniert damit leider auch nicht ...

von Friedemann W. (friedemann77)


Lesenswert?

Ist die SD-Karte evtl der Flaschenhals bzw langsam - hast du mal 
probiert ein 30 Sekunden mp3 aus dem Flash wiederzugeben ?

von Marcel L. (marlic)


Lesenswert?

Hallo,
hat jemand einen Register Dump für den ES8388 und die genutzte Frequenz 
der MCLK?
Viele Grüße

von Marcel L. (marlic)


Lesenswert?

Dump ist nicht mehr notwendig. Der ES8388 läuft wohl. Allerdings scheint 
irgendwas störende Clicks auf dem Ausgang zu erzeugen. Ist dieser Effekt 
bereits beobachtet worden?

von Friedemann W. (friedemann77)


Lesenswert?

Was machst du denn ? Klingt als liefe der Buffer nicht synchron...
I²S stream mit idf - oder per adf ? Hier klickt nichts (noch nicht). Ich 
denke bei den Algorithmen, mit denen ich arbeite werde ich den Chip auch 
noch zum austicken bringen...

von Marcel L. (marlic)


Lesenswert?

Das seltsame ist, dass ich ein bereits laufendes Projekt 
(https://youtu.be/Ml6VrlV3hvk) versucht habe zu portieren. Der I2S 
Buffer müsste 100%ig stabil sein. Die Effekte kenne ich, wenn der nicht 
hinter her kommt. Hier ist es aber teils ein richtig fieses teils sogar 
lautes knacken. Eigentlich hätte ich gedacht, wenn ich über I2C den 
ES8388 einmal einrichte, I2S und MCLK konfiguriert habe, dass dann 
eigentlich nichts mehr stören dürfte. Ich hatte zudem das Gefühl, dass 
SPI auch nicht benutzt werden darf. Bei dem Versuch SPI zu benutzen ist 
der Ton komplett ausgefallen.

von M. (Gast)


Lesenswert?

hast du beim ES8288 den MCLK auf GPIO0 gesetzt?

von Marcel L. (marlic)


Lesenswert?

Ja, ohne MCLK wäre kein ton gekommen. Bei der Benutzung vom 2. USB 
Anschluss mit externer Versorgung sind die Klicks/Knacken nicht mehr da 
gewesen. Allerdings scheint der ES8388 ein deutliches Grundrauschen zu 
erzeugen. Beim AC101 kann ich bei meinem kleinen 2.1 Lautsprecher Set 
absolut kein Rauschen hören (Lautstärke entspricht grob lautem Sprechen, 
wenn ein Signal kommt). Der ES8388 ist aber auch schon ohne Signal bei 
dieser Einstellung durch ein Rauschen gut hörbar. Vielleicht gibt es 
noch ein Register, um das Rauschen los zu werden.

von Bernd M. (bemdm)


Lesenswert?

Hallo,
eine Frage zum ESP32 A1S Eval (thinker).

Ich habe mal mit dem AC101_I2S_Audiolib-Test.ino (Michael U. 05.02.2020) 
experimentiert: 5 sec. MIC-Samples gespeichert, dann Bufferinhalt 1:1 
wieder zum AC101 geschrieben . Dazu
 - i2s_driver_uninstall,
 - i2s alles neu installiert
 - mit pPinConfig->data_out_num  = 25
 - Verst. eingeschaltet digitalWrite(GPIO_PA_EN, HIGH)
 - dann Loop über die samples
   ... i2s_write(I2S_PORT_TX, &tmp, sizeof(tmp), 
&iWritten,portMAX_DELAY);

Funktioniert soweit auch, aber aus dem Speaker kommt für 5 sec. nur so 
eine Art 'schnarren', zwar mit den Lautstärkeänderungen wie bei 
MIC-Aufnahme, aber das wars dann.
Liege ich richtig mit der Annahme, das man die MIC-Samples die man mit 
i2s_pop_sample gelesen hat 1:1 mit der gleichen I2S-Konfiguration - nur 
pPinConfig->data_out_num  = 25 - wieder zum AC101 senden können sollte 
(und die natürlich wieder hörbar sein sollten)? Oder ?
Die HW ist Ok. ESP32_A1S.ino  aus 
https://github.com/schreibfaul1/ESP32-audioI2S läuft ohne Problem.

Danke schon mal

MfG Bernd

von Marcel L. (marlic)


Lesenswert?

@friedemann77 benutzt du nur die Audiowiedergabe oder auch die Aufnahme 
per ES8388?
Die Audioausgabe funktioniert bei mir problemlos. Nur der Audioeingang 
funktioniert nicht so richtig. Hier entstehen die Clicks. Das 
durchschleifen (sprich ohne I2S) über den Mixer funktioniert allerdings 
auch ohne Probleme (hier wird auch kein MCLK benötigt).

von Friedemann W. (friedemann77)


Angehängte Dateien:

Lesenswert?

Mein Plan ist es eine Basis für Audioeffekte zu schaffen.

D.h. Mikrofon -> ADC -> I²S -> DMA_Buffer_lesen -> DSP Audio Effekt -> 
DMA_Buffer_schreiben -> DAC Kopfhörer Ausgabe.

Der Einfachheit halber habe ich die ES8388 Funktionen direkt ins IDF 
ausgelagert. D.h. mit dem ESP-IDF sollte der angefügte Quellcode bauen.
(Ich verwende hier Eclipse mit IDF, aktueller GIT Master Espressif)
Für die Implementierung von FFT u.a. Effekten wurde cpp statt c 
verwendet.

Der aktuelle Stand:

Man hört über den Kopfhörer den Eingang der Mikrofone, sogar in Stereo.
Allerdings bekomme ich es nicht hin einen Kanal Links oder Rechts zu 
muten, oder einfache Audiomanipulationen durchzuführen... irgendwas 
passt im Setup noch nicht... eventuell, muss ich auch 2 I²S Treiber 
verwenden.
Bin für alle Tipps dankbar :-)

von Marcel L. (marlic)


Lesenswert?

Danke für den Anhang, ich habe es bereits zum laufen bekommen. Die 
Anpassung für den ES8388 habe ich bei mir in mein Projekt integriert. 
Somit wäre dann auch einfache Manipulation möglich.
Ich hatte hier das Gefühl, dass Mikrofon und LineIn irgendwie gekoppelt 
sind.
Du kannst einen MixerInput sowie ja auch einen weiteren(I2S) Input 
wählen. Der Mixer läuft am I2S vorbei und läuft auch ohne MCLK. 
Vielleicht hast du das Direktsignal auf dem Ausgang oder zusätzlich.

von Friedemann W. (friedemann77)


Lesenswert?

Stimmt - der ADC nach dem PreAmp geht über den Mixer direkt auf den 
Ausgang.

Dann hat man zwar ein prima Signal am Kopfhörer - hat mit I2S aber nicht 
mehr viel zu tun.

-> Das Routing muss ich nochmal ansehen - scheint da gibt es noch 
Fehler...

/* DAC to output route mixer configuration */
   res |= es_write_reg(ES8388_ADDR, ES8388_DACCONTROL16, 0x1b);
   // 0x1b Input ADC after mic preamp

Hier wird das Audiosignal nach dem Mic PreAmp direkt auf den Ausgang 
gelegt.

von Friedemann W. (friedemann77)


Lesenswert?

Weiß jemand beim A1S-ES8388 wo man den Mic PreAmp (Lin2/Rin2) für I²S 
aktivieren kann?

-> Register 9 – ADC Control 1, Default 0000 0000
   MicAmp Gain Werte, ES8388_ADCCONTROL1

Das Mic Aufnahmesignal am Kopfhörer ist jedoch relativ leise zu hören - 
das hätte ich gerne lauter... (Es ist viel lauter, wenn ich das Signal 
nach Mic PreAmp direkt route... ES8388_DACCONTROL16, 0x1b )

: Bearbeitet durch User
von Friedemann W. (friedemann77)


Lesenswert?

Wo findet man denn zum ES8388 Informationen zum Aktivieren des Kopfhörer 
Verstärkers? Bzw. wie lässt sich dieser aktivieren? Für den Mic Preamp 
gibt es ja ein Register (s.oben) - für den Kopfhörerverstärker habe ich 
jedoch keine Infos im Datenblatt gefunden.

von Marcel L. (marlic)


Lesenswert?

Ist der Verstärker nicht teil vom Audio Kit? Ich würde jetzt vermuten, 
dass der ES8388 nur Line Pegel erzeugt.
IO21 ist mit CTRL von den Verstärkern auf dem Audio Kit verbunden. Diese 
sind aber nur mit den beiden Steckverbindern verbunden.

Für das Mikrofon kannst du den PGA Gain erhöhen (Register 0x09 
"ADCCONTROL1")
Um das direkt am Ausgang zu haben das Signal LMIXSEL und RMIXSEL im 
Reigster 0x26 "DACCONTROL16" auf 0b011

Allerdings wundere ich mich auch, dass man für I2S nur Input1 und Input2 
wählen kann im Register 0x0A "ADCCONTROL2". Sieht aber so aus, als müsse 
man hier z.B. Input2 wählen, damit dieses Signal in den PGA + MIC BOOST 
geht und dann an den ADC gehen kann.

Bezüglich der Lautstärke .. einen Zuwachs kann man wohl feststellen, 
aber wie bei dem alten Audio Kit ist der Sound nicht. Bei dem alten 
konnte man den ganzen Raum hören. Bei dem neuen mit dem ES8388 muss man 
trotzdem ans Mikrofon. Aber vielleicht gibt es hier noch ein Boost 
Schalter (Bias oder sowas).

: Bearbeitet durch User
von Friedemann W. (friedemann77)


Lesenswert?

"ES8388 is a high performance, low power and low cost audio CODEC. It 
consists of 2-ch ADC, 2-ch DAC, microphone amplifier, headphone 
amplifier, digital sound effects, and analog mixing and gain functions."

Mich hat irritiert, das ein Kopfhörer Verstärker explizit im Datenblatt 
erwähnt wird.

MP3 Audio playback konnte ich ebenfalls deutlich lauter hören, als 
record & playback via Mikrofon. Den PA Verstärker via GPIO21 konnte ich 
bisher ebenfalls nicht "aktivieren" zumindest habe ich bis dato keinen 
Unterschied gehört.

"Um das direkt am Ausgang zu haben das Signal LMIXSEL und RMIXSEL im
Register 0x26 "DACCONTROL16" auf 0x011"

-> Wird damit nicht das analoge Audiosignal über den Mixer an den 
Ausgang geroutet.

-> Man hört dann den ganzen Raum, aber dieses Signal läuft nicht über 
die I²S Buffer.

Das Signal in den Buffern, mit dem man per DSP "arbeiten" kann, ist viel 
leiser. Es muss aber irgendwie gehen, da die mp3 Wiedergabe mit 
ausreichender Leistung wiedergegeben werden kann...

: Bearbeitet durch User
von Friedemann W. (friedemann77)


Lesenswert?

Der externe A1S-Verstärker auf GPIO21 funktioniert für die Lautsprecher 
(am Platinen-Steckverbinder).

Testweise habe ich über ein Lookuptable ein Rechtecksignal erzeugt 
(int16_t +/-20000 je 50 Samples) und in den I²S Buffer kopiert - das ist 
abartig laut auf dem Kopfhörer, obwohl da noch etwas Luft nach oben ist.

-> Wenn ich das richtig sehe liegt das Problem der leisen Aufnahme dann 
vermutlich am Mikrofon, oder AD Wandler, evtl noch Settings...

von Marcel L. (marlic)


Lesenswert?

Moin,

ich habe jetzt mal alle Settings (Volume Pegel und Channels) getestet.
Hier habe ich das per MIDI angebunden: https://youtu.be/8UB3fYPjqSk

Ich hatte jetzt kleine Funktionen erstellt, welche dann den Kanal 
wechseln bzw. den Pegel anpassen: 
https://github.com/marcel-licence/esp32_midi_sampler/blob/main/es8388.ino

Der Mixer input ist das, was praktisch ohne ADC/DAC direkt an den 
Ausgang gegeben werden kann. Dort müsstest du IN2 wählen oder den post 
PGA (0b11).
Der andere input wählt den Eingang für den ADC bzw. eher das Signal für 
den PGA, welcher dann direkt an den ADC geht.

Auffällig ist, dass die Mikrofone tatsächlich nicht sonderlich 
empfindlich sind, oder es gibt noch eine Bias Einstellung. Allerdings 
ist auch die Zusammenschaltung von Mikrofon und LineIn etwas 
unpraktisch. Beim AC101 konnte man hin und her schalten, dort war das 
sauber getrennt.

Im Datenblatt vom ES8388 kann man das auch sehen, dass das zusammen 
hängt.

Datasheet: http://www.everest-semi.com/pdf/ES8388%20DS.pdf
User guide: 
https://dl.radxa.com/rock2/docs/hw/ds/ES8388%20user%20Guide.pdf

Viele Grüße
Marcel

von Friedemann W. (friedemann77)


Lesenswert?

Hi Marcel, bzgl MicIn auf Input2, der De-Emphasis hilft immens gegen das 
Quantisierungsrauschen, man kann noch deutlich mehr Verstärkung 
herausholen, wenn man den PGA (programmable gain amplifier) verwendet, 
die Aktivierung läuft über das AGC/AGL/ALC (autmatic gain control) 
Interface. Eventuell kann man dazu noch den volldifferentiellen MicModus 
verwenden - dann wäre das Maxmimum an SNR Ratio erreicht. Wieso findet 
man hier nie ein Beispiel... und muss tagelang suchen :-)

P.S. Wer denkt sich die ganzen Abkürzungen aus. Da blickt ja keiner mehr 
durch.

: Bearbeitet durch User
von Marcel L. (marlic)


Lesenswert?

Hi, danke für den Tipp. Das könnte ich ggf. mal ausprobieren. Den AGC 
wollte ich bewusst nicht benutzen, damit die Pegel nicht von selbst 
herum wandern. Volldiff scheint in Stereo nicht zu gehen .. leider.

von Friedemann W. (friedemann77)


Lesenswert?

Lässt sich der gleiche Anteil an A + B verwenden, d.h. Rauschen würde 
kompensiert. Bsp. MicL - inv(MicR). Mono würde mir reichen, da habe ich 
bisher noch nicht viel getestet. Die Lautstärke über die Programmierbare 
Gain Verstärkereinheit (ALC) ist richtig laut, wenn diese aktiviert 
wird. Es steigt aber auch der Rauschpegel.

: Bearbeitet durch User
von Friedemann77 (Gast)


Lesenswert?

Nach der Aktivierung der ESP-DSP Library habe ich etwas mit FFT/iFFT 
gespielt. -> Mit zusätzlicher Rechenlast steigt der Rauschpegel.

Merkwürdig ist auch, wenn Taster 6 gedrückt wird, wird das Mikro 
empfindlicher. Bei Druck auf Taster Boot wird das Rauschen weniger...

44.1kHz -> FFT (1024) -> iFFT (via ESP-DSP) -> Audioausgabe

ESP32 Stats

05:26:32.833 -> main             205885    16%
05:26:32.833 -> IDLE             1129900    92%
05:26:32.833 -> IDLE             932499    76%
05:26:32.833 -> ipc0             84877    6%
05:26:32.833 -> esp_timer        23    <1%
05:26:32.878 -> ipc1             89925    7%

Ich hätte nicht gedacht, dass der A1S ESP32 so ein kleines Rechenmonster 
ist :-) Wenn nur das Rauschen etwas weniger präsent wäre... aber die 
Verstärkung für das OnBoard Mikrofon ist auch nahezu am Anschlag, inkl. 
Automatic Gain Control.

von Marcel L. (marlic)


Lesenswert?

Hast du den ES8388 als codec in Verwendung? Bei dem AC101 ist die 
Empfindlichkeit eigentlich recht gut (deutlich besser jedenfalls als bei 
dem ES8388). Aber ja man hört auch da die benachbarten Leitungen 
schalten. Ich hatte z.B. SD Karten Zugriffe gehört.

Ja das Rechenwunder findet kein Ende =) In der Richtung Synthesizer 
Projekte kann man auch echt viel machen.

Wie bist du auf die Stats gekommen?

von Friedemann W. (friedemann77)


Lesenswert?

Die Stats um die Last pro CPU zu bestimmen, kann man im sdkconfig 
enablen (vTaskGetRunTimeStats). Hab hier mehrere Varianten des ES8388. 
Mal schauen ob die neuste Revision einen Unterschied macht.

        if (iCounter == 1000)
        {
          // Stats are enabled in sdkconfig freertos
          static char __stats_buffer[1024];
          vTaskGetRunTimeStats(__stats_buffer);
          printf("%s\n", __stats_buffer);
          vTaskList(__stats_buffer);
          printf( "%s\n", __stats_buffer);

          // main             686679    20%
          // IDLE             2517502    76%
          // IDLE             3199903    97%
          // esp_timer        23         <1%
        }

: Bearbeitet durch User
von Marcel L. (marlic)


Lesenswert?

Dankeschön, die Funktionen konnte ich leider nicht nutzen. Ich habe nun 
jetzt den internen clock cycle benutzt. Das funktioniert auch recht gut. 
Zudem wäre bei mir vermutlich die Loop immer bei 100%, da hier immer 
gewartet wird (I2S write mit max. Wartezeit).

von Pepe T. (pepe_t)


Lesenswert?

Das webradio läuft mit dem A1S eval mit ES8388 :)
Code von schreibfaul, der hier:
https://github.com/schreibfaul1/ESP32-audioI2S/tree/master/examples/ESP32-ES8388

Notwendige änderungen der pin definitionen:
------------
#define SD_CS         13

// GPIOs for SPI
#define SPI_MOSI      15
#define SPI_MISO       2
#define SPI_SCK       14

// I2S GPIOs
#define I2S_SDOUT     26
#define I2S_BCLK      27
#define I2S_LRCK      25
#define I2S_MCLK       0
#define I2S_DOUT      35

// I2C GPIOs
#define IIC_CLK       32
#define IIC_DATA      33

// Amplifier enable
#define GPIO_PA_EN    21
------------

: Bearbeitet durch User
von Marcel L. (marlic)


Lesenswert?

Passt aber leider nicht mit allen ES8388 boards. Ich hatte einiges an 
Feedback bekommen in den letzten Wochen.

Mittlerweile scheint es mehrere Versionen zu geben von dem Audio Kit.
Hier habe ich ein paar verschiedene Pin Definitionen gesammelt:
https://github.com/marcel-licence/ML_SynthTools/tree/main/src/boards

Bei dem ES8388 board gibt es auch Variationen. Frohes Neues!

von Pepe T. (pepe_t)


Angehängte Dateien:

Lesenswert?

Hat das mit der nummer hier zu tun?

von Pepe T. (pepe_t)


Angehängte Dateien:

Lesenswert?

Das rauschen beim mic-in ist mit eingeschalteter ALC extrem. Ist auch 
klar wenn kein ton kommt und die ALC auf 36db verstärkung geht. Das ALC 
max limit niedriger einstellen hilft. Für sprache läuft das gut:

es.write_reg(ES8388_ADDR, ES8388_ADCCONTROL10,0xE0);

Das rauschen ist aber immer noch ... naja ... probiers.
Der testsktech liest mic ein und schreibt gleich wieder raus. Man kann 
über tasten 1..6 das alc limit einstellen. Dipswitch 1 muss dafür auf 
ON, das ist mit einer taste verbunden. Board verion V2.2, die für $10 
von ali.

: Bearbeitet durch User
von chris_ (Gast)


Lesenswert?

Gerade habe ich auf Github ein Synthesizerprojekt mit dem Board 
entdeckt:
https://github.com/marcel-licence/esp32_basic_synth
Vielleicht können Codebeispiele für die Treiber daraus nützlich sein.

von kaerntner53 (Gast)


Lesenswert?

Hallo in die Runde,
hat irgendwer das Board (V2.2) mit dem ES8388 als MP3 Player von SD 
Karte zum Laufen bekommen?? Display über SPI und WEB Radio geht 
einwandfrei, aber in Kombination mit der SD Library krieg ich das Bord 
nicht zum laufen - weder mit noch ohne Display. Würde gern einen Player 
der entweder SD-MP3 oder WEB Radio spielt, aufbauen.

Beitrag #7102016 wurde von einem Moderator gelöscht.
von Helmut S. (hel_s)


Lesenswert?

Wenn ich den Sketch i2cscanner.ino verwende, dann wir sowohl AC101 als 
auch ES8388 gefunden und beide LEDs leuchten???
Was mache ich falsch?

: Bearbeitet durch User
von Helmut S. (hel_s)


Lesenswert?

Friedemann W. schrieb:
> Danke Jean-Luc,
>
> so etwas hatte ich schon fast vermutet - scheinbar gibt es mehrere
> unterschiedliche HW Varianten des A1S ESP32 Audio Kit Ver 2.2 - bzw. der
> sich darauf befindlichen A1S Platine.
>
> Hier mal auf die schnelle ein Arduino File um die Boards zu
> unterscheiden...
> Beim AC101 brennt LED4 - beim ES8388 brennt LED5 (hinter der
> Kopfhörerbuchse).
>
>
>    Important note:
>
>    There are different A1S HW variants.
>    These are installed onto the A1S Audio Kit
>
>    There is a version using AC101 for audio
>    others use the ES8388.
>
>    Attached is an Arduino file you can use
>    to differ between both boards.
------------------------------------------------------------------------ 
----
Wenn ich den Sketch i2cscanner.ino verwende, dann wir sowohl AC101 als
auch ES8388 gefunden und beide LEDs leuchten???
Was mache ich falsch?

von Helmut S. (hel_s)


Lesenswert?

Ich bin ein ESP32 Audio Kit Frischling :-)
...und würde gerne ein Projekt verwirklich, wo ich dieses verwenden 
möchte.
Aufgabe:
2 Eingangs-Signale (werden von einem externen Generator erzeugt / 
Links=Signal01 und Rechts=Signal02) sollen gemixt werden und das gemixte 
Signal auf beiden Ausgängen (Links / Rechts) ausgegeben werden.
Weiters sollen via Bluetooth die Eingänge (Links / Rechts), die 
Lautstärke, ein Low-Pass-Filter, ein Band-Pass-Filter und ein 
High-Pass-Filter geregelt werden.
Die eingestellten Werte sollen bei Spannungsausfall erhalten bleiben, 
damit man nicht wieder "justieren" muss.

Dieses Projekt habe ich schon mit einem Teensy4.0 + Teensy Audioshield 
(Teensy Audio Tool = super) und einem Bluetooth-Module verwirklicht.

Nun meine Frage an die "Community" - würde das mit dem ESP32 Audio Kit 
auch funktionieren?

von Friedemann W. (Gast)


Lesenswert?

Das Teensy Audioshield ist m.E. qualitativ schlechter als das AudioKit, 
beim AudioKit gibts mehr Gefummel - dafür deutlich günstiger. Ja geht, 
C++ Kenntnisse vorausgesetzt.

Ich hab für Teensy 4.x mein eigenes Audioshield gebaut. Damit hat man 
kein Rauschen mehr beim I/O.

von Helmut S. (hel_s)


Lesenswert?

Danke Friedemann W.,

Meine C++ Kenntnis sind sicher nicht die eines Profils.
Gibt es einen Sketch oder ähnliches, welchen ich als Grundgerüst 
verwenden könnte, damit ich nicht bei NULL beginnen muss.

Weiters würde mich das "Ich hab für Teensy 4.x mein eigenes Audioshield 
gebaut" interessieren -> Hintergrund, wie derzeit üblich gibt es immer 
wieder Lieferschwierigkeiten bei Teensy, Raspberry, Arduino....

von Friedemann W. (Gast)


Lesenswert?

Visual Studio Code Projekt aufsetzen, Audio I/O zum laufen bringen.
Je nach A1S Chip und Version gibt es Unterschiede.

https://www.ebay.de/itm/295044288463
Das sind ES8388 Header & Initialisierung gelistet.

von Martin W. (wntr)


Lesenswert?

Helmut S. schrieb:
> Wenn ich den Sketch i2cscanner.ino verwende, dann wir sowohl AC101 als
> auch ES8388 gefunden und beide LEDs leuchten???
> Was mache ich falsch?

Bei mir ist das gleiche der Fall. -> ESP32 Audio Kit V2.2 A221

Hast du das gleiche Kit? Wurde das Problem mal aufgelöst?

Ich habe die examples von https://github.com/pschatzmann/ testen wollen, 
bekam jedoch keine Ausgabe auf den Kopfhörerausgang.

Wäre cool, wenn sich jemand melden würde, ansonsten tauche ich mal 
tiefer ein.

von Abcd (abcdefghxx)


Angehängte Dateien:

Lesenswert?

Ich brauch den als webradio. Bruchst du code für ES8388 chip?

: Bearbeitet durch User
von Johannes (momrom)


Lesenswert?

Hallo,

ich habe auch ein ESP32 Audio Kit mit der Version 2.2 A221. Es leuchten 
darauf die LEDs 4 und 5.

Ich habe dafür das angepasste ADF von 
https://github.com/zhangtemplar/esp-adf verwendet und wie oben 
beschrieben den Code für die Lautstärke angepasst 
(Beitrag "Re: ESP32 A1S Eval").

Dieses ADF hat die Konfiguration für das Audio Kit gleich dabei, man 
muss keine GPIO-Werte für I2C und I2S ändern, sondern kann einfach in 
menuconfig das Board "ESP32-AiThinker-audio V2.297" auswählen.

Als DIP-Einstellung habe ich 1=ON, 2=OFF, 3=ON, 4=OFF, 5=OFF, damit 
funktionieren die Tasten 1 und 2, die anderen vier sind leider ohne 
Funktion (eventuell müsste man dafür doch GPIO-Werte anpassen, das habe 
ich nicht weiter untersucht).

Das Beispiel examples/player/pipeline_sdcard_mp3_control hat damit wie 
gewünscht die Dateien von der SD-Karte abgespielt.

von Ronald (ronald_t)


Lesenswert?

hallo ich bin total neu hier in  diesem forum und habe nur  erfahrungen 
in "Basic" ( angefangen mit Picaxe, dann mm-basic und nun  annex)wegen 
der ESP Cam bin ich  auf diese Plattform gestossen...nun  die Cam läuft 
siehe  "annex rds" das ist alles für basic ...mit einer einzigen zeile 
bindest du eine cam in  ein display ein... geil..
nun da ich nicht so scharf darauf bin viel zu löten  habe ich mir das 
esp32 AiS board gekauft um mir ein internetradio zu bauen...  oben 
aufgeführter sketch läuft und es ist ein guter klang  leider nur mit 
einem sender - gibt es diesen sketch auch mit einer web platform ? ( es 
lief  einige stunden unter annex basic  dann war alles aus und ich sitze 
s seit 3 tage  und probiere )
 wie gesagt der sketch läuft  nur miit einem  sender.( unter 
einbeziehung  der von euch empfohlenen änderungen ). spende auch wenn es 
hier soetwas gibt   :)))

liebe grüsse aus der Uckermark
Ron

von Joachim B. (jar)


Lesenswert?

Ronald schrieb:
> oben
> aufgeführter sketch läuft und es ist ein guter klang  leider nur mit
> einem sender

ah ein Suchspiel, ich mag aber nicht suchen welches "oben" du meinst!

hast du das auch überlesen?
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

von Ronald (ronald_t)


Angehängte Dateien:

Lesenswert?

Abcd schrieb:
> Ich brauch den als webradio. Bruchst du code für ES8388 chip?
dieser Beitrag vom 21.12.22

Danke für die Antwort -
ja hab ich gelesen :)
für einen eigenen Beitrag hab ich zuwenig Ahnung von der 
Arduino-Programmiersprache nämlich garkeine

von Joachim B. (jar)


Lesenswert?

Ronald schrieb:
> Danke für die Antwort

gerne und die Hälfte oder mehr fehlt, nach 3 fehlenden Files mag ich 
nicht mehr!

driver/i2s.h: No such file or directory

bin raus

von Ronald (ronald_t)


Lesenswert?

Joachim B. schrieb:
> Ronald schrieb:
>> Danke für die Antwort
>
> gerne und die Hälfte oder mehr fehlt, nach 3 fehlenden Files mag ich
> nicht mehr!
>
> driver/i2s.h: No such file or directory
>
> bin raus
ja ok danke

Beitrag #7380785 wurde vom Autor gelöscht.
von Ronald (ronald_t)


Angehängte Dateien:

Lesenswert?

Joachim B. schrieb:
> Ronald schrieb:
>> Danke für die Antwort
>
> gerne und die Hälfte oder mehr fehlt, nach 3 fehlenden Files mag ich
> nicht mehr!
>
> driver/i2s.h: No such file or directory
>
> bin raus

so nochmals vielen Dank für den Versuch mir zu helfen, mittlerweile hat
unser "starprogrammierer" es geschaft eine funktion  für  dieses Board
in das annex RDS zu intergrieren und zumindest ( als Anfang) läuft das
streaming von Radiosendern
wen es interssiert und wer ggf  noch nach  einfachen bzw überhaupt einer
lösung sucht

https://cicciocb.com/forum/viewtopic.php?p=3945#p3945

grüsse Ron

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.