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

Bosch ConnectedWorld 2019: 3 príklady využitia IoT v praxi (video)

16.05.2019 12:54

Bosch Connected World 2019 je jednou z najväčších medzinárodných konferencií venovanej Internetu vecí. V dňoch 15. a 16. mája na nej predstavuje viac ako 80 vystavovateľov svoje riešenia pre využitie ...

ITPro

Security: Päť operačných systémov vo firme? Zvládnuť sa to dá

03.06.2019 00:00

Bežný človek by si mohol myslieť, že firmy v našich končinách nefungujú na ničom inom, len na Windows. Ide síce o najrozšírenejší operačný systém, nemusí to však byť najvhodnejšia platforma pre všetky ...

ITPro

Prieskum: Trh ERP na Slovensku v roku 2018

08.05.2019 12:41

Redakcia magazínu PC REVUE uskutočnila v priebehu apríla prieskum predaja podnikových informačných systémov (ERP) na slovenskom trhu v roku 2018. V rámci prieskumu boli oslovené obchodné zastúpenia za ...

q

Žiadne komentáre

Vyhľadávanie

SWAN_062019

Najnovšie videá



PC forum button