Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <SPI.h>
- #include <Ethernet.h>
- #include <SD.h>
- #define LED1 3
- #define LED2 5
- #define CARDPIN 4
- byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; //MAC adresa
- //IPAddress ip(192, 168, 1, 177); //nahradna IP
- EthernetServer server(80); //vytvorenie objektu pre HTTP(80) server
- void setup() {
- Serial.begin(9600); //seriova linka pre debugovacie ucely
- // pinMode(LED1, OUTPUT);
- // pinMode(LED2, OUTPUT);
- Serial.print("Inicializacia SD karty...");
- if (!SD.begin(CARDPIN)) {
- Serial.println(F("Poskodena alebo chybajuca karta.")); //pouzite F() makro kvoli setreniu RAM pamate
- return;
- }
- Serial.println(F("Karta inicializovana."));
- if (!Ethernet.begin(mac)) //ak sa nepodari nacitat IP cez DHCP
- // Ethernet.begin(mac, ip); //nastavime ju na pevno
- server.begin(); //spustime pocuvanie servera na poziadavky klientov
- Serial.print(F("Server ma IP adresu "));
- Serial.println(Ethernet.localIP());
- }
- void loop() {
- String buffer = ""; //buffer pre prijimanie znakov
- String fileName = "";
- char c; //premenna pre nacitanie znaku
- EthernetClient client = server.available(); //ak server detegoval nejake prichadzajuce spojenie, vytvori klienta pre odosielanie dat
- while (client.connected()) { //pokial je klient pripojeny
- if (client.available()) { //ak este existuju data poslane od klienta
- c = client.read(); //nacitaj jeden znak z tychto dat
- if (c != '\n') buffer += c; //ak to nie je znak konca riadku, pridaj ho do buffra
- else { //ak to je znak konca riadku
- if (buffer.indexOf('\r') == 0) { //zisti, ci pred tym prijaty znak \r v buffri je na prvom mieste (index 0), teda ci je to koniec requestu
- //Serial.println(FreeRam());
- File dataFile = SD.open(fileName); //otvor subor na citanie
- if (dataFile) { // ak sa ho podarilo otvorit
- client.println(F("HTTP/1.1 200 OK")); //posli HTTP response
- client.println(F("Content-Type: text/html"));
- client.println(F("Connection: close"));
- client.println();
- while (dataFile.available()) { //pokial nenarazis na koniec suboru
- client.write(dataFile.read()); //posielaj znaky zo suboru na vystup
- }
- dataFile.close(); //po dokonceni zavri subor
- client.stop(); // ukonci spojenie
- }
- else { //ak subor nebolo mozne otvorit
- Serial.print("error opening file: ");
- Serial.println(fileName);
- client.println(F("HTTP/1.1 404 Not Found")); //posli HTTP response
- client.println(F("Content-Type: text/html"));
- client.println(F("Connection: close"));
- client.println();
- client.println(F("<!DOCTYPE HTML>"));
- client.println(F("<html>"));
- client.println(F("<head>"));
- client.println(F("<meta charset=\"UTF-8\">"));
- client.println(F("<title>Ovládanie LED</title>"));
- client.println(F("</head>"));
- client.println(F("<body>"));
- client.println(F(" <h1>Požadovaná stránka "));
- client.println(fileName);
- client.println(F(" sa na serveri nenachádza</h1>"));
- client.println(F("</body>"));
- client.println(F("</html>"));
- client.stop();
- }
- }
- if (buffer.startsWith("GET")) {
- fileName=getFileName(buffer); //inak vrátime meno súboru
- }
- buffer = "";
- }
- }
- }
- }
- String getFileName(String request) {
- int start = request.indexOf("/"); //nájdeme prvé lomítko v requeste (GET /xyz.htm HTTP/1.1) a uložíme si ho ako štart pozíciu
- int finish = request.indexOf("?", start); //ak je to request s premennými, nájdeme si ?, čo bude značiť koniec mena súboru
- if (finish == -1) { //ak sa tam otáznik nenachádzal tak je to request bez premenných
- finish = request.indexOf("HTTP"); //a tým pádom hľadáme koniec requestu (HTTP)
- finish--; //keďže pred HTTP je medzera, odčítame jeden znak
- }
- if (finish-start-1==0) return String("index.htm"); //ak bol request prázdny (t.j. niekto zadal len IP resp. doménové meno arduina) tak vrátime ako názov index.htm
- else return request.substring(start + 1, finish); //inak vrátime meno súboru
- }
Advertisement
Add Comment
Please, Sign In to add comment