Anlegen der HTML-Seite für Arduino Webserver

Hallo,

habe vor mit meinem MEGA2560 einen kleinen Webserver zur Temperaturerfassung am Boiler einzurichten.
Da die HTML-Seite nicht riesig wird, habe ich mich entschieden auf die SD-Karte zum Speichern der Seiten zu verzichten und den HTML-Code ins Flash zu legen.
Grundlegend läuft die Kiste schon.
Die Seite wird so ausgegeben:

client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connnection: close");
client.println();
client.println("<!DOCTYPE HTML>");
client.println("<html>")
......;

Gibts eigentlich auch eine Möglichkeit den HTML-Code (ist ja nur Text) in ein Data-Array zu speichern und dann aus dem auszulesen, damit das ganze optisch strukturierter wird?.
Mit Bascom hab ich so was schon mal programmiert. Hat dann so ausgesehen:

Htmlcode:
Data "HTTP/1.0 200 OK" , &H0D , &H0A
Data "Content-type: text/html" , &H0D , &H0A , &H0D , &H0A
Data "<html><head><meta http-equiv=" , &H22 , "Refresh" , &H22 , " CONTENT=" , &H22 , "9;URL="

Wobei hier die Steuerzeichen und das Anführungszeichen auch nicht schön eingebunden sind

gruß/hk007

Also ich würde einfach eine billige SD Karte nehmen und von SD Karte laden. Hat 2 riesige Vorteile:

  1. Du musst nicht mit Arrays rumbasteln.
  2. Du bist viel flexibler/einfacher. Um die Seite zu verändern, musst du nur kurz die Datei auf der SD Karte ändern und nicht das Board neu flashen.

Außerdem ist der Code im Arduino nicht so komplex (musst ja nur die SD Karte char für char auslesen und per Ethernet ausgeben).

Ich würde für einen Server niemals einen Arduino nehmen. Es gibt mittlerweile genug ARM basierte Teile die für sowas deutlich besser geeignet sind. Wo liegt der vermutete Vorteil eines Arduinos für sowas?

Dass man für eine simple Internetseite mit An-/Aus-Buttons keinen Arm-Prozessor sondern nur ein Ethernetmodul braucht? Wenn man kein PHP oder MySQL benötigt, finde ich den Weg über einen dedizierten Arduino praktischer...

ESLEagleEye:
Also ich würde einfach eine billige SD Karte nehmen und von SD Karte laden. Hat 2 riesige Vorteile:

  1. Du musst nicht mit Arrays rumbasteln.
  2. Du bist viel flexibler/einfacher. Um die Seite zu verändern, musst du nur kurz die Datei auf der SD Karte ändern und nicht das Board neu flashen.

zu 1.) weiss ich nicht
zu 2.) na ja. Muss dann auch in den keller und die SD-Karte holen. Da kann ich auch gleich flashen. oder kann man auf die Karte über Ethernet die HTML-Datei updaten??

Außerdem ist der Code im Arduino nicht so komplex (musst ja nur die SD Karte char für char auslesen und per Ethernet ausgeben).

Weiss da jemand ein Beispiel??

hk007:
Weiss da jemand ein Beispiel??

Ja, ich habe da momentan ein Projekt laufen. Du schreibst deinen HTML Code in eine TXT Datei auf der Speicherkarte und der Arduino macht den Rest. Im Prinzip nimmst du das Arduino Server Beispiel und addest folgenden Algorithmus:

myFile = SD.open("SERVER.TXT");
          if (myFile) {
              Serial.println("data.txt:");
    
              // lese Datei bis $ ($ ist mein Dateiende-Symbol)
              char data;
              while (myFile.available() && (data!='

Der Arduino macht dann alles selbst von der SD Karte, du brauchst keine Arrays oder ähnliches. Natürlich musste du die SD Karte noch initialisieren und öffnen. Die Befehle habe ich an andere Stellen des Codes ausgelagert (z.B. in die Setup).

Wie gesagt ich habe ein fertigen Code der das kann. Ich kann ihn morgen mal online stellen, ich muss erst noch ein paar Korrekturen vornehmen um die Verständlichkeit zu verbessern (d.h. Kommentare einfügen und nicht mehr benutzte Variablen und Funktionsaufrufe entfernen).))
             {
               data = myFile.read();
               if(data!='


Der Arduino macht dann alles selbst von der SD Karte, du brauchst keine Arrays oder ähnliches. Natürlich musste du die SD Karte noch initialisieren und öffnen. Die Befehle habe ich an andere Stellen des Codes ausgelagert (z.B. in die Setup). 

Wie gesagt ich habe ein fertigen Code der das kann. Ich kann ihn morgen mal online stellen, ich muss erst noch ein paar Korrekturen vornehmen um die Verständlichkeit zu verbessern (d.h. Kommentare einfügen und nicht mehr benutzte Variablen und Funktionsaufrufe entfernen).) 
                {
                  client.print(data);
                }
              }
              // Lesen abgeschlossen -> close the file:
              Serial.write("Lesen beendet.");
              myFile.close();
          } 
            else {
  	      // if the file didn't open, print an error:
              Serial.println("error opening test.txt");
   }

Der Arduino macht dann alles selbst von der SD Karte, du brauchst keine Arrays oder ähnliches. Natürlich musste du die SD Karte noch initialisieren und öffnen. Die Befehle habe ich an andere Stellen des Codes ausgelagert (z.B. in die Setup).

Wie gesagt ich habe ein fertigen Code der das kann. Ich kann ihn morgen mal online stellen, ich muss erst noch ein paar Korrekturen vornehmen um die Verständlichkeit zu verbessern (d.h. Kommentare einfügen und nicht mehr benutzte Variablen und Funktionsaufrufe entfernen).

Ja,

würd mich interessieren.
Steuerst du mit der Seite auch den Arduino?
Ich hab da nämlich noch ein Problem damit:

ich hab nen Button eingefügt, der eine Heizung manuell einschaltet:

client.println("<form method=get><input type=submit name=all value='Heizung EIN'></form>");

Ich frag beim Lesen des Eingangstelegrammes nach den Worten Heizung und EIN ab. Wenn die da sind, dann wird eine entsprechende Aktion ausgeführt.
Anschliessend wird die Webseite wieder neu an den Browser gesendet. In der Adresszeile des Browsers steht dann aber nicht nur die IP des Webservers, sndern auch noch der Befehl zum Einschalten.
Beim nächsten Refresh der Seite wird dann die Heizung wieder eingeschaltet :frowning:

Hab grad bei SelfHTML nachgelesen:

Wenn ein HTML-Formular die GET-Methode verwendet, wird der Formulardatenstrom, getrennt durch ein Fragezeichen, zum URI des CGI-Programmaufrufs hinzugefügt. Im Web-Browser des Anwenders ist dies nach dem Absenden des Formulars in der Adresszeile sichtbar.

Hmm.... kann man das nicht anders machen? Bzw. Wie bring ich den get-Aufruf wieder raus, dass nur noch die IP des Arduino drin steht.
Der Button "Eine Seite zurück" würde schon gehen, aber wenn ich das vergesse, dann ist das Problem akut, da ich die Seite mit "<meta http-equiv="refresh" content="60">" alle 60 Sekunden selber neu aufrufen lasse.

@ESLEagleEye:
Naja, dann solle man schon wenigstens den Dateinamen, und den der ausgegeben wird angleichen: oben wird eine SERVER.TXT geöffnet, bei erfolgreichem Öffnen, gibt er seriell "data.txt:" aus, und wenn es fehlschlägt, sagt er Fehler beim Schreiben von test.txt... Das alles wäre nicht passiert, wenn man die Datei in eine Konstante geschrieben hätte :wink: :wink: :wink:

EDIT: Ausserdem braucht man kein "Dateiende-Symbol", da der ASCII-Code 0x04 (End-of-Transmission, EOT) eh als letztes Zeichen gesendet wird, also muss man nur mit &h0x04 vergleichen. Oder eventuell nur mit -1, oder mit oder mit beidem - habs noch nicht ausprobiert.

@Marcus: Ich habe geschrieben, dass der Code NOCH NICHT für den Upload geeignet ist (da an einigen Stellen nicht ganz verständlich und mit unnötigen Inhalten). Musst halt mal das ganze Posting lesen bevor du nörgelst :stuck_out_tongue: :wink:

Ach ja, es ist doch völlig Banane welche Namen er bei den Fehlermeldungen ausgibt, habt Hauptsache der Grund ("Lesefehler" / "Schreibfehler") ist bekannt. :stuck_out_tongue:

Der Code ist halt aus mehreren Projekten zusammengewachsen. Ich verstehe ihn und der Funktioniert, was will man mehr 8)

XD XD XD XD XD XD XD

Guten Tag zusammen,

bei meinem Arduino-Projekt habe ich es auch so gelöst, dass die HTML-Seite überall liegen kann.
Das hat mehrere praktische Effekte:

  • Auf der SD leicht austausch-/änderbar
  • Möglichkeit auf einen Webserver zu wechseln
  • Performance!!!

Dazu hatte ich mal in folgendem Thread ein Beispiel gepostet, bei dem es dann weiterhin möglich ist Pins vom Arduino auszulesen und auch zu verändern.
Funkschalter in Webserver einbinden
Bei mir liegt aktuell die HTML-Seite noch auf dem Arduino und die *.js, *.css und *.ico Dateien auf einem kostenlosen Webserver mit ein paar MB Speicher.

Gruß,
trib

@ESLEagleEye

Hat dich Marcus jetzt verprellt? 8)

Hätte deinen Code schon noch gerne mal gesehen. Irgendeine Anregung findet man immer in fremder Software.

gruß/hk007

@hk007: Ach was XD

Es gibt doch immer jemanden, der an sich Kleinigstkeiten stört. Ich muss gucken, ob ich den Code heute noch online bekomme (hab es leider noch nicht geschafft ihn zu überarbeiten). Aber viel mehr kannst du da eh nicht erwarten, der Rest ist nur Initialisierungskram.
Guck dir mal die Sachen von Trib an, die scheinen noch besser für dich zu passen.