Ethernet Shield SD CSS und HTML

Hallo liebe Community,

ich bin neu hier, arbeite aber schon länger mit dem Arduino. Nun bin ich aber auf ein Problem gestoßen. Ich versuche gerade mittels Arduino und Ethernet Shield einen Webserver zum Laufen zu bekommen, mit dem ich Elro Steckdosen steuern kann. Das alles hat auch erstmal funktioniert, bis ich dann versucht habe, das ganze schöner zu gestalten und habe nun mittels CSS Datei das Layout “verschönert”. Problem nun: Der Webserver stellt die CSS-Datei nicht bereit, sodass diese nicht geöffnet wird :confused:

Hier mal mein Arduino Code:

#if ARDUINO > 18
#include <SPI.h> // Für Arduino Version größer als 0018
#endif
#include <Ethernet.h>
#include <TextFinder.h>
#include <SD.h>
#include <RCSwitch.h>
RCSwitch mySwitch = RCSwitch();

byte mac[] = { 0x5A, 0xA2, 0xDA, 0x0D, 0x56, 0x7A }; // MAC-Adresse des Ethernet-Shield
byte ip[]  = { 192, 168, 0, 199 };                   // IP zum aufrufen des Webservers
byte sdPin = 4;                                      // Pin der SD-Karte
 
EthernetServer server(80);                           // Server port
 
File webFile;
File webFile2;
 
void setup()
{  
  mySwitch.enableTransmit(9);
  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)
  {
    /*****************************************
      Ausgänge über das Webformular steuern  *
    *****************************************/
    TextFinder finder(client);
 
    if(finder.find("GET"))
    {
      while(finder.findUntil("pin", "\n\r"))
      {
        char typ = client.read();
        int  pin = finder.getValue();
        int  val = finder.getValue();
 
        if(typ == 'D')
        {
          if (pin == 3 && val == 1) mySwitch.switchOn("11111", 1); if(pin == 3 && val == 0) mySwitch.switchOff("11111", 1);
          if (pin == 4 && val == 1) mySwitch.switchOn("11111", 2); if(pin == 4 && val == 0) mySwitch.switchOff("11111", 2);
          if (pin == 5 && val == 1) mySwitch.switchOn("11111", 3); if(pin == 5 && val == 0) mySwitch.switchOff("11111", 3);
          if (pin == 6 && val == 1) mySwitch.switchOn("11111", 4); if(pin == 6 && val == 0) mySwitch.switchOff("11111", 4);
          if (pin == 7 && val == 1) mySwitch.switchOn("11111", 5); if(pin == 7 && val == 0) mySwitch.switchOff("11111", 5);
          if (pin == 8 && val == 1) mySwitch.switchOn("11111", 6); if(pin == 8 && val == 0) mySwitch.switchOff("11111", 6);
        }
 
        if(val == 1 || val == 0) Serial.println() + Serial.print("Pin ") + Serial.print(pin) + Serial.print(" ") +Serial.print( val);
      }
    }
 
    /************************
      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"); 
          webFile2 = SD.open("css/style.css");
          if (webFile)
          {
            while(webFile.available())
            {
              client.write(webFile.read()); // Website an Client schicken
              client.write(webFile2.read());
            }
            webFile.close();
            webFile2.close();
          }
          break;
        }
        if (c == '\n') 
        {
          current_line_is_blank = true;
        } 
        else if (c != '\r') 
        {
          current_line_is_blank = false;
        }
      }
    }
    delay(1);
    client.stop();
  }
}

Eventuell hat einer von euch ja eine Idee, wie das ganze zu lösen ist :slight_smile:

Vielen Dank schonmal im Voraus

PS:
Auch die Bilder, die ich ebenfalls auf der SD-Karte in einem Bilder Ordner habe werden nicht angezeigt…

nilsconrad:
Problem nun: Der Webserver stellt die CSS-Datei nicht bereit, sodass diese nicht geöffnet wird :confused:
...
Auch die Bilder, die ich ebenfalls auf der SD-Karte in einem Bilder Ordner habe werden nicht angezeigt...

Dann solltest Du vielleicht mal drüber nachdenken, ob es nicht sinnvoll wäre, die GET-Anforderung so auszuwerten, dass Du den angefragten Dateinamen bekommst.

Mit diesem Code:

if(finder.find("GET"))
    {
      while(finder.findUntil("pin", "\n\r"))

suchst Du ja nur danach, ob überhaupt eine Datei per GET angefordert wird und ob in der Anforderung ein "pin" vorkommt.

Welche Datei genau angefordert wird, ist Deinem Webserver doch offensichtlich komplett egal. Der guckt ob "irgendwas" angefordert wurde, und dann sendet er "irgendwas", allenfalls wird noch berücksichtigt ob "irgendwas mit 'pin'" in der Anforderung drinstand.

Dass "irgendwas gesendet" dann nicht unbedingt die angeforderte Datei ist, wundert Dich das wirklich?

Danke erstmal für die schnelle Antwort.

Dieser Teil funktioniert aber so sehr gut, wenn ich den Button/Bild anklicke, schalten die Steckdosen. Das Problem liegt darin, dass die Seite bescheiden aussieht, da nur die index.htm geöffnet wird, die anderen Dateien jedoch nicht aufgerufen werden (css-Datei, Bilder, usw.)

Eventuell weiß einer ja wo das Problem liegt, dass ich auf diese Dateien nicht zugreifen kann.

Gruß

nilsconrad

Hallo Nilsconrad,

aus meiner Sicht stimmt da etwas mit der Reihenfolge nicht. Wenn Du einem Browser eine HTML Seite schickst, dann steht in der HTML Seite drin, das weitere Sachen (z. B. CSS, JavaScript) benötigt werden. Der Browser holt sich dann diese informationen ab. Im Prinzip müßte der Browser also zugriff auf die SD bekommen. Da dies wohl nicht geht, bau einfach den notwendigen CSS in die HTML seite direkt ein.

z. B.

<html>
  <head>

    <style>
      h1 { color: red; }
      div { background-color: gray; }
    </style>
  </head>

  <body>
  </body>
</html>

Wenn Du jetzt die HTML Seite schickst, dann sind schon alle CSS drin und der Browser weiß Bescheid, wie etwas aussehen soll.

Hoffe, ich habe das Problem verstanden.

Grüße
Thomas

hi,

sag mal, hat Dein netzwerk internetzugang?

gruß stefan

Danke :slight_smile:

Ja, er hängt im Netz, also am Router direkt.

Die Idee mit der CSS in der HTML-Datei hatte ich auch. Nur werden jetzt immer noch nicht die Bilder geladen…

Hallo Nilsconrad,

bezüglich der Bilder habe ich diesen Link gefunden.

Falls es was bringt, bitte hier mitteilen. Danke!

Grüße
Thomas

So, hab mal ein wenig herum probiert, soweit funktioniert schonmal mehr. ich habe nun die CSS-Datei in die HTML-Datei
integriert und den Code so angepasst:

#include <TextFinder.h>
#include <SPI.h>
#include <Ethernet.h>
#include <SD.h>
#include <RCSwitch.h>
RCSwitch mySwitch = RCSwitch();

#define REQ_BUF_SZ   20

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 0, 199); 
EthernetServer server(80);  
File webFile;
char HTTP_req[REQ_BUF_SZ] = {0}; 
char req_index = 0;            
void setup()
{
    mySwitch.enableTransmit(9);
    
    Serial.begin(9600);
    
    // initialize SD card
    Serial.println("Initializing SD card...");
    if (!SD.begin(4)) {
        Serial.println("ERROR - SD card initialization failed!");
        return;    // init failed
    }
    Serial.println("SUCCESS - SD card initialized.");
    // check for index.htm file
    if (!SD.exists("index.htm")) {
        Serial.println("ERROR - Can't find index.htm file!");
        return;  // can't find index file
    }
    Serial.println("SUCCESS - Found index.htm file.");
    
    Ethernet.begin(mac, ip);  
    server.begin();          
}

void loop()
{
    EthernetClient client = server.available();  

    if (client) {  // got client?
        boolean currentLineIsBlank = true;
        
        // Eingefügt
  
        TextFinder finder(client);
 
    if(finder.find("GET"))
    {
      while(finder.findUntil("pin", "\n\r"))
      {
        char typ = client.read();
        int  pin = finder.getValue();
        int  val = finder.getValue();
 
        if(typ == 'D')
        {
          if (pin == 3 && val == 1) mySwitch.switchOn("11111", 1); if(pin == 3 && val == 0) mySwitch.switchOff("11111", 1);
          if (pin == 4 && val == 1) mySwitch.switchOn("11111", 2); if(pin == 4 && val == 0) mySwitch.switchOff("11111", 2);
          if (pin == 5 && val == 1) mySwitch.switchOn("11111", 3); if(pin == 5 && val == 0) mySwitch.switchOff("11111", 3);
          if (pin == 6 && val == 1) mySwitch.switchOn("11111", 4); if(pin == 6 && val == 0) mySwitch.switchOff("11111", 4);
          if (pin == 7 && val == 1) mySwitch.switchOn("11111", 5); if(pin == 7 && val == 0) mySwitch.switchOff("11111", 5);
          if (pin == 8 && val == 1) mySwitch.switchOn("11111", 6); if(pin == 8 && val == 0) mySwitch.switchOff("11111", 6);
        }
 
        if(val == 1 || val == 0) Serial.println() + Serial.print("Pin ") + Serial.print(pin) + Serial.print(" ") +Serial.print( val);
      }
    }
    
    // /Eingefügt
    
    
        
        while (client.connected()) {
            if (client.available()) {   // client data available to read
                char c = client.read(); // read 1 byte (character) from client
                
                if (req_index < (REQ_BUF_SZ - 1)) {
                    HTTP_req[req_index] = c;          // save HTTP request character
                    req_index++;
                }
               
                Serial.print(c);
               
                if (c == '\n' && currentLineIsBlank) {
                    // open requested web page file
                    if (StrContains(HTTP_req, "GET / ")
                                 || StrContains(HTTP_req, "GET /index.htm")) {
                        client.println("HTTP/1.1 200 OK");
                        client.println("Content-Type: text/html");
                        client.println("Connnection: close");
                        client.println();
                        webFile = SD.open("index.htm");        // open web page file
                    }
                    else if (StrContains(HTTP_req, "GET /page2.htm")) {
                        client.println("HTTP/1.1 200 OK");
                        client.println("Content-Type: text/html");
                        client.println("Connnection: close");
                        client.println();
                        webFile = SD.open("page2.htm");        
                    }
                     else if (StrContains(HTTP_req, "GET /bild1.png")) {
                        webFile = SD.open("bild1.png");
                        if (webFile) {
                            client.println("HTTP/1.1 200 OK");
                            client.println();
                        }
                    }
                    
                     else if (StrContains(HTTP_req, "GET /bild2.png")) {
                        webFile = SD.open("bild2.png");
                        if (webFile) {
                            client.println("HTTP/1.1 200 OK");
                            client.println();
                        }
                    }
                    
                    else if (StrContains(HTTP_req, "GET /bild3.png")) {
                        webFile = SD.open("bild3.png");
                        if (webFile) {
                            client.println("HTTP/1.1 200 OK");
                            client.println();
                        }
                    }
                    
                     else if (StrContains(HTTP_req, "GET /hg.png")) {
                        webFile = SD.open("hg.png");
                        if (webFile) {
                            client.println("HTTP/1.1 200 OK");
                            client.println();
                        }
                    }
                    
                     else if (StrContains(HTTP_req, "GET /pk.png")) {
                        webFile = SD.open("pk.png");
                        if (webFile) {
                            client.println("HTTP/1.1 200 OK");
                            client.println();
                        }
                    }
                    
                     else if (StrContains(HTTP_req, "GET /bs.png")) {
                        webFile = SD.open("bs.png");
                        if (webFile) {
                            client.println("HTTP/1.1 200 OK");
                            client.println();
                        }
                    }
                    
                    if (webFile) {
                        while(webFile.available()) {
                            client.write(webFile.read()); // send web page to client
                        }
                        webFile.close();
                    }
                    
                    // reset buffer index and all buffer elements to 0
                    req_index = 0;
                    StrClear(HTTP_req, REQ_BUF_SZ);
                    break;
                }
                // every line of text received from the client ends with \r\n
                if (c == '\n') {
                    // last character on line of received text
                    // starting new line with next character read
                    currentLineIsBlank = true;
                } 
                else if (c != '\r') {
                    // a text character was received from client
                    currentLineIsBlank = false;
                }
            } 
        } 
        delay(1);      
        client.stop(); 
    }
}


void StrClear(char *str, char length)
{
    for (int i = 0; i < length; i++) {
        str[i] = 0;
    }
}

char StrContains(char *str, char *sfind)
{
    char found = 0;
    char index = 0;
    char len;

    len = strlen(str);
    
    if (strlen(sfind) > len) {
        return 0;
    }
    while (index < len) {
        if (str[index] == sfind[found]) {
            found++;
            if (strlen(sfind) == found) {
                return 1;
            }
        }
        else {
            found = 0;
        }
        index++;
    }

    return 0;
}

Problem:
Die ganze Switch Sache funktioniert nicht. wenn ich diesen teil raus nehme, lädt die Seite, wenn ich diesen Teil einfüge, lädt
diese garnicht mehr…

Hat da noch jemand eventuell eine Idee?

Moin,

ich denke Dein Fehler liegt im Kopfteil Deiner Antwort.
Bei einer "xxx.html" Datei, antwortest Du mit:

client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connnection: close");
client.println();
-> dann die Daten

Das ist auch soweit richtig. Bei allen anderen Datein (Bildern, css) antwortest Du
aber nur mit:

client.println("HTTP/1.1 200 OK");
client.println();

Hier fehlt der "Content-Type" und "Connnection: close".

Content-Type verschiedener Datein
client.println("Content-Type: text/javascript");
client.println("Content-Type: text/css");
client.println("Content-Type: image/png");

Bei einen "xxx.png" Bild also diese Reihenfolge
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: image/png");
client.println("Connnection: close");
client.println();
-> dann die Daten

Versuch das mal.

Die Bilder und alles andere wird ja angezeigt, wenn ich es so mache:

#include <TextFinder.h>
#include <SPI.h>
#include <Ethernet.h>
#include <SD.h>
#include <RCSwitch.h>
RCSwitch mySwitch = RCSwitch();

#define REQ_BUF_SZ   20

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 0, 199); 
EthernetServer server(80);  
File webFile;
char HTTP_req[REQ_BUF_SZ] = {0}; 
char req_index = 0;            
void setup()
{
   mySwitch.enableTransmit(9);
   
   Serial.begin(9600);
   
   // initialize SD card
   Serial.println("Initializing SD card...");
   if (!SD.begin(4)) {
       Serial.println("ERROR - SD card initialization failed!");
       return;    // init failed
   }
   Serial.println("SUCCESS - SD card initialized.");
   // check for index.htm file
   if (!SD.exists("index.htm")) {
       Serial.println("ERROR - Can't find index.htm file!");
       return;  // can't find index file
   }
   Serial.println("SUCCESS - Found index.htm file.");
   
   Ethernet.begin(mac, ip);  
   server.begin();          
}

void loop()
{
   EthernetClient client = server.available();  

   if (client) {  // got client?
       boolean currentLineIsBlank = true; 
       
       while (client.connected()) {
           if (client.available()) {   // client data available to read
               char c = client.read(); // read 1 byte (character) from client
               
               if (req_index < (REQ_BUF_SZ - 1)) {
                   HTTP_req[req_index] = c;          // save HTTP request character
                   req_index++;
               }
              
               Serial.print(c);
              
               if (c == '\n' && currentLineIsBlank) {
                   // open requested web page file
                   if (StrContains(HTTP_req, "GET / ")
                                || StrContains(HTTP_req, "GET /index.htm")) {
                       client.println("HTTP/1.1 200 OK");
                       client.println("Content-Type: text/html");
                       client.println("Connnection: close");
                       client.println();
                       webFile = SD.open("index.htm");        // open web page file
                   }
                   else if (StrContains(HTTP_req, "GET /page2.htm")) {
                       client.println("HTTP/1.1 200 OK");
                       client.println("Content-Type: text/html");
                       client.println("Connnection: close");
                       client.println();
                       webFile = SD.open("page2.htm");        
                   }
                    else if (StrContains(HTTP_req, "GET /bild1.png")) {
                       webFile = SD.open("bild1.png");
                       if (webFile) {
                           client.println("HTTP/1.1 200 OK");
                           client.println();
                       }
                   }
                   
                    else if (StrContains(HTTP_req, "GET /bild2.png")) {
                       webFile = SD.open("bild2.png");
                       if (webFile) {
                           client.println("HTTP/1.1 200 OK");
                           client.println();
                       }
                   }
                   
                   else if (StrContains(HTTP_req, "GET /bild3.png")) {
                       webFile = SD.open("bild3.png");
                       if (webFile) {
                           client.println("HTTP/1.1 200 OK");
                           client.println();
                       }
                   }
                   
                    else if (StrContains(HTTP_req, "GET /hg.png")) {
                       webFile = SD.open("hg.png");
                       if (webFile) {
                           client.println("HTTP/1.1 200 OK");
                           client.println();
                       }
                   }
                   
                    else if (StrContains(HTTP_req, "GET /pk.png")) {
                       webFile = SD.open("pk.png");
                       if (webFile) {
                           client.println("HTTP/1.1 200 OK");
                           client.println();
                       }
                   }
                   
                    else if (StrContains(HTTP_req, "GET /bs.png")) {
                       webFile = SD.open("bs.png");
                       if (webFile) {
                           client.println("HTTP/1.1 200 OK");
                           client.println();
                       }
                   }
                   
                   if (webFile) {
                       while(webFile.available()) {
                           client.write(webFile.read()); // send web page to client
                       }
                       webFile.close();
                   }
                   
                   // reset buffer index and all buffer elements to 0
                   req_index = 0;
                   StrClear(HTTP_req, REQ_BUF_SZ);
                   break;
               }
               // every line of text received from the client ends with \r\n
               if (c == '\n') {
                   // last character on line of received text
                   // starting new line with next character read
                   currentLineIsBlank = true;
               } 
               else if (c != '\r') {
                   // a text character was received from client
                   currentLineIsBlank = false;
               }
           } 
       } 
       delay(1);      
       client.stop(); 
   }
}


void StrClear(char *str, char length)
{
   for (int i = 0; i < length; i++) {
       str[i] = 0;
   }
}

char StrContains(char *str, char *sfind)
{
   char found = 0;
   char index = 0;
   char len;

   len = strlen(str);
   
   if (strlen(sfind) > len) {
       return 0;
   }
   while (index < len) {
       if (str[index] == sfind[found]) {
           found++;
           if (strlen(sfind) == found) {
               return 1;
           }
       }
       else {
           found = 0;
       }
       index++;
   }

   return 0;
}

Ich denke, das Problem ist, dass ich nicht weiß, wo ich den "Schaltteil hinsetzen kann…
Sobald ich den Teil einfüge, lädt die Seite nichtmehr. So wie die Datei jetzt oben steht, funktioniert es, Die Schaltbefehle werden aber noch nicht verarbeitet/sind noch nicht integriert…
Eventuell weiß ja jemand, wo dieser Teil hin muss:

TextFinder finder(client);
 
    if(finder.find("GET"))
    {
      while(finder.findUntil("pin", "\n\r"))
      {
        char typ = client.read();
        int  pin = finder.getValue();
        int  val = finder.getValue();
 
        if(typ == 'D')
        {
          if (pin == 3 && val == 1) mySwitch.switchOn("11111", 1); if(pin == 3 && val == 0) mySwitch.switchOff("11111", 1);
          if (pin == 4 && val == 1) mySwitch.switchOn("11111", 2); if(pin == 4 && val == 0) mySwitch.switchOff("11111", 2);
          if (pin == 5 && val == 1) mySwitch.switchOn("11111", 3); if(pin == 5 && val == 0) mySwitch.switchOff("11111", 3);
          if (pin == 6 && val == 1) mySwitch.switchOn("11111", 4); if(pin == 6 && val == 0) mySwitch.switchOff("11111", 4);
          if (pin == 7 && val == 1) mySwitch.switchOn("11111", 5); if(pin == 7 && val == 0) mySwitch.switchOff("11111", 5);
          if (pin == 8 && val == 1) mySwitch.switchOn("11111", 6); if(pin == 8 && val == 0) mySwitch.switchOff("11111", 6);
        }
 
        if(val == 1 || val == 0) Serial.println() + Serial.print("Pin ") + Serial.print(pin) + Serial.print(" ") +Serial.print( val);
      }
    }

Das muss mit in Deine if-Anweisung rein, in der Du auch Deine
Seiten lädst.

if (c == '\n' && currentLineIsBlank) {
// open requested web page file
if (StrContains(HTTP_req, "pin") {
//hier Deine Schaltlogik
}
else {
//hier Deine Webseiten bzw. Datein von der SD-Karte
}
}

Danke für den Tip, aber leider funktioniert es so immer noch nicht :disappointed_relieved:

#include <TextFinder.h>
#include <SPI.h>
#include <Ethernet.h>
#include <SD.h>
#include <RCSwitch.h>
RCSwitch mySwitch = RCSwitch();

#define REQ_BUF_SZ   20

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 0, 199); 
EthernetServer server(80);  
File webFile;
char HTTP_req[REQ_BUF_SZ] = {0}; 
char req_index = 0;            
void setup()
{
   mySwitch.enableTransmit(9);
   
   Serial.begin(9600);
   
   // initialize SD card
   Serial.println("Initializing SD card...");
   if (!SD.begin(4)) {
       Serial.println("ERROR - SD card initialization failed!");
       return;    // init failed
   }
   Serial.println("SUCCESS - SD card initialized.");
   // check for index.htm file
   if (!SD.exists("index.htm")) {
       Serial.println("ERROR - Can't find index.htm file!");
       return;  // can't find index file
   }
   Serial.println("SUCCESS - Found index.htm file.");
   
   Ethernet.begin(mac, ip);  
   server.begin();          
}

void loop()
{
   EthernetClient client = server.available();  

   if (client) {  // got client?
       boolean currentLineIsBlank = true; 
       
       while (client.connected()) {
           if (client.available()) {   // client data available to read
               char c = client.read(); // read 1 byte (character) from client
               
               if (req_index < (REQ_BUF_SZ - 1)) {
                   HTTP_req[req_index] = c;          // save HTTP request character
                   req_index++;
               }
              
               Serial.print(c);
              
               if (c == '\n' && currentLineIsBlank) {
                 
                 if (StrContains(HTTP_req, "pin")) {

                   TextFinder finder(client);
 
                  if(finder.find("GET"))
                  {
                    while(finder.findUntil("pin", "\n\r"))
                    {
                      char typ = client.read();
                      int  pin = finder.getValue();
                      int  val = finder.getValue();
 
                      if(typ == 'D')
                      {
                        if (pin == 3 && val == 1) mySwitch.switchOn("11111", 1); if(pin == 3 && val == 0) mySwitch.switchOff("11111", 1);
                        if (pin == 4 && val == 1) mySwitch.switchOn("11111", 2); if(pin == 4 && val == 0) mySwitch.switchOff("11111", 2);
                        if (pin == 5 && val == 1) mySwitch.switchOn("11111", 3); if(pin == 5 && val == 0) mySwitch.switchOff("11111", 3);
                        if (pin == 6 && val == 1) mySwitch.switchOn("11111", 4); if(pin == 6 && val == 0) mySwitch.switchOff("11111", 4);
                        if (pin == 7 && val == 1) mySwitch.switchOn("11111", 5); if(pin == 7 && val == 0) mySwitch.switchOff("11111", 5);
                        if (pin == 8 && val == 1) mySwitch.switchOn("11111", 6); if(pin == 8 && val == 0) mySwitch.switchOff("11111", 6);
                      }
 
                      if(val == 1 || val == 0) Serial.println() + Serial.print("Pin ") + Serial.print(pin) + Serial.print(" ") +Serial.print( val);
                    }
                  }
                }
                 
                 
                   // open requested web page file
                   if (StrContains(HTTP_req, "GET / ")
                                || StrContains(HTTP_req, "GET /index.htm")) {
                       client.println("HTTP/1.1 200 OK");
                       client.println("Content-Type: text/html");
                       client.println("Connnection: close");
                       client.println();
                       webFile = SD.open("index.htm");        // open web page file
                   }
                   else if (StrContains(HTTP_req, "GET /page2.htm")) {
                       client.println("HTTP/1.1 200 OK");
                       client.println("Content-Type: text/html");
                       client.println("Connnection: close");
                       client.println();
                       webFile = SD.open("page2.htm");        
                   }
                    else if (StrContains(HTTP_req, "GET /bild1.png")) {
                       webFile = SD.open("bild1.png");
                       if (webFile) {
                           client.println("HTTP/1.1 200 OK");
                           client.println();
                       }
                   }
                   
                    else if (StrContains(HTTP_req, "GET /bild2.png")) {
                       webFile = SD.open("bild2.png");
                       if (webFile) {
                           client.println("HTTP/1.1 200 OK");
                           client.println();
                       }
                   }
                   
                   else if (StrContains(HTTP_req, "GET /bild3.png")) {
                       webFile = SD.open("bild3.png");
                       if (webFile) {
                           client.println("HTTP/1.1 200 OK");
                           client.println();
                       }
                   }
                   
                    else if (StrContains(HTTP_req, "GET /hg.png")) {
                       webFile = SD.open("hg.png");
                       if (webFile) {
                           client.println("HTTP/1.1 200 OK");
                           client.println();
                       }
                   }
                   
                    else if (StrContains(HTTP_req, "GET /pk.png")) {
                       webFile = SD.open("pk.png");
                       if (webFile) {
                           client.println("HTTP/1.1 200 OK");
                           client.println();
                       }
                   }
                   
                    else if (StrContains(HTTP_req, "GET /bs.png")) {
                       webFile = SD.open("bs.png");
                       if (webFile) {
                           client.println("HTTP/1.1 200 OK");
                           client.println();
                       }
                   }
                   
                   if (webFile) {
                       while(webFile.available()) {
                           client.write(webFile.read()); // send web page to client
                       }
                       webFile.close();
                   }
                   
                   // reset buffer index and all buffer elements to 0
                   req_index = 0;
                   StrClear(HTTP_req, REQ_BUF_SZ);
                   break;
               }
               // every line of text received from the client ends with \r\n
               if (c == '\n') {
                   // last character on line of received text
                   // starting new line with next character read
                   currentLineIsBlank = true;
               } 
               else if (c != '\r') {
                   // a text character was received from client
                   currentLineIsBlank = false;
               }
           } 
       } 
       delay(1);      
       client.stop(); 
   }
}


void StrClear(char *str, char length)
{
   for (int i = 0; i < length; i++) {
       str[i] = 0;
   }
}

char StrContains(char *str, char *sfind)
{
   char found = 0;
   char index = 0;
   char len;

   len = strlen(str);
   
   if (strlen(sfind) > len) {
       return 0;
   }
   while (index < len) {
       if (str[index] == sfind[found]) {
           found++;
           if (strlen(sfind) == found) {
               return 1;
           }
       }
       else {
           found = 0;
       }
       index++;
   }

   return 0;
}

Ich hab jetzt schon verschiedenes probiert, funktionieren will es aber einfach nicht. So wie ich es jetzt oben stehen habe, lädt die Seite nicht fertig, es kommen auch keine Anfragen, die man über den Serial Monitor sehen könnte…

Probleme macht der Textfinder (Zeile 65). Du liest solange Daten ein
bis Du “GET” empfangen hast, an dieser Stelle hast Du aber das “GET”
schon längst erhalten, ein zweites kommt nicht mehr.

Die kompleten Daten die Du empfangen müsstest, sehen von der
Struktur so aus:

GET /main.html HTTP/1.1
Host: 192.168.178.18
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
Accept-Language: de,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive

Nur die Daten aus der ersten Zeile interessieren Dich, und auch nur der rote
mittlere Teil zwischen den beiden Leerzeichen.
Versuch mal diese Daten zu isolieren und nur die in Dein HTTP_req Array zu speichern.

  1. Daten lesen bis erstes Leerzeichen empfangen
  2. Daten in HTTP_req speichern bis zweites Leerzechen empfangen
  3. Daten in HTTP_req auswerten und Befehl ausführen

Wenn Du einen Pin setzen möchtest wird die erste Zeile etwa so aussehen:
GET /pin3=1 HTTP/1.1