Forum: Mikrocontroller und Digitale Elektronik Esp32 Bluetooth Audio


von Flo S. (flos6323)


Lesenswert?

Gibt es irgendwo eine vernünftige Beschreibung (am besten auf deutsch, 
wenn nicht auf deutsch, dann auf Englisch), wie man a2dp und avrc mit 
einem Esp32 benutzt?

von Flo S. (flos6323)


Lesenswert?

keiner?

von Timmo H. (masterfx)


Lesenswert?


von Flo S. (flos6323)


Lesenswert?


von Timmo H. (masterfx)


Lesenswert?

Flo S. schrieb:
> Timmo H. schrieb:
>> https://github.com/bluekitchen/btstack
>> https://github.com/esp32vn/esp32-a2dp-sink
>> https://github.com/redisr/esp32-p2-a2dp
>
> Vielen Dank ? ?

Dank nicht mir sondern Google. Das sind quasi die ersten 3 Links die 
Google bei der suche nach "esp32 a2dp" ausspuckt. Das Ergebnis hättest 
du also auch schon vor 10 Stunden haben können

: Bearbeitet durch User
von T.Roll (Gast)


Lesenswert?

Einfach verhungern lassen, statt zu googlen @ Timmo.
Fuehrt ja so zum Ziel.

von Flo S. (flos6323)


Lesenswert?

T.Roll schrieb:
> Einfach verhungern lassen, statt zu googlen @ Timmo.
> Fuehrt ja so zum Ziel.

Vielen Dank für diesen Tollen Beitrag (NICHT!) und diese tolle Stimmung 
mal wieder hier im Forum!
Ich hatte in der Zeit was besseres zu tun als was für mein Bastelprojekt 
rauszusuchrn.

von dudly (Gast)


Lesenswert?

Flo S. schrieb:
> T.Roll schrieb:
>> Einfach verhungern lassen, statt zu googlen @ Timmo.
>> Fuehrt ja so zum Ziel.
>
> Vielen Dank für diesen Tollen Beitrag (NICHT!) und diese tolle Stimmung
> mal wieder hier im Forum!
> Ich hatte in der Zeit was besseres zu tun als was für mein Bastelprojekt
> rauszusuchrn.

also lässt du andere für dich suchen weil die ja nichts besseres zu tun 
haben? frecher geht's garnicht mehr

von Flo S. (flos6323)


Lesenswert?

Timmo H. schrieb:
> In 9 Stunden gar nicht gegooglelt?
> https://github.com/bluekitchen/btstack
> https://github.com/esp32vn/esp32-a2dp-sink
> https://github.com/redisr/esp32-p2-a2dp

Leider ist das nicht für die Arduino IDE geeignet.
Ich suche jetzt seid 3 Stunden nach Libarys für die arduino IDE und habe 
nix gefunden.

von Timmo H. (masterfx)


Lesenswert?

Flo S. schrieb:
> Timmo H. schrieb:
>> In 9 Stunden gar nicht gegooglelt?
>> https://github.com/bluekitchen/btstack
>> https://github.com/esp32vn/esp32-a2dp-sink
>> https://github.com/redisr/esp32-p2-a2dp
>
> Leider ist das nicht für die Arduino IDE geeignet.
> Ich suche jetzt seid 3 Stunden nach Libarys für die arduino IDE und habe
> nix gefunden.
Danach hattest du ja auch nicht gefragt. Soweit ich weiß hat bis auf BLE 
noch keiner eine Arduino-Lib gemacht. Aber du kannst ja durchaus die in 
den Beispielen verwendeten API-Funktionen auch aus Arduino heraus 
aufrufen.

von Flo S. (flos6323)


Lesenswert?

Timmo H. schrieb:
> Aber du kannst ja durchaus die in
> den Beispielen verwendeten API-Funktionen auch aus Arduino heraus
> aufrufen.

Wo muss man die ganzen BT dateien hinkopieren, damit nich irgendwelche 
#include Dateinen fehlen?

von Joachim (Gast)


Lesenswert?

Autor: Timmo H. (masterfx)
>Dank nicht mir sondern Google. Das sind quasi die ersten 3 Links die
>Google bei der suche nach "esp32 a2dp" ausspuckt. Das Ergebnis hättest
>du also auch schon vor 10 Stunden haben können

Dass die Suchergebnisse von Google Nutzer- und Vorgeschichten-abhängig 
sind, ist Dir so weit geläufig?

von Timmo H. (masterfx)


Lesenswert?

Durchaus, bekomme aber die gleichen Ergebnisse auf einem neutralen 
Rechner (andere IP cookies täglich gelöscht)

: Bearbeitet durch User
von Flo S. (flos6323)


Lesenswert?

Timmo H. schrieb:
andere IP cookies täglich gelöscht

Hab ich gemacht. Hab auch nen anderen Browser ausprobiert (Tor Browser) 
und mich nicht bei Google angemeldet. Ich bekomme aber trotzdem nichts 
für die Arduino IDE auch wenn ich nach '' esp32 a2dp avrc Arduino IDE '' 
gesucht habe.

von Timmo H. (masterfx)


Lesenswert?

Dass du nichts für arduino findest schrieb ich ja schon, da hilft auch 
das cookie löschen nichts. Das bezog sich auf Joachims Kommentar

von Karl B. (karl12345)


Lesenswert?

Flo S. schrieb:
> Leider ist das nicht für die Arduino IDE geeignet.

Ich habe das selbe Problem.
Desswegen suche ich jetzt nach einem IC oder Modul, was das unterstützt 
und vom ESP32 gesteuert werden kann.

von Esp (Gast)


Lesenswert?

Ich wollte auch was mit machen, also direkt geht in Arduino nicht aber 
man könnte natürlich ne Lib machen.

Nen eigenen IC braucht man aber nicht dafür, es gibt von espressif das 
sdk da gibt aich beispiele.

Werd mich mal dran setzt ob das so klappt

von Esp (Gast)


Angehängte Dateien:

Lesenswert?

So grad mal 10min rum gespielt, das klappt ganz easy in Arduino mit dem 
Example von espressif.. Kanns pairen, und bei Lied starten etc bekommt 
der ESP das als event. Also die links von oben sind schon richtig, werd 
das nurnoch in ne Lib verpacken damits den code net so zumüllt. Für alle 
die auch was in die richtung machen wollen hier schonmal das momentane, 
einfach aus dem Beispiel oben zusammen kopiert, sollte aber so laufen.
1
... siehe Anhang

sorry keine ahnung wie man das in nen spoiler oder so packt.

--

Welchen Teil von "Längeren Sourcecode nicht im Text einfügen, sondern 
als Dateianhang" hast Du jetzt nicht verstanden?

-rufus

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

> sorry keine ahnung wie man das in nen spoiler oder so packt.

Meinst du diese Dinger die auf manche Autos montiert sind?

So große Dateien gehören in einen Anhang.

von Marcus (Gast)


Lesenswert?

> sorry keine ahnung wie man das in nen spoiler oder so packt.
Hier gibt es ein gutes Tutorial, wie man das Ganze in eine Library 
verpackt:
https://www.arduino.cc/en/Hacking/LibraryTutorial

von Michael U. (amiga)


Lesenswert?

Hallo,

Esp schrieb:
> So grad mal 10min rum gespielt, das klappt ganz easy in Arduino mit dem
> Example von espressif..

vielen Dank erstmal, compiliert hier ohne Fehler. Muß ich mal mit 
rumspielen.
Was mir auffällt: 75% Flash belegt?
Ich bin im Moment zwar auch bei 77%, aber mit 4" SPI-Touchdisplay mit 
der TFT_eSPI-Lib, ESP8266Audio mit MP3-Software-Decoder und Ausgabe über 
I2S.
Was mir gerade auffällt: ich muß mal schauen, wie beim ESP32 OTA 
organisiert wird. Beim ESP8266 waren da ja der halbe Programmflash als 
Puffer nötig. Beim ESP32 offenbar nicht.

Gruß aus Berlin
Michael

von Flo S. (flos6323)


Angehängte Dateien:

Lesenswert?

Michael U. schrieb:
> compiliert hier ohne Fehler

Bei mir kommen Fehlermeldungen. Irgendwas ist mit ESP_LOGE nicht 
richtig.
Ich habe den Code einfach kopiert und ein paar *.h Dateien auch kopiert 
(siehe Blder im Anhang).

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Flo S. schrieb:
> Irgendwas ist mit ESP_LOGE nicht richtig.

Lies doch, was da steht:

"ret" ist hier nicht bekannt.

von Flo S. (flos6323)


Angehängte Dateien:

Lesenswert?

Rufus Τ. F. schrieb:
> "ret" ist hier nicht bekannt.

Das habe ich gelesen.
ich weiß nur nicht, wie ich diesen Fehler beheben soll.

Ein paar andere Fahler bei mir habe ich aber behoben: Ich habe viele *.h 
Dateien in den Projektordner kopiert, obwohl sie schon standartmäßig in 
der Arduino IDE vorhanden sind.
Ich bekomme aber noch die selbe Meldung.

Die Dateien, die ich jetzt im Projektordner habe sind im Anhang.

: Bearbeitet durch User
von Michael U. (amiga)


Lesenswert?

Hallo,

ich habe nur seinen Sketch kopiert, neuen Sketch erstellt, seinen Inhalt 
rein und compiliert.
IDE 1.8.5 portable installiert, ESP32 github vom 31.05.2018

Gerade nochmal Compiler-Meldungen eingeschaltet und compiliert: keine 
warnings, keine errors.
Mal geflasht: mein Handy findet zumindest einen ESP_SPEAKER.

Gruß aus Berlin
Michael

von Flo S. (flos6323)


Angehängte Dateien:

Lesenswert?

Michael U. schrieb:
> seinen Inhalt
Ich muss noch diese Dateien (aus dem Anhang) einfügen.
Die habe ich aus der ESP Idf kopiert.
Wenn die nicht drind sind, steht in den Fehlermeldungen, dass die 
benötigt werden.
Wenn ich sie dann eingefüge habe, kommt diese Fehlermeldung
1
'ret' was not declared in this scope
, von der ich oben geschrieben habe.
Ich weiß nur nicht, wie ich die beheben soll.

von Flo S. (flos6323)


Lesenswert?

Michael U. schrieb:
> IDE 1.8.5 portable installiert

Diese Version geht auch nicht.

von Michael U. (amiga)


Lesenswert?

Hallo,

ich würde jetzt mal kühn behaupten, daß an der Installation von IDE / 
ESP32 was nicht stimmt...

Habe gerade mal die aktuelle github-Version vom ESP32/Arduino 
reingeworfen: mit Vorsicht zu genießen, mein Streamplayer crasht 
komplett,
//  WiFi.disconnect();
//  WiFi.softAPdisconnect(true);

mindestens einer der beiden Aufrufe endet in einer Guru Meditation.
Ohne geht WiFi, allerdings ist auch die I2S-Ausgabe kaputt.
Außerdem statt 77% Flash sind 87% belegt...
Habe erstmal meine ESP32 Version von Ende Mai wieder reingenommen.

Gruß aus Berlin
Michael

von Flo S. (flos6323)


Lesenswert?

Michael U. schrieb:
> ich würde jetzt mal kühn behaupten, daß an der Installation von IDE /
> ESP32 was nicht stimmt...

Danke für den Tipp.
Jetzt geht es.
Leider ist der Esp in einer Neustartschleife.
Das wird am seiellen Monitor ausgespuckt:
1
ets Jun  8 2016 00:22:57
2
3
rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
4
configsip: 0, SPIWP:0xee
5
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
6
mode:DIO, clock div:1
7
load:0x3fff0018,len:4
8
load:0x3fff001c,len:808
9
load:0x40078000,len:6084
10
load:0x40080000,len:6696
11
entry 0x400802e4
12
E (317) spiram: SPI RAM enabled but initialization failed. Bailing out.
13
ESP_ERROR_CHECK failed: esp_err_t 0x103 (ESP_ERR_INVALID_STATE) at 0x400d12a4
14
file: "C:\Users\flo08\Documents\Arduino\esp32-avrc-a2dp-test\esp32-avrc-a2dp-test.ino" line 344
15
func: void setup()
16
expression: esp_bt_controller_mem_release(ESP_BT_MODE_BLE)
17
18
Backtrace: 0x400928c8:0x3ffb1f20 0x40092e50:0x3ffb1f40 0x400d12a4:0x3ffb1f60 0x4016847e:0x3ffb1fa0
19
20
Rebooting...

Dann startet der ESP neu und gibt das wieder aus...

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Na, das ist ja tatsächlich sehr komfortabel. Da steht sogar, welche 
Funktion in welcher Zeile des Codes das Problem verursacht.

Schon mal nachgesehen, was da passiert?

von Michael U. (amiga)


Lesenswert?

Hallo,

passiert bei mir mit der aktuellen ESP32 Version von github auch,
mit meiner alten geht es.
Da sind wohl noch einige Bugs in der Geschichte, die Umstellung auf das 
aktuelle IDK ist ja erst 3 Tage alt...
Mal schauen, ob mein Bekannter da Zeit und Lust hat, tiefer einzusteigen 
und ein paar Bugreports zu machen.

Gruß aus Berlin
Michael

von Flo S. (flos6323)


Lesenswert?

Rufus Τ. F. schrieb:
> Na, das ist ja tatsächlich sehr komfortabel. Da steht sogar, welche
> Funktion in welcher Zeile des Codes das Problem verursacht.
>
> Schon mal nachgesehen, was da passiert?

Ich habe das gelesen. Ich weiß aber nicht, wie ich das beheben soll.

von Flo S. (flos6323)


Lesenswert?

Michael U. schrieb:
> mit meiner alten geht es

Kann man irgendwo die alten Versionen runterladen?
Oder kann jemand die alte Version, falls sie noch jemand hat, auf Google 
Drive, Media fire oder Dropbox,...  Hochladen?

: Bearbeitet durch User
von Flo S. (flos6323)


Lesenswert?

Flo S. schrieb:
> Kannman irgendwo die alten Versionen runterladen?

Jetzt klappt es ?
Ich habe einfach auf GitHub nach einem Fork gesucht, der noch nicht 
aktuallisiert wurde.

von Flo S. (flos6323)


Lesenswert?

Wie kann ich denn das Sigal, was aus dem ESP rauskommt, an die internen 
DACs weiterleiten?

: Bearbeitet durch User
von Michael U. (amiga)


Lesenswert?

Hallo,

Du bist der Zeit etwas zu weit voraus. ;-)
Ich muß mich erstmal mit Audio über BT befassen, wie kommen da die Daten 
überhaupt an? Komprimiert? In welchem Format?
Schön wäre es aus meiner Sicht, wenn ESP8266Audio um eine passende 
Stream- und Decoderfunktion erweitert würde.
Keine Ahnung, ob er da irgendwelche Pläne hat, ich würde dann ohnehin 
lieber über I2S ausgeben, das wäre dann damit aber kein Problem.

Mal etwas abwarten, ich habe hier noch genug Beschäftigung rumliegen...

Mir würde im Moment z.B. schon reichen, wenn ich rausfinde, wie ich eine 
eingebundene SD-Card wieder komplett abmelden kann, ich brauche den Ram 
für den Stream-Puffer und es läuft ja nie gleichzeitig z.B. MP3-Stream 
und Play von SD.

Gruß aus Berlin
Michael

: Bearbeitet durch User
von Flo S. (flos6323)


Lesenswert?

Michael U. schrieb:
> Ich muß mich erstmal mit Audio über BT befassen, wie kommen da die Daten
> überhaupt an? Komprimiert? In welchem Format?

Bei mir gibt es 2 pins, wo Daten rauskommen. Ich wollte testen, was 
passiert, wenn man das Signal an die DACs leitet. Ist nur ein Versuch.

von Michael U. (amiga)


Lesenswert?

Hallo,

Flo S. schrieb:
> Bei mir gibt es 2 pins, wo Daten rauskommen. Ich wollte testen, was
> passiert, wenn man das Signal an die DACs leitet. Ist nur ein Versuch.

ich habe in den Source noch nicht weiter reingeschaut.
Deine Antwort sagt mir im Moment auch nicht, was aus den 2 Pins für 
Daten rauskommen...

Gruß aus Berlin
Michael

von Flo S. (flos6323)


Lesenswert?

Michael U. schrieb:
> Deine Antwort sagt mir im Moment auch nicht, was aus den 2 Pins für
> Daten rauskommen...

Da bin ich grade bei, das rauszufinden.

von Marc (Gast)


Lesenswert?

Wenn Ihr in den obigen Code schaut
https://www.mikrocontroller.net/attachment/highlight/369364

seht Ihr, das in der Funktion
1
void bt_app_a2d_data_cb(const uint8_t *data, uint32_t len)

die I2S Ausgabe deaktiviert ist.

Wenn man keinen I2S DAC zu Hause hat, kann man einen Sigma-Delta-Wandler 
programmieren. Das Beispiel findet sich in dieser Library:

https://github.com/earlephilhower/ESP8266Audio/blob/master/src/AudioOutputI2SNoDAC.cpp

In dieser Funktion:
1
void AudioOutputI2SNoDAC::DeltaSigma(int16_t sample[2], uint32_t dsBuff[8])

Ich verwende diese Art der Wandlung für mein Webradio, das ich quasi 
täglich benutze:
Beitrag "Re: Webradio basteln"

Also kurz: mit einem RC-Tiefpass und einem externen Verstärker sollte 
sich der Ton hörbar machen lassen.

von Michael U. (amiga)


Lesenswert?

Hallo,

Marc, Du schaffst einen alten herrn ganz schön...
Ich werde mich durchwühlen, I2S-DAC ist ja verfügbar, weißt Du ja aus 
Deinem verlinkten Thread.
Eigentlich wollte ich ja garnicht mit dem BT-Zeug rumspielen.

Muß mal schauen, wie ich den I2S-Kram aus ESP8266Audio da reingepackt 
bekomme.
Vielen Dank nochmal für Deinen bisherigen Anteil an der BT-Geschichte.

Gruß aus Berlin
Michael

von Flo S. (flos6323)


Lesenswert?

Marc schrieb:
> void AudioOutputI2SNoDAC::DeltaSigma(int16_t sample[2], uint32_t
> dsBuff[8])

Und wie soll ich das einbauen?

von Michael U. (amiga)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe ja geahnt, daß es meinem Bekannten keine Ruhe läßt.
Spielt hier im Moment als BT-Lautsprecher vom PC aus.
Ausgabe ist I2S, Pins in setup() anpassen wenn nötig.
Läuft mit meiner "alten" und seiner aktuellen ESP32-Version.
Er hat irgendwie geflucht wegen geänderter Strukturen und Aufrufe, das 
Espressif-Demo
https://github.com/espressif/esp-idf/tree/master/examples/bluetooth/a2dp_sink
ist wohl nicht so sonderlich gepflegt.

Ich hänge den Arduino Sketch mal an.
Ich muß mir das jetzt erstmal ganz in Ruhe anschauen...

Gruß aus Berlin
Michael

: Bearbeitet durch User
von Flo S. (flos6323)


Lesenswert?

Vielen Dank ?
Es Funktioniert!
Wenn man einen Lautsprecher an den i2s Signal pin anschließt, dann hört 
man die Musik.
Sie hört sich aber übersteuert an. Ich vermute, dass das daran liegt, 
dass das Signal noch digital ist. Wie bekommt man das Signal (vielleicht 
auch hier mit:
Marc schrieb:
> void bt_app_a2d_data_cb(const uint8_t *data, uint32_t len) )
An die DACs leiten?




Wie kann man die avrc Kommandos aus der avrc_api benutzen?

von Marc (Gast)


Lesenswert?

Michael U. (amiga)
>ich habe ja geahnt, daß es meinem Bekannten keine Ruhe läßt.
>Spielt hier im Moment als BT-Lautsprecher vom PC aus.

Super! Ein ausdrückliches Lob für Dich und Deinen Bekannten von mir.
Vielleicht kann man jetzt das Webradio auch als Bluettooth-Lautsprecher 
benutzen.

Jetzt könnte man sich überlegen, ob man das ganze in eine Library 
verpackt, damit das Haupt-Sketch nicht so zugemüllt wird.

>Flo S. (flos6323)
>Wenn man einen Lautsprecher an den i2s Signal pin anschließt, dann hört
>man die Musik.
>Sie hört sich aber übersteuert an.

Das Standard Format der I2S schnittstlle sind 32 Bit Daten, 16 Bit für 
den linken und 16 Bit für den rechten Kanal. Wenn man keinen I2S Dac 
hat, kann man die I2S Schnittstelle dazu missbrauchen, den Bitstrom 
eines Sigma-Delta-Modulators auf die Schnittstelle zu geben und damit 
einen Ton zu erzeugen. Wenn man den Datenausgang der I2S Schnittstelle 
auf einen RC-Tiefpass gibt, erhält man dann ein gutes Mono-Signal.

Sigma-Delta-Modulator klingt kompliziert, ist aber eine ziemlich 
übersichtliche Funktion.

Du musst also vor die Ausgabe auf die I2S-Schnitstelle deinen DAC-Wert 
in den Sigma-Delta-modulierten Wert umwandeln. Den Link auf die 
Funktion, die das kann, habe ich Dir oben geschickt.

Das Ergebnis dürfte besser klingen als die Ausgabe auf die 8Bit DACs.

von Flo S. (flos6323)


Lesenswert?

Marc schrieb:
> Wenn man den Datenausgang der I2S Schnittstelle
> auf einen RC-Tiefpass gibt, erhält man dann ein gutes Mono-Signal.

Ich werde mir dann wol einen I2s DAC besorgen, weil eich ein stereo 
Signal brauche.

von Michael U. (amiga)


Lesenswert?

Hallo,

Marc schrieb:
> Super! Ein ausdrückliches Lob für Dich und Deinen Bekannten von mir.
> Vielleicht kann man jetzt das Webradio auch als Bluettooth-Lautsprecher
> benutzen.
Habe ich bei meinem unfertigen auch so angedacht.

> Jetzt könnte man sich überlegen, ob man das ganze in eine Library
> verpackt, damit das Haupt-Sketch nicht so zugemüllt wird.
Mal schauen, ob er die Zeit dazu findet, er hat darüber schon 
nachgedacht und definitv die besseren C++ Kenntnisse als ich...

Ausgabe bei mir mit einem I2S-DAC, ich hatte mal 2 Module bestellt, sind 
zwar nicht China-billig, aber noch bezahlbar:
https://www.amazon.de/Adafruit-I2S-Stereo-Decoder-UDA1334A/dp/B079GB1Z1M/ref=sr_1_1?ie=UTF8&qid=1530512098&sr=8-1&keywords=I2S+UDA1334A

hmmm, ich hatte die noch unter 10€ gefunden...
Es gehen auch die PCM5102A Module, die sind etwas billiger zu finden.
Aus China hatte ich auch noch für ein paar I2S-ICs für cent-Beträge, da 
muß man natürlich noch etwas Kleinkram drumrum löten, gehen aber auch 
sehr gut.

Im Moment bin ich aber für das Webradio bei 2 Verstärkermodulen mit I2S 
gelandet:
https://www.amazon.de/Adafruit-I2S-Class-Amplifier-Breakout/dp/B01GFNYKK6/ref=sr_1_cc_1?s=aps&ie=UTF8&qid=1530512563&sr=1-1-catcorr&keywords=I2S+verst%C3%A4rker
Lassen sich mit 2 Widerständen auf R oder L Ausgabe setzen, also nur I2S 
parallel ran und fertig.

Kosten leider auch etwas mehr...

Gerade noch was interessantes gefunden wenn 2x2W an 4 Ohm reichen:
https://www.ebay.de/itm/Digilent-PmodAMP3-410-270-Pmod-AMP3-Stereo-Power-Amplifier-/322799332282

Gruß aus Berlin
Michael

: Bearbeitet durch User
von Flo S. (flos6323)


Lesenswert?

Michael U. schrieb:
> Ich hänge den Arduino Sketch mal an.



Wie kann man die avrc Kommandos aus der avrc_api benutzen?

von Marc (Gast)


Lesenswert?

Michael schrieb
>Im Moment bin ich aber für das Webradio bei 2 Verstärkermodulen mit I2S
>gelandet:
>https://www.amazon.de/Adafruit-I2S-Class-Amplifier...
>Lassen sich mit 2 Widerständen auf R oder L Ausgabe setzen, also nur I2S
>parallel ran und fertig.

Von denen habe ich auch welche. Allerdings habe ich bis jetzt nur einen 
für Mono benutzt.
Für Stereo bräuchtest Du den B-Typ oder müsstest einen Inverter in die 
LRCLK Leitung schalten:

RCLK  specifies  whether  left-channel  data  or  right-
channel  data  is  currently  being  read  by  the  digital  audio
interface.    The  MAX98357A  indicates  the  left  channel
word when LRCLK is low, and the MAX98357B indicates
the left channel word when LRCLK is high

von Michael U. (amiga)


Lesenswert?

Hallo,

Marc schrieb:
> Für Stereo bräuchtest Du den B-Typ oder müsstest einen Inverter in die
> LRCLK Leitung schalten:

nein, hat mich auch erst irritiert. Die haben nur R/L zur LRCLK-Phase 
vertauscht, wozu auch immer...

Für die Zuordnung ist SD zuständig, Datenblatt  Seite 17, Table 5. 
SD_MODE Control.
Das Verstehen und dann die Berechnung der Widerstandswerte hat mich 
ziemlich genervt, H-Pegel an SD braucht bei 5V betriebsspannung einen 
Strombegrenzungswiderstand, ist bei mir 15k, ergibt dann den linken 
Kanal. Beim 2. ist der Widerstand 360k gegen + und macht dann den 
rechten Kanal.
Das gilt alles für beide Versionen, A und B.

Flo S. schrieb:
> Wie kann man die avrc Kommandos aus der avrc_api benutzen?

Bis jetzt keine Ahnung. Ich muß mich erstmal mit dem ganzen BT-Kram 
auseinandersetzen...
Windows sagt mir eine Audiosenke, eine Remotesteuerung und 2 unbekannte 
Dienste. Audiosenke ist klar, der Rest im Zusammenspiel mit dem ESP noch 
völlig unklar.

Zumindest läuft der Lautsprecher hier erstmal absolut stabil.

Gruß aus Berlin
Michael

: Bearbeitet durch User
von Flo S. (flos6323)


Angehängte Dateien:

Lesenswert?

Michael U. schrieb:
> Flo S. schrieb:
>> Wie kann man die avrc Kommandos aus der avrc_api benutzen?

Ich habe in bisschen herrunprobiert.
Die Commands, mit dem man einen befehl mit dem esp32 sendet, 
funktionieren schon mal.(AVRC _commands.h im Anhang)
Die Datei einfach in den Projektordner kopieren, dann
1
#include "AVRC _commands.h"
oben hinschriben und die Funftionen benutzen.

Die Funktionen, wo man Informationen vom Abspierer bekommt, machen grade 
noch ein paar Probleme. Wenn ich das hinbekommen habe, lade ich eine 
neue Version von AVRC _commands.h hoch.

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

In eine *.h Datei gehören keine Funktionsrümpfe!

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

... es sei denn, sie sind als inline spezifiziert.

Das aber ist ein i.d.R. voreiliger Optimierungsschritt.

von Marc (Gast)


Angehängte Dateien:

Lesenswert?

Hier ein kleiner Zwischenbericht meinerseits:
Ich habe das BlueTooth-Beispiel von oben auf meinen neuen ESP32 
programmiert.
1. Das Programm hat nicht funktioniert und im Terminal einen Fehler 
geworfen
2. Ich habe es noch mal mit einer älteren ESP32-Arduino Installation 
probiert: Erst ging es nicht wegen einem Brown-Out-Fehler. Zusätzliches 
Netzteil mit USB-Hub brachte die Lösung.
3. Ich kann die I2S Signale mit dem Oszilloscope sehen. Leider 
unterscheidet sich das neue ESP32-Pinout von dem alten und ich kann 
nirgends eine Pinout-Description finden...

Von Hand heraus gemessen:

G27: SD, Data
G26: SCK, Clock
G25: WS, Word Select

Zusammen mit dem MAX98357A funktioniert es.

von Michael U. (amiga)


Lesenswert?

Hallo,

wenn Du Dich auf den Source aus meinem Archiv beziehst:
das I2S-Pinout steht hardcoded ab ca. Zeile 75
1
    i2s_pin_config_t pin_config = {
2
        .bck_io_num = 33,
3
        .ws_io_num = 32,
4
        .data_out_num = 15,
5
        .data_in_num = -1                                                       //Not used
6
    };
Du kannst die eigentlich frei auf fast alle Pins mappen.

Der Digilent PmodAMP3 ist gestern angekommen, Unterlagen findet man bei 
Digilent. Ich habe erstmal J1 nachgerüstet und den 0 Ohm entfernt, um 
den Verstärker mit 5V betreiben zu können, Logik ist max. 3,6V.
3,3V habe ich meist nicht mit ausreichend Strom verfügbar, 2x1,3W an 4 
Ohm wollen auch fast 1A. Die verstärker an USB ist da höchstens für 
einen leisen Test und mit 8 oder 16 Ohm Lautsprechern machbar, sonst 
stürzt das sowieso ab.

Allerdings geht es mir gerade wie Dir: anderes EPS-Board genommen, Pins 
umsortiert und trotzdem noch nichts gehört...
Muß ich mir heute mal genau anschauen.

Gruß aus Berlin
Michael

von Flo S. (flos6323)


Lesenswert?

Ich habe mich gestern mal wieder dran gewagt und honbekommen, das das 
I2S signal su dem dac kommt.

Ich habe das Beispiel aus a2dp_sink.zip von oben genommen.

Ich habe die i2s Config etwas angepasst:
1
  i2s_config_t i2s_config = {
2
    .mode = (i2s_mode_t)(I2S_MODE_MASTER | I2S_MODE_TX | I2S_MODE_PDM ),                                  // Only TX
3
    .sample_rate = 44100,
4
    .bits_per_sample = I2S_BITS_PER_SAMPLE_16BIT,
5
    .channel_format = I2S_CHANNEL_FMT_RIGHT_LEFT,                           //2-channels
6
    .communication_format = I2S_COMM_FORMAT_I2S_MSB,
7
    .intr_alloc_flags = ESP_INTR_FLAG_LEVEL1,
8
    .dma_buf_count = 6,
9
    .dma_buf_len = 60,                                                      //
10
    .use_apll = false,
11
    //.fixed_mclk = -1,
12
  };
13
14
  i2s_driver_install(I2S_NUM_0, &i2s_config, 0, NULL);
15
16
  /*i2s_pin_config_t pin_config = {
17
    .bck_io_num = 26,
18
    .ws_io_num = 25,
19
    .data_out_num = 27,
20
    .data_in_num = -1                                                       //Not used
21
    };*/
22
  i2s_set_dac_mode(I2S_DAC_CHANNEL_BOTH_EN);
23
  i2s_set_pin(I2S_NUM_0, NULL);

Jetzt spielt es aus den eingebauten DACs. Leider ist das Audiosignal 
ziemlich verrauscht, wenn ich etwas leise abspiele.
Außerdem sind die Töne, die da raus kommen zu tief. Die Musik ist aber 
noch erkennbar.
Hat jemand ne Idee, wie man das beheben kann?
Wenn ich einn Sinus Ton abspiele kommt ein verzerrter Sinus raus.
Die obere Halbwelle ist breit gezogen und die untere ist 
Zusammengequetscht.

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.