Arduino Datei auf PC übertragen

Ich nehme eine Audiodatei mit dem VS1053 auf. Diese Datei soll nun auf meinen PC per serieller Verbindung übertragen werden. Die Datei wird dann an meinem PC weiterverarbeitet. Nun ist die Frage wie bekomme ich das hin ?

File f = SD.open(filename,READ_FILE);
String res;
    while (f.available()) {
      res += f.read();
      res += ".";
      Serial.println("working");
    }
    Serial.println("start");
    Serial.println(res);
    Serial.println("end");
    f.close();

Bisher gebe ich die Datei so aus. Hier ist das Problem, dass nicht alles ausgegeben wird nur ein Bruchteil.

File f = SD.open(filename,READ_FILE);
Serial.println("start");
String res;
    while (f.available()) {
      Serial.println(f.read())
    }        
    Serial.println("end");
    f.close();

Hier kommt mein Programm am PC nicht mit. Am PC lasse ich ein Java Programm laufen mit einer Bibliothek für die serielle Verbindung mit dem Arduino.

Ich hoffe es ist einigermaßen verständlich erklärt.

Das Gegenstück zu read() ist nicht println() ,sondern write(). Das würde die Datei unverändert übertragen.

Hoffentlich merkst du auch, dass du den störenden String res gar nicht brauchst.

Wenn du den Datei-Inhalt wie in deinem ersten Beispiel als Serie von Zeilen mit je einer Dezimalzahl übertragen willst, verstehe ich dein Problem auf der PC-Seite nicht.

Das Problem ist jetzt, dass ich unauswertbare Daten bekomme: x⸮xf~⸮⸮`ff⸮⸮⸮x

File f = SD.open(file, FILE_READ);
    while (f.available()) {
      Serial.write(f.read());
    }

Es ist eine .ogg Datei, die ich auslesen möchte.

Die Datei enthält keine Zeichen (Buchstaben), sondern binäre Werte, die sich nicht direkt als lesbarer Text darstellen lassen. Entweder Du liest die übertragenen Bytes ebenfalls binär und speicherst sie binär ab, oder Du sendest die Bytes als Dezimalzahlen (siehe michael_x), die vom Empfänger vor dem Abspeichern wieder in binäre Bytes umgewandelt werden müssen.

Das Problem ist jetzt, dass ich unauswertbare Daten bekomme

Das Problem bei BinärDaten ist eher, dass du diese nicht mit Kommentartext wie "start" und "end" mischen solltest, und dass es wenig Sinn macht, die Daten roh anzuzeigen.

Du könntest dich in die ogg Bitstream Struktur einlesen, und parallel zum unveränderten Umkopieren auf dem PC die Page Header auswerten und evtl. etwas sinnvolles anzeigen.

Gibt es hier keine einfachere Lösung die Datei automatisch auf den PC zu übertragen ?

Die SD Karte rausnehmen und am PC umkopieren ? :slight_smile:

Einfacher als auf beiden Seiten target.write(source.read()); zu machen, kann ich mir nicht vorstellen.

OK, den Start nicht verpassen und das Ende erkennen fehlt, und das ist bei Binärdaten prinzipiell nicht so leicht.
Möglich wäre

  • Selber einen Rahmen drumherum legen (Dateigröße vorher senden, Prüfsumme hinterher, etc…)
  • Im Empfänger Dateistruktur kennen und auswerten
  • Zeit (wenn keine Zeichen mehr kommen, ist das wohl das Ende gewesen)
  • Nach einem vorhandenen serial file transfer protocol suchen, das es auf Arduino und PC gleichermaßen gibt. Das Problem existiert, seit es Computer und Serielle Verbindungen gibt, also schon sehr lange.

XMODEM, KERMIT … aus dem vorigen Jahrtausend …