Forum: Mikrocontroller und Digitale Elektronik ESP8266 Sample audio mit 8000Hz 8Bit


von Marc S. (xerox95)


Lesenswert?

Ich möchte mit einem ESP8266-12f ein Audiosignal samplen und per UDP 
senden.

Kann der ESP8266-12f 8Khz mit 8Bit samplen oder ist das schon zu 
schnell?

Ziel ist es meine Klingelanlage "Smart" zu machen und auch mit dem an 
der Ausenstation sprechen zu können. Das ganze soll per UDP ins Netzwerk 
und dann weiter per VoIP an SmartPhone/Telefon.

Um klein anzufangen, und weil ich noch keine erfahrung mit dem samplen 
habe, wollte ich erst mal audio von meinem PC in den ADC des ESP geben 
und dass wieder per Netzwerk an mein PC übertragen um es dann mit ffmpeg 
o.ä. wieder in eine Audio format zu verwandeln und anzuhören.

Aber zu erst die Theorie: Ist das mit dem ESP8266-12f überhaupt möglich?

von Gustl B. (gustl_b)


Lesenswert?


von Steve van de Grens (roehrmond)


Lesenswert?

Geht nicht, dafür ust er viel zu langsam. Der ADC wird auch intern von 
der WiFi Schnittstelle benutzt. Außerdem taugt er nicht für Audio, da er 
zu sehr auf die vom IC selbst erzeugten Störungen reagiert.

Du bräuchtest einen externen ADC mit Puffer und SPI oder I2S 
Schnittstelle.

von Marc S. (xerox95)


Lesenswert?

Steve van de Grens schrieb:
> Du bräuchtest einen externen ADC mit Puffer und SPI oder I2S
> Schnittstelle.

Danke für den Hinweis.
Erfahrung was ich da nehmen kann oder Empfehlung/erfahrung?

Ich hänge auch nicht wirklich an dem ESP8266. Wenns alternativen gibt, 
die das "out-of-the-box" können.

Gibt halt fertige Projekte (https://github.com/peteh/doorman, 
https://github.com/atc1441/TCSintercomArduino, 
https://github.com/Syralist/tcs-monitor), die ich eben um die 
Sprachkomponente erweitern möchte.

Würde das mit einem MCP3201 funktionieren?

von Steve van de Grens (roehrmond)


Lesenswert?

Mangels Erfahrung kann ich dir keinen empfehlen.

von Gustl B. (gustl_b)


Lesenswert?

Eine Suche nach
I2S audio codec
liefert.

von Gustl B. (gustl_b)


Lesenswert?

Marc S. schrieb:
> Würde das mit einem MCP3201 funktionieren?

Ja, aber der braucht Platz, du musst dich um ein Frontend kümmern, ...

Nimm einen fertigen audio codec. Die gibt es schon auf kleiner Platine 
für wenig Geld.

Du kannst sogar gleich ein digitales Mikrofon nehmen das dir I2S 
liefert.

von Benedikt L. (Firma: Dem Ben seine Leiche) (dembenseineleiche) Flattr this


Lesenswert?


von Gustl B. (gustl_b)


Lesenswert?

Ähm es geht hier um Audio Input nicht Output.

von Marc S. (xerox95)


Lesenswert?

Gustl B. schrieb:
> Ja, aber der braucht Platz, du musst dich um ein Frontend kümmern, ...

Was meinst du mit "platz"?
Ziel war ja erst mal das Audio Signal auf einer potenteren Kiste im Netz 
zu haben. Dort kann ich ja alles mögliche damit machen.

>Nimm einen fertigen audio codec. Die gibt es schon auf kleiner Platine
>für wenig Geld.

Was könnte ich da nehmen? Sollte das gleich was sein was Asterisk kann 
oder warum sollte ich da achten?

Endziel ist wie gesagt die Anbindung via VoIP (an Asterisk).
Daher wollte ich die ESP Implementierung so simpel wie möglich halten.

von Gustl B. (gustl_b)


Lesenswert?

Marc S. schrieb:
> Was meinst du mit "platz"?

Das Bauteil ist nicht klein und auch nicht SMD. Und die brauchst Platz, 
Platz auf der Platine für alles was noch nicht in dem Bauteil drinnen 
ist. Frontend, Versorgung, ...

Marc S. schrieb:
> Was könnte ich da nehmen?

Naja, was willst du denn? Wenn du I2S haben willst, dann nimm einen 
Baustein an den du ein Mikrofon anschließen kannst und der I2S liefert.
Oder nehme direkt ein Mikrofon mit I2S Ausgang.

Die Suche nach
I2S audio codec
liefert echt viele Ergebnisse. Billige kleine Platinen mit 
Mikrofoneingang, einzelne Chips, ...
Das ist am Ende deine Entscheidung ob du Platinen bauen willst und dann 
einzelne Chips suchst oder ob du eine fertige Platine an den ESP 
verbindest.

von Daniel D. (danielduese)


Lesenswert?

Hab insgesamt keine guten Erfahrungen mit den ASC von ESP. Die von den 
STM MCs sind deutlich rauschärmer. Oft haben die mehr als genug 
parallel, womit man noch bessere Ergebnisse ausrechnen kann. Fing schon 
beim STM8 an.

von Marc S. (xerox95)


Lesenswert?

Gustl B. schrieb:
> Das Bauteil ist nicht klein und auch nicht SMD. Und die brauchst Platz,
> Platz auf der Platine für alles was noch nicht in dem Bauteil drinnen
> ist. Frontend, Versorgung, ...

Platz ist nicht das Problem.
Geht erst mal um den Lerneffekt.

Was bitte ein "Frontend" für den MCP3201 ist musst du mir erklären.
Kenne das nur aus der Software Entwicklung für Benutzeroberflächen, das 
wird hier wohl kaum gemeint sein.

von Gustl B. (gustl_b)


Lesenswert?

Marc S. schrieb:
> Was bitte ein "Frontend" für den MCP3201 ist musst du mir erklären.

AD Wandler können Spannung nur in einem bestimmten Spannungsbereich 
erfassen. Oft von Masse bis zur Referenzspannung. Audio ist aber oft um 
die Masse herum symmetrisch, hat also auch mal negative Spannung. Im 
einfachsten Fall reicht eine AC Kopplung und dann ein DC Offset mit 
Spannungsteiler. Aber Audiosignale haben auch oft nur eine sehr geringe 
Amplitude. Das kann der ADC zwar erfassen, aber der Wertebereich wird 
nur zu einem kleinen Teil Ausgenutzt.
Das kann man durch einen OPV vor dem ADC verstärken.

Audio codec chips haben das oft schon eingebaut, das ist die rundum 
sorglos Lösung. Denn ein normaler ADC ist nicht speziell auf Audio 
optimiert.

Weil der MCP3101 bis auf den ADC nicht viel eingebaut hat braucht der 
einiges zusätzlich. Im Datenblatt ist das auf Seite 22.

Ein Audio Codec wie der SGTL5000XNLA3 hat schon viel eingebaut. Man hat 
einstellbare Verstärkung, man kann den Audiopfad schalten zwischen den 
Quellen und Senken, ... Ist dafür aber mehr Komplexität bei der 
Software.

Es gibt auch reine Audio ADCs wie den CS5343 der hat eingebaute Filter 
und braucht weniger externe Beschaltung.

von Steve van de Grens (roehrmond)


Lesenswert?

Das Audio Signal muss auch durch einen steilflankigen Tiefpass geschickt 
werden, bevor es mit einem ADC gesampelt werden kann.

von N. M. (mani)


Lesenswert?

Im Netz gibt es viele Beispiele mit dem INMP441 Mic. Das kann schon 
selbst I2S und kostet auf einer Platine fertig verlötet (wenn man es 
nicht selbst löten kann) wenige Euro. Bei Ali unter 2.
Also wieso eigentlich nicht sowas?

von Marc S. (xerox95)



Lesenswert?

Das mit dem DC Offeset/AC Kopplung war ich mir so semi bewusst.
Lösen wollte ich das so: "Siehe Anhang: 
Bildschirmfoto_vom_2023-12-31_18-47-28.png".

Würde es tatsächlich erst mal mit dem MCP3201 versuchen. Da es mit einem 
Audio Codec nach mehr Arbeit aussieht, und ja der Lerneffekt erst mal im 
Vordergrund steht.

von Steve van de Grens (roehrmond)


Lesenswert?

Marc S. schrieb:
> Lösen wollte ich das so

Der Filter ist zu simpel. Vor allem in Kombination mit der niedrigen 
Abtastrate. Außerdem vermisse ich da eine Verstärkerstufe. 
Pufferspeicher hast du damit auch noch keinen zwischen ADC und ESP.

von Gustl B. (-gb-)


Lesenswert?

Kannst du so machen. Wird auch irgendwie funktionieren.

von Marc S. (xerox95)


Lesenswert?

Gustl B. schrieb:
> Kannst du so machen. Wird auch irgendwie funktionieren.

Steve van de Grens schrieb:
> Der Filter ist zu simpel. Vor allem in Kombination mit der niedrigen
> Abtastrate. Außerdem vermisse ich da eine Verstärkerstufe.
> Pufferspeicher hast du damit auch noch keinen zwischen ADC und ESP.

Verbesserungsvorschläge/tips oder gar Lösungsansätze sind immer gerne 
gesehen :)

von Steve van de Grens (roehrmond)


Lesenswert?

Marc S. schrieb:
> Verbesserungsvorschläge/tips oder gar Lösungsansätze sind immer gerne
> gesehen

Nimm einen Audio Codec. Sowas bauen heutzutage nicht mal mehr 
Hobbyelektroniker freiwillig diskret auf.

von Frank K. (fchk)


Lesenswert?

Marc S. schrieb:

> Würde das mit einem MCP3201 funktionieren?

Das ist zwar ein ADC, aber der ist für Dich nicht wirklich geeignet. Da 
lernst Du auch nur, wie man es nicht macht.

Das ganze soll ja im Telekommunikationsumfeld eingesetzt werden. Da ist 
der Standard 8kHz mit 8 Bit logarithmischer Kodierung (A-law, u-law). 
Das entspricht etwa 13 Bit bei linearer Codierung. Vorteil: geringere 
Datenmenge (Du hast ja nur 8 bit), aber ohne großen Qualitätsverlust 
(hört sich fürs Ohr wie 13 oder 14 Bit an, weil das Ohr ja auch 
nichtlinear ist).

Für so etwas gibts passende Bausteine, die die Daten passend ausgeben 
und auch entgegennehmen. Du willst ja sprechen und hören, also brauchst 
Du einen Coder und einen Decoder, also einen Codec, und das idealerweise 
in einem Chip.

Einer der das kann ist der hier z.B.:
https://www.ti.com/product/TLV320AIC1103 oder
https://www.ti.com/product/TLV320AIC1110

Der kann beispielsweise auch DTMF erzeugen.

Dieser Codec hat zwei Schnittstellen, und Du musst beide gleichzeitig 
benutzen! Über I2C programmierst Du die internen Register des Codecs. 
Über I2S sendest und empfängst Du die Audiodaten, und zwar 
ununterprochen und kontinuierlich.

Dafür gibts auch ein Evalboard:
https://www.ti.com/lit/ug/slau092/slau092.pdf

Ob der ESP8266 das alles so kann, weiß ich nicht. Wenn ich überhaupt zu 
irgendetwas in dieser Richtung greifen würde, dann eher zu ESP32, weil 
der deutlich mehr Wumms hat. Aber da wissen andere mehr.

fchk

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.