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

25.04.2013 21:20

Translate to English

V druhé části tutoriálu si ukážeme praktické využití. V prvním případě si ukažme způsob jak na nějaký server odesílat data např. z nějakého čidla a tyto tam ukládat a na serveru mít možnost je odkudkoliv po světě zobrazit. Já si připojím ke svému Arduinu můj obligátní světelný senzor (pracovně tomu říkám čidlo tmy, protože čím větší je tma, tím větší napětí je na výstupu čidla). Já jsem si čidlo připojil na analogový pin A0. Vy samozřejmě můžete použít čidlo DHT11 nebo cokoliv jiného u čehož se budou měnit hodnoty. 

Do Arduina si nahrajeme tento program:

Já jsem si pro tento tutorál vytvořil 2 stránky na serveru www.arduino.asp2.cz (Je to v ASP.NET, jazyk C#). První stránka se kterou se spojuje Arduino je AddData.aspx. Ta je naprogramována, aby vzala proměnné hodnoty z URL. Jak můžete vidět v kódu na řádku 35 začíná program požadavkem:

GET http://www.arduino.asp2.cz/AddData.aspx?id=xxxxxx&h1=nejaká_hodnota&h2=další_hodnota HTTP/1.1

Jak vidíte za znakem otazníku je proměnná id za kterou si dosadíme něco libovolného svého pro pozdější identifikaci na stránce, kde se budou zobrazovat data, protože sem budou chodit od více lidí tak aby jste si je poznali. Dále tam za hodnotu1 dosazujeme nějaké data, které chceme uložit. V mém případě se tam jak můžete vidět na řádku 37 načte analogová hodnota z pinu A0, do kterého je napojen právě můj "senzor tmy". Naprogramoval jsem stránku, že můžete zadat i hodnotu druhou za hodnota2=. Já tam, protože jsem nic nepřipojil píšu slovo nic, to se nám také uloží do databáze.

Tak data jsme odeslali a já jsem stránku naprogramovat tak, že když jsou data do databáze uložena správně tak server vrátí Arduinu toto <1>. V případě opaku vrací <0>. Tyto data odesílá server po hlavičce, ale to jsme si vysvětlili již v I. části. V programu tuto hodnotu vypársujeme jako v předešlé části a pro kontrolu odesílání máme činnost zapsanou na seriový port, kde průběh sledujeme na SerialMonitoru. Pokud vidíme výsledek takto, program funguje:

Pokud jsou data ze serveru hodnoty 1, pak uložení proběhlo v pořádku a my se můžeme podívat na stránku http://www.arduino.asp2.cz/ViewData.aspx, kde jsou v tabulce zobrazeny všechny zpracované hodnoty. Data obsahují datum a čas přijetí, Vaše unikátní ID, které jste si nastavili, a stavy hodnot h1 a h2. V našem případě pokud jste kód neměnily a máte připojeno něco na analogovém portu bude hodnota 1 nějaké číslo do 1023 a v hodnotě 2 bude text nic. 

Po klidnutí na výše uvedený odkaz se objěví toto:

Data jsou seřazena chronologicky, jako první záznam se zobrazí ten nejčerstvější. Jak vidíte nezměnil jsem si id, proto tak zůstali ty x jako v kódu. Nevím, zda zde zveřejnit zdrojový kód stránky v c# asp.net. Používám pro tento případ hosting zdarma na asp2.cz, kde nabídnou myslím i databáze MSSQL zdarma. Moc prostoru Vám zadarmo nedají, ale pro málé projekty to stačit určitě bohatě bude. Já jsem pro projekt využil klasickou databázi Access, ale můžete Vaše data ukládat třeba do textového souboru nebo xml. To už je na Vás. Kdyby jsme potřebovali poradit s programováním stránek pro projekt s Arduinem tak napiště. Samozřejmě můžete, pokud ovládáte, použít i php.  

   Tak první případ máme a opravdu už můžeme přistupovat k údajům z Arduina odkudkoliv na světě. Stránku www můžete naprogramovat samozřejmě i tak, že bude zobrazovat pouze aktuální hodnotu a ne celou tabulku.

    Tak a teď přijde ta druhá možnost, že budeme řídit Arduino vzdáleně třeba z onoho Nového Zélandu. Je tam pěkně odjedeme na dovolenou a přes webové rozhraní, např. zkontrolujeme vlhkost naší vzácné rostliny a dáme příkaz miniaturnímu čepadélku k jejímu zalití nebo před příjezdem z chaty doma aktivujeme topení. My si teď pouze pro příklad rozsvítíme 2 LEDky. Princip je následující. Arduino se bude www stránky prát a www stránka bude odpovídat. Informaci budeme předávat jako v předchozím případě. Ale nebude to informace o nějakých hodnotách (samozřejmě, že také může - hodnoty sledovat třeba budeme), ale bude třeba předávat nějaké heslo nebo ID aby nás stránka mohla identifikovat, že jsme to my. www stránka nám vrátí hodnotu Arduinu, kterou si na webu nastavíme. Samozřejmě, že ono to v reálném čase moc nepůjde. Arduino naprogramujeme např. na interval 5 min, kdy pokaždé se připojí k serveru, kde je www stránka umístěná. Samozřejmě, že by to šlo cyklicky bez pauzy, ale možná budeme omezeni přenesenými daty v hostinku www stránek. Jinak já jsem tak orientačně počítal, ono tak zase hodně dat nebude, je to pár kB co půjde tam a zpět. Na konci po vytvoření příkladu se to pokusíme zjistit.

   Jako první si vytvoříme si vytvoříme www stránku, kde budeme nastavovat hodnoty pro Arduino. Já jsem jí i pro Vaše vyzkoušení vytvořil. Je to www.arduino.asp2.cz/control.aspx. Ta obsahuje dvě ovládací tlačítka pro naše 2 LEDky na Arduinu. Stránka je naprogramována, že po kliknutí změní stavovou hodnotu LEDky, kterou ukládám do databáze. Můžetze hodnotu samozřejmně ukládat kamkolik, a to ale hlavně, aby to šlo v pohodě naprogramovat. Pak jsem vytvořil další stránku, ke které se bude připojovat naše zařízení. Je to stránka GetData.aspx. Když si jí otevřete v prohlížeči, uvidíte co stránka dělá. Vypíše Vám na obrazovku mezi znaky <> dvě čísla, které nabývají hodnot 0 nebo 1. Tyto hodnoty si přečte Arduinko, jak jsme si již ukázali - najde si je právě mezi <>. Uloží si je do String, a když víme, že String bude mít pouze 2 znaky, můžeme k těmto znakům přistupovat právě takhle: NejakyString[0] nebo potom [1], pak už jenom naprogramovat triviální ovládání LEDek a je hotovo. 

Aby jsme to nezdržovali, zdrojový kód je zde:

 

Je tam pouze pár dílčích změn, protože princip je stejný jako minule. Nějaká data serveru odešleme, a nějaká data od serveru získáme. Já jsem pro interval na zkoušku skusil 500ms. Vysledek můžete vidět na videu, je to pěkně svižné, dalo by se skoro říci, že změna probíhá v okamžiku změny na stránce control.aspx. 

Jen pro informaci. Může se stát, že na stránkách bude testovat svůj prográmek více než jeden člověk. V tom případě bude vše fungovat asi trošku zmateně :-). Je to pouze pro testování, pro ovládání potom v praxi si stránky vytvořte sami. Jen aby jste mi nepsali, že Vám Ledky zmateně blikají a vy nic nenastavujete. :-)

Ještě slíbený výpočet objemu dat při komunikaci Arduina se serverem. Pokud se na to teoreticky podíváme, Arduino odešle požadavek, který má 88 bytů (znaků) a vrátí se jí mu data o objemu 221 bytú - počítám to na posledním příkladu, kdy jsme ovládali 2 LED z Nového Zélandu :-). Já jsem měl, pro natočení videa a demonstaci funkce, nastaven interval cca 500ms (to byla pauza - nepočítám čas čekání na odezvu serveru a čas strávený na běh obslužného kódu). V tom případě teoreticky bude objem dat přenesený k serveru a zpět:

309 bytů * 2 * 60 * 60 * 24 = 53395200 bytů/den = cca 53,4MB dat za den.

Z toho můžeme odvodit, při intervalu 1 vteřina cca 26,7 MB a při intervalu 5 vteřin to je 5,34MB, a při intervalu 1 minuty se za den přenese 445kB. Záleží pak už jenom na Vás jaký interval nastavíte a jakou rychlost obnovy budete potřebovat. 

 

Zpět

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

Datum
Vložil
Titulek

PHP

Ahoj,
mám stejný problém, jako kolega níže. Web napsaný v PHP člověkem co v tom dělá(arduino nezná). Z prohlížeče vše funguje, ale z arduina není možné se připojit-vycházím z tohoto příkladu, příklad funguje, takže data z arduina jdou. Byla by tu nějaká rada či nasměrování kudy se ubírat?
jiri-vlach@seznam.cz Děkuji za jakoukoli odpověď!

Datum
Vložil
Titulek

ASP

Také prosím o kód pro načtení dat z GET, pro inspiraci co mám špatně.. zkouším to na php, z prohlížeče se adresa s daty načte, z arduina to data dává do chybovýho logu "invalid URI", nevím co s tím. kaed@seznam.cz

Datum
Vložil
Titulek

kod stránek

Dobrý den, též by se rád připojil k prosbě o zveřejnění kódu souborů aspx.
Děkuji.

Datum
Vložil
Titulek

Re: kod stránek

To snáď ľudia nemyslite vážne , že neviete s pravým tlačidlom myši kliknúť na stránku a vybrať možnosť (v Chrome): "Zobraziť zdrojový kód stránky"

Nedivým sa , že nám autor článku prestal odpisovať. :(

Datum
Vložil
Titulek

Re: Re: kod stránek

jen pro zajimavost jak PHP, tak ASP bezi na strane serveru a kliknutim pravym tlacitkem uvidite tak akorat prd...teda vlastne vysledek ktery PHP nebo ASP vygenerovalo, ale ne samotny kod PHP nebo ASP

Datum
Vložil
Titulek

kod

prosim kod stranek

Datum
Vložil
Titulek

Stránky

Pěkný den, přimlouvám se za zveřejnění kódu stránek, alespoň pro inspiraci nám začátečníkům :-)

Datum
Vložil
Titulek

Re: Stránky

Taky prosím

Datum
Vložil
Titulek

Re: Stránky

Prosím o kód stránek

Datum
Vložil
Titulek

Re: Stránky

taky, prosím

1 | 2 >>

Vyhledávání

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