Image
9.9.2016 0 Comments

Seriál: ARDUINO / Web server na SD karte

V minulej časti sme si ukázali ako pracovať s SD kartou pripojenou k Arduinu. Naučili sme sa nájsť súbor na karte, tento súbor otvoriť, prečítať a jeho obsah odoslať na obrazovku počítača ako čistý text. Dnes na tieto znalosti nadviažeme s tým, že obsah súboru na SD karte budeme interpretovať ako webovú stránku.

Na to využijeme naše skúsenosti s tvorbou webového servera z predchádzajúcich častí s jednou podstatnou zmenou. V našom web serveri sme odosielali HTML príkazy priamo v kóde programu, dnes ich načítame z SD karty. Vzor programu je na výpise č.1. Ten je čiastočne komentovaný, aby sme nemuseli opakovať nám už známe princípy, ale aby sme vedeli, o čo sa jedná:

#include
#include
#include
 
 
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 100, 202);
EthernetServer server(80); 
 
File webFile;
 
void setup()
{
    Ethernet.begin(mac, ip); 
    server.begin();          
    Serial.begin(9600);      
   
    // initializácia SD karty
    Serial.println("Initializacia SD karty...");
    pinMode(4, OUTPUT);
    if (!SD.begin(4)) {
        Serial.println("Chyba - SD karta nie je inicializovana!");
        return;    // chyba inicializácie
    }
    Serial.println("OK - SD karta inicializovana.");
    // hľadáme súbor index.htm
    if (!SD.exists("index.htm")) {
        Serial.println("Chyba - nemozem najst subor index.htm!");
        return;  // návrat, ak nemôže nájsť súbor index.htm
    }
    Serial.println("OK - subor index.htm najdeny.");
}
 
void loop()
{
    EthernetClient client = server.available(); 
 
    if (client) { 
        boolean prazdnyRiadok = true;
        while (client.connected()) {
            if (client.available()) {   // ak klient zaslal požiadavku
                char c = client.read(); // prečítaj 1 bajt od klienta
                // posledný riadok klientskej požiadavky je prázdny riadok a končí znakom \n
               
                if (c == '\n' && prazdnyRiadok) {
                    // zašleme klasickú hlavičku
                    client.println("HTTP/1.1 200 OK");
                    client.println("Content-Type: text/html");
                    client.println("Connection: close");
                    client.println();
                    // zašleme webovú stránku z SD karty
                    webFile = SD.open("index.htm");        // otvor súbor s web stránkou
                    if (webFile) {
                        while(webFile.available()) {
                            client.write(webFile.read()); // zašli stránku klientovi
                        }
                        webFile.close();
                    }
                    break;
                }
                // každý riadok textu prijatý od klienta končí znakmi \r\n
                if (c == '\n') {
                    // posledný znak na riadku prijatého textu
                    prazdnyRiadok = true;
                }
                else if (c != '\r') {
                   
                    prazdnyRiadok = false;
                }
            } // koniec if (client.available())
        } // koniec while (client.connected())
        delay(1);      // dajme čas klientovi prijať dáta
        client.stop(); // ukonči spojenie s klientom
    } // koniec if (client)
}

Kostru programu už poznáme, vychádzame z našich programov pre tvorbu web servera. Najprv definujeme IP a MAC adresu a server. V sekcii void setup() spustíme web server, umožníme zasielanie výpisu na Serial Monitor a inicializujeme SD kartu vyššie popísaným spôsobom. Stav inicializácie sa zobrazí na Serial Monitore.

Nasleduje slučka void loop() , ktorá obsahuje kód web servera. Známym spôsobom kontrolujeme, či klient zaslal požiadavku na stránku. Ak áno (dôležitý je prázdny riadok od klienta!), tak klientovi príkazmi client.println() zašleme klasickú hlavičku. Po odoslaní hlavičky už vyššie spomínaným spôsobom otvoríme súbor index.htm. Jeho obsah uložíme do premennej webFile typu File. V podmienke if (webFile) a cykle while (webFile.available) prečítame súbor (webFile.read) znak po znaku a ten odošleme príkazom client.write(). Nakoniec nasleduje uzavretie súboru a ukončenie spojenia. Táto časť sa už nachádza v slučke loop preto, lebo ju naozaj chceme cyklicky zobrazovať na obrazovke klientského počítača.

Arduino pripojíme pomocou ethernet shieldu ku klientskému počítaču. Program preložíme, nahráme do Arduina a spustíme.  Spustíme Serial Monitor. Ak uvidíme informácie o úspešnej inicializácii SD karty podobne ako na obrázku č.1, spustíme webový prehliadač a zadáme nastavenú IP adresu. A tu je rozdiel oproti predchádzajúcemu príkladu. Tam sme obsah súboru index.htm odoslali sériovou linkou – cez USB kábel (serial.write) na Serial Monitor, v tomto príklade však obsah súboru index.htm odosielame pomocou ethernet shieldu a FTP kábla  ako HTML kód do webového prehliadača klienta! Obsah súboru je ten istý, ale zatiaľ čo Serial Monitor tento obsah interpretoval ako čistý text a zobrazil ho doslovne identicky, webový prehliadač interpretuje tento obsah ako HTML stránku, tak ako je to vidno na obrázku č.2.

Zdá sa vám táto webová stránka taká obyčajná? Tak si ju nabudúce oživíme nejakým obrázkom!


Nechajte si posielať prehľad najdôležitejších správ emailom

Mohlo by Vás zaujímať

ITPro

Linux súkromne i pracovne v2.0 (14. časť): Small Business Server

09.11.2016 14:57

Pojem Small Business Server (malý firemný server) začala používať spoločnosť Microsoft ešte v roku 2000 na označenie servera, ktorý ­dokázal plniť úlohy niekoľkých samostatných serverov. Aplikačná vrs ...

ITPro

Industry 4.0: Fikcia alebo už realita?

09.11.2016 14:52

Štvrtá priemyselná revolúcia je pomenovanie rozsiahlych zmien prudko vstupujúcich do súčasného priemyslu. Nositeľom týchto zmien je digitalizácia výroby a optimalizácia všetkých podnikových procesov v ...

ITPro

Vývoj aplikácií UWP pre Xbox One II.

09.11.2016 14:47

V predošlej časti sme ukázali postup, ako si ­vytvoriť vývojársky účet a aktivovať vývojársky režim na hernej konzole Xbox One, aby ste mohli testovať svoje aplikácie. Výhodou hernej konzoly Xbox je v ...

Žiadne komentáre

Vyhľadávanie

Kyocera - prve-zariadenia-formatu-a4-s-vykonom-a3

Najnovšie videá