Pages: [1]   Go Down
Author Topic: Datei von SD über Ethernet übertragen  (Read 1172 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 23
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo!

Ich habe das Ethernet-Shield und möchte mit meinem Arduino Relais über ein kleines Webinterface ansteuern. Einen kleinen HTTP-Server habe ich mir schon programmiert und der funktioniert inzwischen auch relativ gut.

Nun möchte ich das Web-Interface (eine kleine HTML-Seite mit etwas CSS und JS) von der SD-Karte lesen und direkt auf das Client-Objekt schreiben. Leider scheint der kleine Arduino das nicht mehr zu schaffen, denn mein Request wird einfach nicht beantwortet. Ich wollte nun erstmal gucken ob ich den Inhalt der Datei wenigstens auf die Serielle Verbindung schreiben kann, aber leider kommt nicht mal dort was an. Nachdem ich SD.open(..) aufgerufen habe passiert einfach gar nichts mehr. Eventuell ist der RAM voll?

Nun meine Frage: Was passiert genau wenn ich SD.open(...) aufrufe? Lädt er die Datei sofort in den RAM? Und wenn ja kann man die Puffergröße dafür eventuell einstellen?

Hier mal ein Auszug aus meinem Code:

Code:
void defaultAction(EthernetClient client,String params[]){ 
  if(SD.exists("frontend/index.htm")){
    client.write("File gefunden");

    File file = SD.open("frontend/indexmin.htm",FILE_READ);
    while(file.available()){
      Serial.write(file.read());
    }
    file.close();
  }else{
    client.write("File existiert nicht");
  }
}
Logged

Offline Offline
Edison Member
*
Karma: 21
Posts: 1419
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Aus dem geöffneten File liest Du zeichenweise, da wird nix automatisch in einen Puffer gelesen. Allerdings teilen sich SD und Ethernet-Schnittstelle den SPI Bus, daher könnte das die Ursache Deines Problems sein.
http://arduino.cc/en/Main/ArduinoEthernetShield:
Quote
Note that because the W5100 and SD card share the SPI bus, only one can be active at a time. If you are using both peripherals in your program, this should be taken care of by the corresponding libraries.

Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 23
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Und gibts dafür eine Patentlösung? Ich kann ja unmöglich die komplette Datei in den RAM lesen...
Logged

0
Offline Offline
Full Member
***
Karma: 2
Posts: 108
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

evtl externer webserver zum ablegen der daten...aber ich glaube das hilft dir nicht, da du bestimmt ohne pc arbeiten willst.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 23
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Auf der offiziellen Seite zum Ethernet-Shield steht:

Quote
There is an onboard micro-SD card slot, which can be used to store files for serving over the network.

Aber auch:

Quote
Note that because the W5100 and SD card share the SPI bus, only one can be active at a time. If you are using both peripherals in your program, this should be taken care of by the corresponding libraries. If you're not using one of the peripherals in your program, however, you'll need to explicitly deselect it. To do this with the SD card, set pin 4 as an output and write a high to it. For the W5100, set digital pin 10 as a high output.

Wie gehe ich damit nun um? Denn der SD-Slot soll ja u.a. grade dafür da sein Files über das Netzwerk "serven" zu können. Aber wie, wenn man nicht gleichzeitig auf beides zugreifen kann?
Logged

Germany
Offline Offline
Full Member
***
Karma: 1
Posts: 130
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo andi357,

natürlich funktioniert das mit der richtigen, entsprechenden Library, die automatisch die Pin-Ansteuerung hin und her wechselt.
Das mit imho beste Tutorial findest du hier Ladyada

Quote
Then we do the trick where we make the hardware SS pin #10 to an OUTPUT and HIGH to disable the wiznet chip while we check the card contents.
Das ist die Stelle an der sich die Spreu vom Weizen trennt smiley

Gruß,
TriB
Logged

Pages: [1]   Go Up
Jump to: