Image
9.2.2016 0 Comments

ARDUINO – ako webový server /12.časť

Späť na úvod >> Späť na programovanie >> Späť na seriál

V predošlých častiach sme vysvetlili, akým spôsobom môžeme k pripojiť k Arduinu LCD displej. A naučili sme sa tvoriť znaky s diakritickými znamienkami a tie následne vypisovať na LCD displej. Teraz pripojíme Arduino k počítačovej sieti. Najprv pomocou eternetového kábla, neskôr pomocou Wi-Fi.

Webový server

Arduino možno k počítačovej sieti pripojiť v dvoch režimoch – ako webový server a ako webového klienta. Každý režim má svoje výhody a nevýhody, ktoré dokážeme využiť v konkrétnej aplikácii. Tentoraz sa budeme zaoberať vytvorením webového servera.

Protokol HTTP

Prv ako začneme programovať webový server na Arduine, musíme si v krátkosti vysvetliť, ako webový server komunikuje s webovým klientom. Komunikácia sa uskutočňuje spôsobom požiadavka – odpoveď. Otázka aj odpoveď majú formát čistého textu, ktorý je zapísaný podľa pravidiel protokolu HTTP (Hyper Text Transfer Protocol).

Ak sa chce klient pripojiť k nejakému webovému serveru, zašle mu požiadavku približne v tomto tvare:

GET / HTTP/1.1
Host: 10.0.0.15
Connection: keep-alive
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml, application/xml;q=0.9, image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36
Referer: http://10.0.0.15/
Accept-Encoding: gzip,deflate,sdch
Accept-Language: cs,en;q=0.8,de;q=0.6,sk;q=0.4
 
Táto správa obsahuje informácie, s akou verziou protokolu HTTP klient pracuje, aký je pre klienta prijateľný formát, o akého klienta ide, aké kódovanie používa a aký jazyk očakáva. Prázdny desiaty riadok je nevyhnutný – takto sa označuje, že požiadavka je ukončená.

Obr.č.2
 
Potom musí webový server požiadavku spracovať a odoslať odpoveď. Tá sa začína príslušnou hlavičkou HTTP. Hlavička obsahuje informácie o verzii HTTP, o stave pripojenia po ukončení prenosu alebo o automatickom obnovovaní. Tieto informácie nám na začiatok stačia, aj keď existuje množstvo ďalších príkazov HTTP. Hlavička odpovede aj s posledným voľným riadkom vyzerá takto:
HTTP/1.1 200 OK
Content-Type: text/html
Connection: close
Refresh: 1

Jazyk HTML

Po hlavičke a voľnom riadku pre klienta server odošle klientovi kód webovej stránky vo formáte jazyka HTML (Hyper Text Markup Language). Ukážme si teraz základnú štruktúru takej stránky:

<!DOCTYPE HTML> 
<html>
        <head>
                <title>Titulok stránky </title> 
        </head>
 
        <body>
          .
          .
          .     
        </body>
</html>
 

Prvý riadok stránky hovorí prehliadaču na obrazovke klienta, že informácie budú zasielané v jazyku HTML. Medzi značkami <html> a </html>, ktorým hovorievame aj tagy, sa nachádzajú dve najdôležitejšie časti stránky. Prvá je hlavička, uzavretá v párových tagoch  <head> a </head>, kde medzi ďalšími tagmi <title> sa nachádza titulok stránky, ktorý sa zobrazí v záhlaví záložky prehliadača. Druhá časť je telo stránky, uzavreté v tagoch <body> a </body>.

Aplikácia

Keď už vieme, ako komunikuje webový klient s webovým serverom, môžeme aj my sprevádzkovať túto dvojicu s Arduinom. Arduino sa stane webovým serverom a webovým klientom sa stane ľubovoľný dostupný počítač, ktorý je k Arduinu pripojený pomocou eternetového kábla. Základné Arduino nemá prípojku na eternetový kábel, preto potrebujeme ethernet shield alebo modul. Tie pripojíme k Arduinu, pri shielde je to veľmi jednoduché, ten iba nasunieme ako nadstavbu nad Arduino Uno (obr. č. 1).

Ak používame modul namiesto shieldu, ten pripojíme k Arduinu pomocou vodičov podľa manuálu k príslušnému modulu (je ich viac typov). Vývojové prostredie Arduina už obsahuje potrebné knižnice na prácu so shieldom a väčšinou modulov, takže nie je nevyhnutné nič doinštalovať a upravovať. Stačí rovno napísať príklad pre webový server, napríklad taký, ako je na výpise č. 1.

#include <SPI.h>
#include <Ethernet.h>
byte mac[] = {0x90, 0xA2, 0xDA, 0x00, 0x9C, 0xB7 };
IPAddress ip(192,168,100,170);
 
EthernetServer mojServer(80);
 
void setup(){
    Ethernet.begin(mac, ip);
    mojServer.begin(); //spustíme server
}
 
void loop(){
    EthernetClient Klient = mojServer.available();
    if (Klient){
        boolean prazdnyRiadok = true;
        while (Klient.connected() && Klient.available()){
            // ak klient odosiela HTTP požiadavku
            char c = Klient.read(); //čítaj znaky v bajtoch od klienta
           
            if(c == '\n' && prazdnyRiadok){
                Klient.println("HTTP/1.1 200 OK");
                Klient.println("Content-Type: text/html");
                Klient.println("Connection: close");
                Klient.println("Refresh: 1");
                Klient.println();
                Klient.println("<!DOCTYPE HTML>");
                Klient.println("<html>");
                Klient.println("<head>");   
                Klient.println("<title>Arduino WEB server</title>");
                Klient.println("</head>");
                Klient.println("<body>");
                 // vypíše text
                Klient.print("Ahoj, ja som Tvoj Arduino web server :-)");         
                Klient.println("</body>");
                Klient.println("</html>");
            }
           
            if(c == '\n'){
                prazdnyRiadok = true;
            }
            else if(c != '\r'){
                prazdnyRiadok = false;
                   /*ak klient nepošle dvakrát za sebou \r a \n
                   znamená to, že stále odosiela dáta*/
            }
        }
 
        Klient.stop(); //komunikácia je skončená
    }
}
Hneď na začiatku skeču v definičnej časti zavoláme dve knižnice SPIEthernet. Ich úlohou je komunikovať s ethernet shieldom alebo modulom. Ďalej nadefinujeme dve premenné – macip. Premenná mac predstavuje klasickú MAC adresu sieťového zariadenia, ktorú takto nastavíme Arduinu (využijeme ju vtedy, ak pomocou routera alebo firewallu zabezpečujeme, kto môže pracovať v našej sieti, v tomto príklade to neriešime). Číslo MAC by malo byť unikátne v celej svetovej sieti, ale teraz sa tým netrápme, jednoducho použijeme čísla uvedené v príklade. Premenná ip je podstatne dôležitejšia. Nastavuje sieťovú IP adresu Arduina. Čísla zvoľte také, aké používate vo vašej sieti, ja som použil adresu 192.168.100.170. Nakoniec v tejto časti vytvoríme inštanciu triedy Server s názvom mojServer. Číslo v zátvorkách udáva port, na ktorom bude náš webový server načúvať požiadavkám klientov, v našom prípade na klasickom porte č. 80.

Nasleduje sekcia void setup(), kde pomocou príkazu Ethernet.begin(mac,ip) začneme komunikáciu shieldu s okolím a spustíme server príkazom mojServer.begin.

V sekcii void loop() pre zmenu vytvoríme novú inštanciu s názvom Klient triedy Client. Arduino nadviaže spojenie s klientom a začne prijímať jeho dáta. Ak je spojenie nadviazané a prijatá hlavička od klienta (vrátane povinného prázdneho riadka), začne inštancia Klient príkazom Klient.println odosielať z Arduina klientovi odpoveď – najprv hlavičku a po nej veľmi jednoduchú webovú stránku v jazyku HTML tak, ako sme si to už ukázali. Potom program kontroluje, či klient odoslal dvakrát po sebe znaky ESC nESC r, ktoré sú z čias ďalekopisov a telegramov a značia prechod na začiatok nového riadka.  Vtedy sa spojenie ukončí príkazom Klient.stop.

Program napíšeme, preložíme a nahráme do Arduina. Pozor na nastavenie správnej IP adresy. Arduino pripojíme k nejakému počítaču pomocou eternetového kábla, na počítači spustíme vhodný internetový prehliadač (Mozilla, Opera a iné) a do riadka zadáme adresu Arduina. Ak sme všetko urobili správne, na obrazovke počítača sa v prehliadači zobrazí niečo podobné, ako je na obrázku č. 2.

 

Nabudúce ukážeme, ako pomocou počítačovej siete či Internetu možno ovládať Arduino, napríklad zapínať a vypínať svetlá a čítať analógové hodnoty.

 

Zobrazit Galériu

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

Mohlo by Vás zaujímať

Ako na to

Tipy a triky: Ako na snímku obrazovky na akomkoľvek počítači s Windows?

02.12.2016 00:13

Ak snímky obrazovky robíte často apotrebujete napríklad funkcie na posun stránok alebo snímanie zobrazenia pri vyššom rozlíšení displeja, zrejme používate nejakú špecializovanú aplikáciu. Väčšina použ ...

Ako na to 1

Tipy a triky: Ako aplikácii prednastaviť spúšťanie s administrátorskými právami?

30.11.2016 00:10

Väčšina aspoň trochu skúsenejších používateľov vie, že aj keď máte na operačnom systéme Windows vytvorený administrátorský účet, aplikácie pre bezpečnosť nefungujú vždy splnými administrátorskými práv ...

Ako na to 2

Tipy a triky: Ako vypnúť uzamykaciu obrazovku vo Windows 10?

29.11.2016 00:10

Rozčuľuje vás, že pred každým prihlásením doúčtu vášho počítača musíte prejsť uzamykacou obrazovkou? Windows 10 na tejto obrazovke ukazuje čas,dátum anejakú zaujímavú fotografiu zrôznych kútov sveta. ...

Žiadne komentáre

Vyhľadávanie

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

Najnovšie videá