Lekce 16 - Arduino jako Web Client - I. část

23.04.2013 21:42

Translate to English

Takže Vás opět zdrávím po nějaké době. Dneska si budeme hrát s Arduinem se zapojeným Ethernet Shieldem jako Web Client. Kromě Arduina a shieldu nebudeme zatím potřebovat nic. K zobrazení výsledků použijeme zatím Serial Monitor.

     Tak nebudeme nic dále zdržovat. Do Arduina si nahrajeme tento program:

 

Jak vidíte nění na tom nic složitého, já jsem pro tento účel vytvořil stránku test.htm bez samotného html pouze s textem "Ahoj lidi...". Dotaz serveru zasíláme pomocí metody GET. Více o ní najdeme na internetu. V programu 1 vteřinu také čekáme na odezvu serveru, protože bez prodlevy bychom server nestačil odpovědět. Po zapnutí serial monitoru program vypisuje jak připojení probíhá a následně vypíše též hlavičku. A nakonec data z naší stránky. Objeví se tedy nakonec i naše vytoužené "Ahoj lidi..."

Samozřejmně, že v případě html stránky se ze serveru odešlou i html tagy, tuto "nesprávně napsanou" html stránku jsem vytvořil pro zjednodušení prvního příkladu. Ted si načteme platnou html stránku test2.htm a do programu ještě zapíšeme kousek kódu, který bude čekat na odezvu serveru nami určenou dobu a v limitu, který si nastavíme. V předešlém případě program čekal vteřinu i když byl server rychlejší. Svižný server nám odešle data do 20 ms, ale v případě zatížení se tyto hodnoty můžou vyšplhat až na 10 vteřin. My si nastavíme 3000 ms, což by mělo být dostačující. Rychlost odezvy si pro zajímavost odešlene taktéž na Serial Monitor. Tady je program:

V kódu můžete najít i smyčku while, která odpočítává čas limitu. Přeruší se tehdy, kdy je client.avilable() nebo když dojde čas. Jak můžete vidět na obrázku níže, na třetím řádku máme spočítanou odezvu. A po zobrazení hlavičky stránky se ukáže již v platném html kódu nápis "Ahoj...".

 

Tak je hezké co jsme si ukázali, ale pozdravy ze stránky nám stačit nebudou. V dalším příkladu si ukážeme jak "vypársovat" s dat ze serveru nějaké hodnoty a ty poté v programu využít.  Pro tento účel jsem si vytvořil stránku text.aspx, používám server s Asp.net tak proto ta přípona. Opět bude bez html a bude pouze číslo v uvozovkách. my se budeme nyní snažit tyto data dostat do proměné aby mohlo být dále využito v programu Arduina. Nahrajme si tedy tento program:

Snažil jsem se nové části okomentovat aby to pochopil každý. Cílem bylo najít řídící znak pro data což bylo "<". V případě nálezu se proměná bool s názvem "nalez" zmení na true. V tomto případě bude program znaky ukládat do proměné data, ale jen když je hodnota nalez true, což se změní při nálezu koncového řídícího znaku ">". Data jsou ve formátu String. Já jsem ještě do programu vložil kód, který převádí String na Integer. V jazyce C, který používá Arduinu to jednoduše moc nejde, používáme nějprve konverzi do char[] a poté můžeme teprve do Integer pomocí atoi();.

V další částu 16. lekce si vytvoříme program, který by se dal již nějakým způsobem prakticky využít. K tomu bude potřeba i znalosti programování dynamických stránek, ale o tom v dalším díle.  

 

 

Zpět

Diskusní téma: Lekce 16 - Arduino jako Web Client - I. část

Datum
Vložil
Titulek

Prví zdrojový kód

Autor vložil zdrojové kódy pomocí javascriptu, podařilo se mi získat pouze první.

#include <Ethernet.h>
#include <SPI.h>

// zde si nastavte svoji unikátní MAC adresu zařízení
// vysvětlení v předchozí lekci
byte mac[] = { 0xDE, 0xAD, 0xBE, 0x7F, 0xFE, 0xED };

// vytvoří objekt EthernetClient s názvem client
EthernetClient client;

void setup()
{
// inicializuje naše síťové zařízení s adresou MAC
Ethernet.begin(mac);
// zapne seriový port
Serial.begin(9600);
// vypíše text
Serial.println("Pripojuji...");

// když se podaří spojení se serverem tak....
// číslo 80 je sdandardní číslo portu pro html
if (client.connect("www.arduino.asp2.cz", 80)) {
// vypíše text na serial monitor
Serial.println("Pripojeni probehlo v poradku");
// odešle požadavek GET na vrácení stránky test.html
// je to text bez html
client.println("GET https://www.arduino.asp2.cz/test.htm HTTP/1.1");
client.println("Host:arduino.asp.2.net");
client.println("Connection: close");
client.println();
// počká 1 vteřinu na výsledek
delay(1000);
// dokud je stánka dostupná...
while(client.available()) {
//...do proměné c zapiš bajt odeslaný ze serveru
char c = client.read();
// vypíše bajt (znak) do SerialMonitoru
Serial.print(c);
}

// .... když už není co číst a stránka není dostupná
// zastav připojení a vypiš na serial "Odpojeno"
client.stop();
client.flush();
Serial.println("\nOdpojeno.");

// když se spojení nepodařilo
}
else {
Serial.println("spojeni se serverem nenavazano...");
}
}

void loop()
{
}

Datum
Vložil
Titulek

Chybí kód

Dobrý den, v lekci 16 první díl chybí kód programu.

Datum
Vložil
Titulek

Chybějící kód

Zdravím,

je to přesně ten návod, který dlouho hledám a potřebuji. Bohužel bez arduino kodu je tento návod k ničemu. Je to škoda, je to skvěle popsáno. Stejně tak díl 2, bohužel se stejným nedostatkem.

Datum
Vložil
Titulek

Are you 18? Come in and don't be shy!

Welcome to the world of adult Dating loveawake.ru

Datum
Vložil
Titulek

Chyba v lekci 16

Myslel jsem třetí odstavec od konce :-)

Datum
Vložil
Titulek

Chyba v lekci 16

Třetí odstavec končí slovy " Nahrajme si tedy tento program: " , ale žádnej program se tam nenachází. Zrovna tvořím takovej projekt a toto je nejbližší co jsem našel.
S pozdravem
Petr

Vyhledávání

arduino8.cz © 2015 Všechna práva vyhrazena.