Image
10.2.2016 1 Comments

ARDUINO – nielen hračka pre šikovných 2. časť

alebo Naučme sa programovať mikrokontroléry Atmel ľahko a jednoducho (Ovládanie LED diód pripojených k Arduinu cez webovú stránku)

V predošlých častiach sme vysvetlili, akým spôsobom môžeme pripojiť Arduino k počítačovej sieti. Povedali sme si, ako komunikujú štandardné zariadenia zapojené ako webový server a webový klient. Nakoniec sme vytvorili z Arduina jednoduchý webový server, ktorý nás pekne pozdravil cez webový prehliadač. Lenže my sme náročnejší – pozdraviť nestačí! My chceme, aby sme cez webové rozhranie dokázali ovládať zariadenia pripojené k Arduinu. A práve to vám teraz ukážeme.

Pripojenie LED diód k Arduinu

Niekoho isto napadne, že by sme pre svoje programy mohli využiť LED diódu, ktorá je priamo na doske Arduina pripojená k dátovému pinu D13. Žiaľ, ethernet shield, ktorý aj teraz použijeme, potrebuje na svoju komunikáciu s Arduinom dátové piny D10, D11, D12 a D13, takže túto diódu využiť nemôžeme. To nič, aj tak chceme pripojiť dve diódy. Ako to urobíme? Vezmeme zelenú LED diódu, ktorú cez vhodný odpor pripojíme na dátový pin D2, a červenú diódu cez odpor na dátový pin D3 v zmysle obrázka (schéma č. 1). Odpory zvolíme podľa použitých LED diód, hodnota sa môže pohybovať okolo 150 ohmov (v prípade novších typov s malým prúdom bude hodnota odporu okolo 1 kiloohmu). Ak nie sme v tejto veci znalí, požiadajme elektronicky zručného kamaráta. Diódy nepripájame k Arduinu, ale k ethernet shieldu, ktorý je do Arduina zasunutý a jeho kontakty sú priebežné – podobne ako moje vrabčie hniezdo na prvom obr.

Ovládanie cez Webový server

Aby sme mohli pripojené LED diódy ovládať cez webový server, musíme najprv nejaký webový server vytvoriť. Jeho základnú kostru sme vám ukázali minule, tentoraz ju rozšírime o ovládanie LED diód.

Podstatou je zachytávanie parametrov formulára, ktoré odošle prehliadač webovému serveru. My teda vytvoríme dva formuláre v jazyku HTML (pretože máme dve diódy), kde každý bude obsahovať dva rádiové prepínače a jedno tlačidlo, napríklad pre zelenú LED diódu to bude vyzerať takto:

Zelená LED je <font color='red'>VYPNUTÁ</font>
</br>
<P>
<FORM action='http://192.168.100.191' method='GET'>
<INPUT type='radio' name='led1' value='1'>Zapnúť
<INPUT type='radio' name='led1' value='0'>Vypnúť
<P>
<INPUT type='submit' value='Nastaviť'>
</FORM>
Takto napísaný formulár sa na obrazovke prehliadača zobrazí takto (obr. č. 3).

Parameter action v tagu FORM ukazuje, kto (ktorý server alebo skript) bude spracúvať tento formulár. Preto nesmieme zabudnúť nastaviť správnu IP adresu. V tomto prípade je adresa totožná s adresou, ktorú sme zadali v príkaze Arduina IPAddress.

Poznámka:

Význam jednotlivých príkazov jazyka HTML možno naštudovať na internetových stránkach.

Podľa toho, ktorý rádiový prepínač nastavíme a odošleme tlačidlom Nastaviť, prehliadač odošle parameter led1=0 na vypnutie a led1=1 na zapnutie LED diódy. Tento parameter bude Arduino zachytávať a podľa neho zapínať a vypínať LED diódu, ktorú má pripojenú.

Pozrime sa teraz na výpis skeče – programu (výpis č. 1).

#include <SPI.h>
#include <Ethernet.h>
 
// MAC adresa je vymyslená
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
 
// IP adresa - nastaviť podľa seba!
IPAddress ip(192,168,100,191);
IPAddress gateway(192, 168, 100, 1);
// port servera
EthernetServer mojServer(80);
 
void setup()
{
  // inicializácia siete
  Ethernet.begin(mac, ip);
  // inicializácia servera
  mojServer.begin();
  // nastavíme piny D2 a D3 ako výstup pre LED-ky
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
}
 
void loop()
{
  // keď je klient pripojený, zistíme, či sú odoslané dáta
  // od klienta k nám
   EthernetClient client = mojServer.available();
   String buffer = "";
   if (client){
        boolean prazdnyRiadok = true;
  
   while (client.connected() && client.available()){
            // ak klient odosiela HTTP požiadavku
         char c = client.read(); //čítaj znaky v bajtoch od klienta
         buffer = buffer + c;
         if(c == '\n' && prazdnyRiadok){
            if(buffer.indexOf("led1=1")>=0)digitalWrite(2,HIGH);
            if(buffer.indexOf("led1=0")>=0)digitalWrite(2,LOW);
            if(buffer.indexOf("led2=1")>=0)digitalWrite(3,HIGH);
            if(buffer.indexOf("led2=0")>=0)digitalWrite(3,LOW);
            
            // odošle klasickú hlavičku HTTP protokolu
            client.println("HTTP/1.1 200 OK");
            client.println("Content-Type: text/html");
            client.println("Connection: close");
            client.println();
            client.println("<!DOCTYPE HTML>");
         
            // tu už je klasická html stránka
            client.println("<html>");
            client.println("<head>");
           
            // Názov stránky
            client.println("<title>Arduino Server - ovládač LED</title>");
            // kódovanie - aby sme mohli použiť diakritiku
            client.println("<meta charset='UTF-8'>");
            client.println("</head>");
            client.println("<body>");
         
            // vytvorí formulár pre zelenú LED diódu
            if (digitalRead(2)){
                  client.print(" Zelená LED je <font color='green'>ZAPNUTÁ</font>");
                    }else{
                  client.print(" Zelená LED je <font color='red'>VYPNUTÁ</font>");
                  }
            client.println("</br>");
         
            // tu upraviť IP adresu podľa potreby! 
            client.print("<FORM action='http://192.168.100.191' method='GET'>");
            client.print("<P> <INPUT type='radio' name='led1' value='1'>Zapnúť");
            client.print(" <INPUT type='radio' name='led1' value='0'>Vypnúť");
            client.print("<P> <INPUT type='submit' value='Nastaviť'> </FORM>");
 
            client.println("</br>");
 
            // vytvorí formulár pre červenú
            if (digitalRead(3)){
                  client.print(" Červena LED je <font color='green'>ZAPNUTÁ</font>");
                   }else{
                  client.print(" Červena LED je <font color='red'>VYPNUTÁ</font>");
                  }
            client.println("</br>");
           
            // tu upraviť IP adresu podľa potreby!
            client.print("<FORM action='http://192.168.100.191' method='GET'>");
            client.print("<P> <INPUT type='radio' name='led2' value='1'>Zapnúť");
            client.print("<INPUT type='radio' name='led2' value='0'>Vypnúť");
            client.print("<P> <INPUT type='submit' value='Nastaviť'> </FORM>");
               
            client.println("</body>");
            client.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*/
            }
 
         //ukončí prenos
         client.stop();
 
         }
      }
   }
}

Základ tvorí kostra z minulého príkladu, doplnili sme iba príkaz IPAddress gateway, ktorým sa nastavuje brána v sieti. Do sekcie void setup() sme pridali príkaz pinMode, ktorým nastavíme piny D2 a D3 ako výstup (v texte vyznačené modrou farbou).

V sekcii void loop() sme nadefinovali novú premennú buffer typ string (reťazec znakov), do ktorej budeme ukladať znaky načítané pomocou príkazu client.read(). Práve do tohto buffera sa budú ukladať texty, ktoré odošle prehliadač naspäť do Arduina, tak ako sme to už opísali. Ďalej z buffera pomocou príkazu buffer.indexOf() budeme extrahovať texty, a ak sa budú rovnať napríklad led1=1, pomocou príkazu digitalWrite(2,HIGH) sa na pine D2 objaví logická 1 a zelená LED dióda sa rozsvieti. Ak text bude led2=0, pomocou príkazu digitalWrite(3,LOW) na pine D3 objaví logická nula a červená dióda zhasne. Všetky štyri možnosti sú v texte vyznačené červenou farbou.

Vo výpise programu nasleduje odoslanie hlavičky HTTP (v zmysle predchádzajúcej časti), tak ako ju už poznáme. Potom nasleduje klasická stránka HTML. Do sekcie párových tagov <head> sme pridali nový zápis <meta charset='UTF-8'>. Ten spôsobí, že už môžeme v našich programoch používať znaky s diakritikou, takže môžeme písať spisovne a po slovensky. Nasleduje vytvorenie formulára s rádiovými tlačidlami, tak ako sme si to už ukázali, jedného pre zelenú a druhého pre červenú LED diódu. Hneď na začiatku formulára príkazom Arduina if (digitalRead(2)) alebo if (digitalRead(3)) (vyznačené fialovou farbou) testujeme stav digitálnych výstupov D2 a D3. Tým v podstate overujeme, či sa príslušná LED dióda naozaj zapla alebo nie, a potom pomocou príkazu HTML vypíšeme na obrazovke prehliadača slová ZAPNUTÁ alebo VYPNUTÁ v príslušnej farbe. Koniec skeče už poznáme.

Program preložíme a nahráme do Arduina. Arduino aj so shieldom a LED diódami pripojíme k počítaču pomocou eternetového kábla a do prehliadača zadáme tú IP adresu, ktorú sme nastavili v programe. Na obrazovke prehliadača sa objaví nami vytvorená a Arduinom odoslaná webová stránka (obr. č. 4).

Nabudúce vám ukážeme, ako pomocou Arduina merať a zobrazovať rôzne hodnoty (napr. teplotu a tlak)  a ako ich zobrazovať nielen v našej sieti, ale v celom internete.

Mohlo by vás zaujímať:

ARDUINO – nielen hračka pre šikovných 
ARDUINO – nielen hračka pre šikovných 2. časť
ARDUINO - nielen hračka pre šikovných / Jednoduchá kalkulačka
Seriál: ARDUINO – programovamie mikrokontrolérov Atmel
Seriál: ARDUINO/Atmel - Nabíjanie akumulátorov a ovládanie svetla

Zobrazit Galériu

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 ...

1 Comments

  1. #include reakcia na: ARDUINO – nielen hračka pre šikovných 2. časť
    22.3.2016 12:03
    nechyba tam nahodou nazov kniznice za #include?
    Reagovať

Vyhľadávanie

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

Najnovšie videá