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
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
Vielen Dank schonmal im Voraus
PS:
Auch die Bilder, die ich ebenfalls auf der SD-Karte in einem Bilder Ordner habe werden nicht angezeigt…