Forum: Mikrocontroller und Digitale Elektronik Esp32 usb host


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 Flo S. (flos6323)


Lesenswert?

Hallo,
Gibt es eine Möglichkeit mit einem Esp32 in der Arduino ide einen USB 
Stick zu lesen?
Ich hatte vor damit mp3 Dateien an ein vs1053 mp3 decoder zu senden und 
dann abzuspielen.

von Einer K. (Gast)


Lesenswert?

USB Host?
Eher nicht so einfach.

Wie wäre es mit SD Karten?

von Sebastian R. (sebastian_r569)


Lesenswert?

Mit nem MAX3421E dazwischen könnte es gehen

Beitrag #5754304 wurde von einem Moderator gelöscht.
von Flo S. (flos6323)


Lesenswert?

Sebastian R. schrieb:
> Mit nem MAX3421E dazwischen könnte es gehen

Vielen dank.
Ich dachte eigentlicht, dass nur Mäuse und Tastaturen daran 
funktioniren. Ich werde mich mal über das Teil ein bisschen schlau 
mschen.
viele Güße
Flo S

von funky (Gast)


Lesenswert?

also der esp32 sollte mp3 auch ohne externen decoder verarbeiten können. 
für irgendwas müssen 2 cores mit 240mhz doch gut sein

von Flo S. (flos6323)


Lesenswert?

funky schrieb:
> also der esp32 sollte mp3 auch ohne externen decoder verarbeiten können.
> für irgendwas müssen 2 cores mit 240mhz doch gut sein

Ich weiß, ich konnte aber keine vernünftigen Beispiele finden. Ein paar 
gibt es, die funktionieren aber nicht vernünftig.

: Bearbeitet durch User
von Michael U. (amiga)


Angehängte Dateien:

Lesenswert?

Hallo,

ich halte die ESP8266Audio-Lib
https://github.com/earlephilhower/ESP8266Audio
immernoch für einen guten Ansatz. Leider darf man inzwischen einige 
Sachen aus den Bugreports selber einpflegen, weil der Programmierer da 
wohl im Moment nichts gemacht hat.
Läuft hier als "WLAN-Lautsprecher" (nur einschalten, spielt fest 
definierten Stream) und als Stream/SD-Card Player (unvollständige 
Dauerbastelei).

Gruß aus Berlin
Michael

von Flo S. (flos6323)


Lesenswert?

Vielen Dank, ich werde es mir anschauen.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Flo S. schrieb:
> Ich dachte eigentlicht, dass nur Mäuse und Tastaturen daran
> funktioniren.

Nö, das ist ein Full-Speed-Host, d.h. alles, was mit 
USB1.1-Geschwindigkeiten (1.5 MBit/sec und 12 MBit/sec) zurechtkommt, 
funktioniert damit. Und dazu gehören auch USB-Massenspeicher aller Art. 
Die sind dann zwar nicht besonders schnell, aber funktionieren tun sie.

von John Doe (Gast)


Lesenswert?

Flo S. schrieb:
> Hallo,
> Gibt es eine Möglichkeit mit einem Esp32 in der Arduino ide einen USB
> Stick zu lesen?
> Ich hatte vor damit mp3 Dateien an ein vs1053 mp3 decoder zu senden und
> dann abzuspielen.

Wenn es nur MP3 vom Stick auf den VS1053 sein soll, dann mach es Dir 
einfach und nimm einen ch376. Damit reicht auch ein AVR als Controller.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Die etwas teurere, aber deutlich besser dokumentierte Alternative zum 
CH376 ist der VNC1L ("Vinculum") von FTDI.

von Einer K. (Gast)


Angehängte Dateien:

Lesenswert?

Flo S. schrieb:
> Ich hatte vor damit mp3 Dateien an ein vs1053 mp3 decoder zu senden und
> dann abzuspielen.

Ich wieder hole meine Frage:
> Wie wäre es mit SD Karten?
Denn das ist viel einfacher mit dem ESP32 zu machen.
Nur ein modifizier Adapter ist nötig.

von Flo S. (flos6323)


Lesenswert?

Arduino Fanboy D. schrieb:
> Flo S. schrieb:
>> Ich hatte vor damit mp3 Dateien an ein vs1053 mp3 decoder zu senden und
>> dann abzuspielen.
>
> Ich wieder hole meine Frage:
>> Wie wäre es mit SD Karten?
> Denn das ist viel einfacher mit dem ESP32 zu machen.
> Nur ein modifizier Adapter ist nötig.

Danke für die Idee. Ich wollte eigentlich nur usb benutzen, da ich 
Haufenweise usb-Buchsen habe, die noch rumliegen und benutzt werden 
wollen.
Aber wenn das so einfach mit dem Adapter geht, ist das natürlich viel 
besser.
Dann mach ich mir nen Gehäuse dafür aus nem 3d-Drucker und gut is.

von Flo S. (flos6323)


Lesenswert?

Michael U. schrieb:
> Hallo,
>
> ich halte die ESP8266Audio-Lib
> https://github.com/earlephilhower/ESP8266Audio
> immernoch für einen guten Ansatz .

Das funktioniert. Leider bricht der Radiostream nach ein paar Sekunden 
ab.

von Michael U. (amiga)


Lesenswert?

Hallo,

wie sieht Dein benutzter Source aus? ESP32 oder ESP8266?
Wie gibst Du aus? I2S und externer I2S-DAC?
Es gibt mehrere bugfixe, die er leider noch nicht eingearbeitet hat.

Speziell AudioOutputI2S .h/.cpp, AudioFileSourceBuffer .h/.cpp und 
AudioFileSourceICYStream.cpp.
Ich kann da gern mal nachschauen.
Bei wackliger WLAN-Verbindung recht der Buffer trotzdem manchmal nicht, 
dann stottert er trotzdem kurz beim reconnect. Mit PSRAM sollte das zu 
überbrücken sein. Ansonsten spielt er hier einen Radiostream stundenlang 
ohne Probleme.

Gruß aus Berlin
Michael

von Flo S. (flos6323)


Lesenswert?

Ich benutze einen Esp32 mit dem eingebauten dac.

Das ist mein benutzte Code: (der Beispiel code)

1
#include <Arduino.h>
2
3
#ifdef ESP32
4
    #include <WiFi.h>
5
#else
6
    #include <ESP8266WiFi.h>
7
#endif
8
#include "AudioFileSourceICYStream.h"
9
#include "AudioFileSourceBuffer.h"
10
#include "AudioGeneratorMP3.h"
11
#include "AudioOutputI2SNoDAC.h"
12
13
// To run, set your ESP8266 build to 160MHz, update the SSID info, and upload.
14
15
// Enter your WiFi setup here:
16
const char *SSID = "MeinWlan";
17
const char *PASSWORD = "MeinPasswort";
18
19
// Randomly picked URL
20
const char *URL="https://wdr-1live-live.icecastssl.wdr.de/wdr/1live/live/mp3/128/stream.mp3";
21
22
AudioGeneratorMP3 *mp3;
23
AudioFileSourceICYStream *file;
24
AudioFileSourceBuffer *buff;
25
AudioOutputI2SNoDAC *out;
26
27
// Called when a metadata event occurs (i.e. an ID3 tag, an ICY block, etc.
28
void MDCallback(void *cbData, const char *type, bool isUnicode, const char *string)
29
{
30
  const char *ptr = reinterpret_cast<const char *>(cbData);
31
  (void) isUnicode; // Punt this ball for now
32
  // Note that the type and string may be in PROGMEM, so copy them to RAM for printf
33
  char s1[32], s2[64];
34
  strncpy_P(s1, type, sizeof(s1));
35
  s1[sizeof(s1)-1]=0;
36
  strncpy_P(s2, string, sizeof(s2));
37
  s2[sizeof(s2)-1]=0;
38
  Serial.printf("METADATA(%s) '%s' = '%s'\n", ptr, s1, s2);
39
  Serial.flush();
40
}
41
42
// Called when there's a warning or error (like a buffer underflow or decode hiccup)
43
void StatusCallback(void *cbData, int code, const char *string)
44
{
45
  const char *ptr = reinterpret_cast<const char *>(cbData);
46
  // Note that the string may be in PROGMEM, so copy it to RAM for printf
47
  char s1[64];
48
  strncpy_P(s1, string, sizeof(s1));
49
  s1[sizeof(s1)-1]=0;
50
  Serial.printf("STATUS(%s) '%d' = '%s'\n", ptr, code, s1);
51
  Serial.flush();
52
}
53
54
55
void setup()
56
{
57
  Serial.begin(115200);
58
  delay(1000);
59
  Serial.println("Connecting to WiFi");
60
61
  WiFi.disconnect();
62
  WiFi.softAPdisconnect(true);
63
  WiFi.mode(WIFI_STA);
64
  
65
  WiFi.begin(SSID, PASSWORD);
66
67
  // Try forever
68
  while (WiFi.status() != WL_CONNECTED) {
69
    Serial.println("...Connecting to WiFi");
70
    delay(1000);
71
  }
72
  Serial.println("Connected");
73
74
  file = new AudioFileSourceICYStream(URL);
75
  file->RegisterMetadataCB(MDCallback, (void*)"ICY");
76
  buff = new AudioFileSourceBuffer(file, 2048);
77
  buff->RegisterStatusCB(StatusCallback, (void*)"buffer");
78
  out = new AudioOutputI2SNoDAC();
79
  mp3 = new AudioGeneratorMP3();
80
  mp3->RegisterStatusCB(StatusCallback, (void*)"mp3");
81
  mp3->begin(buff, out);
82
}
83
84
85
void loop()
86
{
87
  static int lastms = 0;
88
89
  if (mp3->isRunning()) {
90
    if (millis()-lastms > 1000) {
91
      lastms = millis();
92
      Serial.printf("Running for %d ms...\n", lastms);
93
      Serial.flush();
94
     }
95
    if (!mp3->loop()) mp3->stop();
96
  } else {
97
    Serial.printf("MP3 done\n");
98
    delay(1000);
99
  }
100
}

von puc2000 (Gast)


Lesenswert?

ESP32-S2

von fee (Gast)


Lesenswert?


von Manfred S. (stieneker)


Lesenswert?

Moin Leute,
ich habe da derzeit eine "wahnsinnige" Idee in meinem Hinterkopf.
Nachdem meine esp32 Internetradio wunderbar funzt, denke ich über 
folgendes nach.

Könnte man einem DAB USB Dongel (wie für Android Autoradios üblich /SDR 
Chips) auch einen ESP32 "füttern"?

Ich kenne DADDUINO etc und habe diesbzgl. In der letzten Zeit viel 
gelesen. Zur Zeit scheint das aber alles 'zu ruhen"...!?

Hintergrund ist:
Ich möchte alte Autoradios für Oldtimer (hier SAAB) eventuell auf DAB+ 
hochrüsten.

Herzliche Grüße
 Manfred

von Harald K. (kirnbichler)


Lesenswert?

Manfred S. schrieb:
> Zur Zeit scheint das aber alles 'zu ruhen"...!?

Und? Funktioniert Software nicht mehr, wenn nicht ständig jemand dran 
rumbastelt?

Fehlt Dir irgenndwas am DABDUINO-Projekt?

von Manfred S. (stieneker)


Lesenswert?

Hallo,
es ist ja eigentlich für Raspi geschrieben und ich empfinde es heute als 
etwas "in die Jahre" gekommen.
Es muß doch möglich sein, die USB Kommunikation mit den SDR /DAB+ Sticks 
mit esp32 nachbilden zu können. Der Stick müsste dann mit MP3 Files o.ä. 
antworten.
Beim Webradio funktioniert das ja auch perfekt.
Hat jemand Ideen, kennt jemand die Kommunikation /Protokolle /Befehle, 
die zwischen SDR/DAB Sticks und Rechner ausgetauscht werden?
Ich bin für jeden Hinweis dankbar!

Viele Grüße
 Manfred

von Harald K. (kirnbichler)


Lesenswert?

Manfred S. schrieb:
> es ist ja eigentlich für Raspi geschrieben und ich empfinde es heute als
> etwas "in die Jahre" gekommen.

Und? Ich verstehe Dein Problem nicht. Du hast Sourcecode, den musst Du 
halt portieren. Was hat das Alter des Sourcecodes damit zu tun? Anders 
als die Hipsterprogrammiersprachen, die alle drei Wochen inkompatibel zu 
sich selbst werden, ist das bei C und C++ nicht der Fall. Man kann 
problemlos auch jahrzehntealten Code übersetzen.

Manfred S. schrieb:
> Es muß doch möglich sein, die USB Kommunikation mit den SDR /DAB+ Sticks
> mit esp32 nachbilden zu können. Der Stick müsste dann mit MP3 Files o.ä.
> antworten.

Kann es sein, daß Du nur sehr vage  Vorstellungen davon hast, was so ein 
SDR/DAB+-USB-Stick macht?

von Manfred S. (stieneker)


Lesenswert?

Hallo,
du schreibst:
Du hast Sourcecode, den musst Du halt portieren. Was hat das Alter des 
Sourcecodes damit zu tun?

Ich denke, das ist kein guter Weg. Das wäre ein "reingenearing". Das 
kann man zwar machen, ist aber "zu zeitaufwendig" (das sind solche 
Projekte aber immer ;)

Du hat Recht, ich weiß (leider) nicht genau, wie die Kommunikation auf 
der USB Schnittstelle mit so einem RDS/DAB Chip abläuft. Das wüsste ich 
aber gerne, darum frage ich.
Herzliche Grüße
 Manfred

von Harald K. (kirnbichler)


Lesenswert?

Manfred S. schrieb:
> Ich denke, das ist kein guter Weg. Das wäre ein "reingenearing".

Nein, es ist kein Reengineering, wenn Du bestehende Sourcen verwendest. 
Reengineering wäre es, wenn Du ohne bestehende Sourcen den Krempel neu 
entwickeln müsstest, und dabei bei einem funktionierenden Beispiel mit 
Analysemethoden die Kommunikation belauschen und verstehen müsstest.

Das ist aber bei bestehendem Sourcecode nicht der Fall. Den musst Du nur 
portieren, und dabei ist es wirklich vollkommen wurscht, wie alt der 
Sourcecode ist.

von Manfred S. (stieneker)


Lesenswert?

Hallo,
was empfiehlst du denn für einen Stick bzw. Sourcecode?

Herzliche Grüße
 Manfred

von Manfred S. (stieneker)


Lesenswert?

Hallo,
es gibt scheinbar keine "seriösen" Lieferanten der dabduono Boards mehr.

Hat jemand vielleicht Schaltpläne etc. zu dem Projekt?

Viele Grüße
 Manfred

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.