Arduino Webserver: Textdatei in Webpage einbinden

Hallo zusammen,

ich möchte mir einen RS232-Datenlogger bauen. So weit so gut, um das ganze autark laufen lassen zu können, würde ich gerne per Webserver auf die Log-Daten zugreifen können. Die RS232-Daten sollen mit einem time-stamp versehen und dann in eine Textdatei: “log.txt” auf der SD-Karte geschrieben werden.

Code um eine HTML-Page von einer SD-Karte als Webserver zu laden, gibt es ja genug. Ich habe dann einfach mal folgenden Code von http://fluuux.de geklaut und angepasst.

#if ARDUINO > 18
#include <SPI.h> // Für Arduino Version größer als 0018
#endif
#include <Ethernet.h>
#include <TextFinder.h>
#include <SD.h>
 
byte mac[] = { 0x5A, 0xA2, 0xDA, 0x0D, 0x56, 0x7A }; // MAC-Adresse des Ethernet-Shield
byte ip[]  = { 192, 168, 2, 102 };                   // IP zum aufrufen des Webservers
byte sdPin = 4;                                      // Pin der SD-Karte
 
EthernetServer server(80);                           // Server port
 
File webFile;
 
void setup()
{  
  Ethernet.begin(mac, ip); // Client starten
  server.begin();          // Server starten
  Serial.begin(9600);
  Serial.println("ARDUINO - STEUERUNG");
 
  Serial.println("Initialisiere SD-Karte...");
  if (!SD.begin(sdPin)) 
  {
    Serial.println(" - Initialisierung der SD-Karte fehlgeschlagen!");
    return;
  }
  Serial.println(" - SD-Karte erfolgreich initialisiert.");
 
  if (!SD.exists("index.htm")) 
  {
    Serial.println(" - Datei (index.htm) wurde nicht gefunden!");
    return;
  }
  Serial.println(" - Datei (index.htm) wurde gefunden.");
 
  Serial.println();
  Serial.println("Verbraucher schalten");
}
 
void loop()
{
  EthernetClient client = server.available(); // Auf Anfrage warten
 
  if(client)
  {
 
    /************************
      Webformular anzeigen  *
    ************************/
    boolean current_line_is_blank = true;       // eine HTTP-Anfrage endet mit einer Leerzeile und einer neuen Zeile
 
    while (client.connected()) 
    {
      if (client.available())                   // Wenn Daten vom Server empfangen werden
      {
        char c = client.read();                 // empfangene Zeichen einlesen
        if (c == '\n' && current_line_is_blank) // wenn neue Zeile und Leerzeile empfangen
        { // Standard HTTP Header senden
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");
          client.println();
 
          // Website von SD-Karte laden
          webFile = SD.open("index.htm");  // Website laden
          if (webFile)
          {
            while(webFile.available())
            {
              client.write(webFile.read()); // Website an Client schicken
            }
            webFile.close();
          }
          break;
        }
        if (c == '\n') 
        {
          current_line_is_blank = true;
        } 
        else if (c != '\r') 
        {
          current_line_is_blank = false;
        }
      }
    }
    delay(1);
    client.stop();
  }
}

HTML Page:

<!DOCTYPE html>
<html>
<head>
  <title>WEBSERVER</title>
  <style type="text/css">
    h2 { margin-bottom:5px; }
  </style>
</head>
<body>
 
  <h1>Webserver</h1>
 
<p> 
 <object data="log.txt" type="text/plain" width="2000" height="1000"> 
 </object> 
</p> 

 
  <iframe name="ifr" style="display:none;" width="0" height="0"></iframe>
</body>
</html>

Und die log.txt vollgeschrieben.
Auf dem Rechner funktioniert das alles natürlich wundervoll mit der HTML-Page.
Alles auf dem Uno mit Ethernet-Shield geladen und es funktioniert natürlich nicht, weil der Arduino natürlich nur einmal Zugriff auf die SD-Karte bekommt und die HTML Page so die .txt-Datei nicht laden kann.

Hat jemand eine Idee wie ich das anders lösen könnte und würde sie mir verraten?
:confused:

Dein Sketch im Arduino sieht diesen Fall nicht vor, das die log Datei ausgegeben wird. Hast du vergessen, einzuprogrammieren.