Forum: Mikrocontroller und Digitale Elektronik ESP32 A1S Eval


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.