Sunteți pe pagina 1din 18

http://www.robofun.

ro

Curs Gratuit Arduino si Robotica

Textul si imaginile din acest document sunt licentiate


Attribution-NonCommercial-NoDerivs CC BY-NC-ND

Codul sursa din acest document este licentiat


Public-Domain Esti liber sa distribui acest document prin orice mijloace consideri (email publicare pe !ebsite " blog printare sau orice alt mijloc# atat timp cat nu aduci nici un $el de modi$icari acestuia% Codul sursa din acest document poate $i utili&at in orice $el de scop de natura comerciala sau nu $ara nici un $el de limitari%

http://www.robofun.ro/forum

http://www.robofun.ro

Curs Gratuit Arduino si Robotica

Ethernet Shield
Prin intermediul acestui s'ield Arduino se poate conecta la (nternet exact ca un PC obisnuit% Poate $unctiona in regim de client (accesand alte site-uri !eb din (nternet asa cum $aci tu cand navig'e&i pe (nternet# sau poate $unctiona in regim de server !eb (si atunci tu ) sau oricine altcineva ) il poate accesa de oriunde din (nternet $olosind un bro!ser obisnuit#% Aplicatiile sunt multe si spectaculoase% *pre exemplu poti $ace ca Arduino sa citeasca date de la sen&ori de mediu (temperatura presiune atmos$erica umiditate nivel de monoxid de carbon# si sa le trimita la $iecare + secunde prin (nternet catre un $ormular tip Excel creat in ,oogle Docs% -a $el de simplu este ca in loc de ,oogle Docs sa $olosesti C.*/%C./ un serviciu dedicat pentru culegere si stocare de date de la sen&ori% *au poti $olosi un sen&or de umiditate montat intr-un g'iveci si atunci cand planta nu are su$icienta apa Arduino iti va trimite mesaje pe T!itter% *au daca ai un spatiu comun in care se patrunde pe ba&a de card-uri 01(D atunci Arduino poate anunta pe T!itter pre&enta unei anumite persoane (solutie pe care c'iar o $olosim in acest moment pentru accesul la 'ac2er-space-ul inventea&a%ro din Bucuresti#% *au poti $ace ca Arduino sa se conecte&e la serverul !eat'er%com sa obtina vremea probabila si sa o a$ise&e pe un -CD montat pe oglinda din baie%

Client Web, IP prin DHCP


Exemplul de mai jos demonstrea&a o conexiune $acuta cu Arduino la serverul google%com conexiune pe care Arduino o $oloseste ca sa caute pe ,oogle termenul 3arduino3% 0e&ultatul cautarii (la nivel de 4T/-# este a$isat in *erial /onitor% (nainte de a trece la cod sa povestim un pic de comunicarea prin (nternet% 5n bro!ser (cel pe care il $olosesti tu ca sa citesti stirile online# $ace o cerere catre un server (calculatorul a$lat la sediul $irmei de 'osting care stoc'ea&a in$ormatia# iar in urma acestei cereri serverul raspunde cu un text in $ormat 4T/-% 4T/- este un mod de repre&entare a in$ormatiei vi&uale care contine atat textul pe care il citesti tu cat si elementele de $ormatare in pagina% Poti vedea exact codul 4T/- al unei pagini daca $olosesti optiunea 3vie! source3 din bro!ser% Pe langa 4T/- raspunsul serverului mai contine si un text care contine in$ormatii despre raspuns (numit 3'eader 4TTP3#% Daca atunci cand accese&i o pagina in bro!ser toata in$ormatia suplimentara legata de $ormatarea in pagina si de 'eader-e 4TTP este deja interpretata si $olosita de bro!ser (ast$el incat tu ve&i doar re&ultatul $inal in$ormatia vi&uala# in ca&ul in care $acei o cerere !eb cu Arduino nu se intampla asta% -a Arduino ajunge http://www.robofun.ro/forum

http://www.robofun.ro

Curs Gratuit Arduino si Robotica

intreaga in$ormatie generata de bro!ser neprocesata in vreun $el inclusiv 'eader-ele 4TTP% Ast$el ceea ce vei vedea in *erial /onitor in ca&ul exemplului de mai jos nu va $i c'iar ceea ce ve&i in bro!ser cand $aci o cautare pe ,oogle dar in$ormatia va $i exact aceeasi%
#include <SPI.h> #include <Ethernet.h> byte mac[] = { 0xDE, 0x D, 0x!E, 0xE", 0x"E, 0xED #$ IP ddre%% %er&er'(0),*+,,-*,,0,.$ // 0112le Ethernet3lient client$ &1id %etu4'. { Serial.be2in')500.$ i6 'Ethernet.be2in'mac. == 0. { Serial.4rintln'78u %9a reu%it initiali:area 4lacii de retea 61l1%ind D;3P7.$ # delay',000.$ Serial.4rintln'7c1nectare in 4r12re%%...7.$ i6 'client.c1nnect'%er&er, *0.. { Serial.4rintln'7c1nectat7.$ client.4rintln'70E< /%earch=>=arduin1 ;<<P/,.07.$ client.4rintln'.$ # el%e { Serial.4rintln'7c1nectare e%uata7.$ #

&1id l114'. { i6 'client.a&ailable'.. { char c = client.read'.$ Serial.4rint'c.$ # i6 '?client.c1nnected'.. { Serial.4rintln'.$ Serial.4rintln'7dec1nectare acum.7.$ client.%t14'.$ 61r'$$. $ # #

Primul lucru de remarcat in codul sursa de mai sus este declaratia adresei /AC% .rice dispo&itiv conectat intr-o retea este identi$icat in mod unic de adresa sa /AC% Aceasta este un numar unic alocat de producator care permite adresarea dispo&itivului respectiv% Daca te uiti pe s'ield-ul tau Et'ernet vei http://www.robofun.ro/forum

http://www.robofun.ro

Curs Gratuit Arduino si Robotica

vedea acest numar de identi$icare scris pe un stic2er% Este bine sa $olosesti acest numar de identi$icare ori de cate ori scrii cod pentru s'ield-ul Et'ernet respectiv% Cu toate ca pana acum am spus ca acest numar este 3unic3 lucrurile nu sunt c'iar asa de stricte% Este absolut necesar sa $ie unic dar nu neaparat la nivelul intregii retele (nternet ci doar in reteaua locala (pana la primul router# in care este cuplat dispo&itivul% Exista sanse sa $unctione&e corect (aproape# orice valori ai seta in codul de mai sus pentru adresa /AC (spun 3aproape3 pentru ca exista o serie de reguli care determina o adresa /AC valida dar care nu sunt neaparat respectate#% Ca si conclu&ie cel mai bine este sa declari ca adresa /AC exact ceea ce scrie pe s'ield% Daca nu scrie sau daca stic2er-ul s-a rupt poti pune si alte valori si exista sanse mari sa $unctione&e corect% Al doilea lucru este adresa (P% Pe langa adresa /AC de care am discutat mai sus $iecare dispo&itiv conectat in (nternet mai are asociata si o adresa (P% Daca este prima data cand te intalnesti cu aceste concepte probabil ca ti se pare totul anapoda si te intrebi de ce atunci cand a $ost gandit (nternetul n-au dat $iecarui dispo&itiv o adresa unica si s-au complicat in 'alul asta% Exista o serie de motive dar nu voi insista asupra lor aici% Deocamdata este su$icient sa acceptam ca pe langa adresa /AC pentru $iecare dispo&itiv mai exista si o adresa (P% Ca sa poate $i vi&ibil in (nternet (adica oricine sa-l poata accesa din (nternet# atunci adresa (P a dispo&itivului trebuie sa $ie unica (si aici c'iar trebuie nu mai merg lucrurile ca la adresa /AC#% (n ca&ul nostru in care un Arduino care se conectea&a la serverul ,oogle putem identi$ica doua adrese (P ) o adresa (P pentru serverul ,oogle (anume 3 678 69: 88 6;:3# si o adresa (P pentru Arduino% Adresa (P a serverului ,oogle este unica in intreg (nternetul pentru a $i accesibil de oriunde% (n ca&ul adresei (P pentru Arduino este su$icient ca adresa sa $ie unica doar la nivelul retelei locale (pana la primul router ) ceea ce de obicei inseamna casa sau biroul tau# pentru ca in aceasta situatia noi $olosim Arduino drep client doar (adica Arduino nu este accesat de catre cineva din (nternet ci el accesea&a#% Din acest motiv putem lasa alocarea unei adrese (P pentru placa Arduino pe seama router-ului $ara sa ne mai batem noi capul cu ea (procedeul se numeste alocare prin D4CP#% Evident acest lucru presupune ca avem un router capabil sa o$ere adrese prin D4CP in reteaua locala < Daca nu ai atunci va trebui sa sete&i tu o adresa (P statica pentru placa de retea (si in exemplu urmator vom $ace asta#% (nca o remarca utila este ca adresa (P a serverului ,oogle se poate sc'imba in timp% (n momentul in care eu scriu aceste randuri exemplul de mai sus $unctionea&a per$ect% *e poate intampla insa ca pana cand tu le vei citi inginerii de la ,oogle sa $i modi$icat deja adresa (P a serverului iar tie sa nu-ti $unctione&e corect exemplul% 5n bro!ser !eb obisnuit ca sa obtina intotdeauna adresele (P corecte utili&ea&a un serviciu numit 3DN*3 (serviciu pe care il poate $olosi si Arduino dar intr-un exemplu urmator#% Deocamdata daca nu-ti $unctionea&a exemplul de mai sus va trebui sa determini si sa actuali&e&i manual adresa serverului ,oogle% Pentru aceasta desc'ide o consola command prompt pe PC (daca esti pe =indo!s apasa 3*tart3 30un3 scris http://www.robofun.ro/forum

http://www.robofun.ro

Curs Gratuit Arduino si Robotica

3cmd3 si apasa Enter#% (n consola desc'isa scrie 3ping google%com3% >ei vedea ca raspuns (P-ul serverului ,oogle ca mai jos%

(n s$arsit daca totul merge bine atunci ar trebui sa ve&i in *erial /onitor o serie de caractere care de$ilea&a% Acestea sunt raspunsul serverului ,oogle la cautarea ta (acel 4T/- pe care bro!serul il interpretea&a si il a$isea&a intr-un $ormat vi&ual adecvat#% Exemplul pe care tocmai l-am va&ut nu are o utilitate clara in sine exact in $orma aceasta dar este ba&a pentru orice proiect care presupune extragere de in$ormatia din (nternet%

Client Web, IP static


*a presupunem ca nu ai in casa un router capabil sa aloce adresa (P prin D4CP% (n aceasta situatie vei vedea in *erial /onitor un mesaj de eroare in momentul in care vei incerca sa rule&i exemplul de mai sus% (n aceasta situatie va trebui sa declari tu manual o adresa (P statica pentru s'ield-ul Et'ernet ca mai jos%
#include <SPI.h> #include <Ethernet.h> byte mac[] = { 0xDE, 0x D, 0x!E, 0xE", 0x"E, 0xED #$ IP ddre%% %er&er'(0),*+,,-*,,0,.$ // 0112le IPAddress arduinoIP(192,168,0,99); // Arduino Ethernet3lient client$ &1id %etu4'. { Serial.be2in')500.$ if (Ethernet.begin( a!, arduinoIP) "" 0) # Serial.4rintln'78u %9a reu%it initiali:area 4lacii de retea 61l1%ind 1 adre%a IP %tatica7.$ # delay',000.$ Serial.4rintln'7c1nectare in 4r12re%%...7.$ i6 'client.c1nnect'%er&er, *0.. { Serial.4rintln'7c1nectat7.$ client.4rintln'70E< /%earch=>=arduin1 ;<<P/,.07.$ client.4rintln'.$ # el%e {

http://www.robofun.ro/forum

http://www.robofun.ro
Serial.4rintln'7c1nectare e%uata7.$ # #

Curs Gratuit Arduino si Robotica

&1id l114'.{ //E@ 3< A #

"EA 3

I8 E@EBPACA PDE3EDE8<

*ingurele linii di$erite sunt cele doua linii marcate cu bold% Prima linie de$ineste o adresa (P pentru s'ield-ul Et'ernet iar cea de-a doua linie o utili&ea&a in sectiunea de initiali&are a s'ield-ului% Ca sa alegi o adresa (P valida pentru reteaua ta va trebui sa determini mai intai ce adresa (P are calculatorul tau ca sa poti da si pentru Arduino o adresa (P din aceeasi clasa% Acest lucru se $ace (in =indo!s# apasand 3*tart3 apoi 30un3 apoi tastand 3cmd3 si Enter% (n consola desc'isa tastea&a 3ipcon$ig3% >ei observa (daca nu ai $oarte mult g'inion# o linie care &ice 3(P Address ? 69@%6AB%;%@3 sau ceva similar% Aceasta este adresa (P a calculatorului tau% (n cele mai multe ca&uri tu va trebui sa modi$ici ultima ci$ra ast$el incat adresa nou obtinuta sa nu mai $ie utili&ata de nimeni in reteaua ta locala% Depin&and de la ca& la ca& acest lucru ar putea $i simplu sau mai complicat% (ncearca sa alegi un numar mai mare (99 6:9 @+8 sunt exemple bune#% Daca totusi nu reusesti sa gasesti o adresa (P valida atunci o varianta ar $i sa apele&i la ajutorul unui amic care se pricepe la retele de calculatoare si sa ii ceri sa-ti indice o adresa (P libera in reteaua ta% (n $inal vei obtine acelasi re&ultat ca in exemplul de mai sus doar ca acum adresa (P pentru placa Arduino este setata de tine%

Server Web
Acum ca ai reusit sa $aci placa Arduino sa citeasca date din (nternet urmatorul pas este sa $aci un server care sa poata $i accesat de alti utili&atori din (nternet interesati sa vada in$ormatie culeasa de placa ta Arduino% (nainte de a incepe este bine sa stii ca in cele de urmea&a voi pre&enta in detaliu tot ce trebuie sa $aci pentru a avea un server $unctional pe placa Arduino (si care sa $unctione&e cel putin accesat dintr-un bro!ser de pe laptopul tau#% Ca serverul sa $ie accesibil c'iar din (nternet pentru oricine lucrurile sunt putin mai complicate la nivel de con$igurari de router si retea locala (nu la nivelul Arduino#% Cu aceste con$igurari de router va trebui sa te descurci singur% Din $ericire exista $oarte multe tutoriale in acest sens pe (nternet (poti incerca o cautare pe ,oogle cu 3access 'ome server $rom internet3 sau 3cum accese& serverul de acasa3#%
#include <SPI.h> #include <Ethernet.h>

http://www.robofun.ro/forum

http://www.robofun.ro

Curs Gratuit Arduino si Robotica

byte mac[] = { 0xDE, 0x D, 0x!E, 0xE", 0x"E, 0xED #$ IP ddre%% i4',)(,,5*,,, ,EE.$ EthernetSer&er %er&er'*0.$ &1id %etu4'. { Serial.be2in')500.$ Ethernet.be2in'mac, i4.$ %er&er.be2in'.$ Serial.4rint'7adre%a IP a %er&er9ului e%teF 7.$ Serial.4rintln'Ethernet.l1calIP'..$

&1id l114'. { Ethernet3lient client = %er&er.a&ailable'.$ i6 'client. { Serial.4rintln'7c1nectare client n1u7.$ b11lean currentAineI%!lanG = true$ Hhile 'client.c1nnected'.. { i6 'client.a&ailable'.. { char c = client.read'.$ Serial.Hrite'c.$ i6 'c == IJnI KK currentAineI%!lanG. { client.4rintln'7;<<P/,., (00 LM7.$ client.4rintln'731ntent9<y4eF text/html7.$ client.4rintln'731nnnecti1nF cl1%e7.$ client.4rintln'.$ client.4rintln'7<?DL3<NPE ;<BA>7.$ client.4rintln'7<html>7.$ client.4rintln'7<meta htt49e>ui&=J7re6re%hJ7 c1ntent=J7+J7>7.$ 61r 'int anal123hannel = 0$ anal123hannel < 5$ anal123hannelOO. { int %en%1rDeadin2 = anal12Dead'anal123hannel.$ client.4rint'7P 4e 41rtul anal12ic 7.$ client.4rint'anal123hannel.$ client.4rint'7 %9a citit &al1are 7.$ client.4rint'%en%1rDeadin2.$ client.4rintln'7<br />7.$ # client.4rintln'7</html>7.$ breaG$ # i6 'c == IJnI. { currentAineI%!lanG = true$ # el%e i6 'c ?= IJrI. { currentAineI%!lanG = 6al%e$ # # # delay',.$ client.%t14'.$ Serial.4rintln'7clientul a incheiat %e%iunea7.$ #

http://www.robofun.ro/forum

http://www.robofun.ro

Curs Gratuit Arduino si Robotica

Deja am explicat in exemplele precedente ce inseamna adresa /AC si adresa (P asa ca nu vom mai relua aici% Prima linie interesanta (si prima notiune nou introdusa# este cea care declara un server !eb pe portul B;% 5n server !eb $unctionea&a pe unul sau mai multe porturi% 5n port este un identi$icator pentru un anumit serviciu pe un anumit calculator $i&ic% Ast$el pe un calculator $i&ic putem avea un server !eb pe portul B; si un server de ba&e de date care raspunde pe portul 88;A% Portul B; este ales de obicei pentru serverele !eb si este presupus in mod obisnuit in bro!sere cand vrem sa accesam un site% /ai departe in rutina loop se asteapta conectarea unui client !eb (adica un vi&itator oarecare din (nternet# (apelul 3server%available(#3 astepta $ara sa treaca mai departe pana cand se conectea&a un vi&itator la server#% Cand acesta s-a conectat este generata o instanta 3client3 care va $ace toata treaba pentru acel vi&itator% /ai exact va incepe prin a genera 'eader-ele 4TTP (necesare pentru ca bro!ser-ul vi&itatorului sa stie ce sa $aca cu in$ormatia pe care o primeste de la server ) in ca&ul nostru sa o a$ise&e ca text#% 5rmea&a apoi un ciclu 3$or3 care citeste toate cele A porturi analogice ale placii Arduino si le trimite catre bro!ser-ul vi&itatorului%

Daca desc'i&i un bro!ser si accese&i serverul pe care tocmai l-ai creat vei vedea un re&ultat similar cu cel din imagine% Dat $iind $aptul ca nu ai nimic conectat la porturile analogice ale placii Arduino valorile citite sunt aleatoare% Daca insa vei conecta un sen&or de lumina bric2 sau un sen&or de temperatura bric2 vei vedea imediat ca valorile capata sens% Asa cum spuneam si la inceputul acestei sectiuni ca sa accese&i placa http://www.robofun.ro/forum

http://www.robofun.ro

Curs Gratuit Arduino si Robotica

Arduino c'iar din (nternet (si nu de pe laptop cum am testat mai sus# mai trebuie doar sa sete&i router-ul local ca atunci cand cineva il accesea&a din a$ara pe un port pe care ti-l alegi tu sa trimita cererea catre (P-ul alocat placii Arduino pe portul B;% Pentru detalii despre cum anume sa $aci acest lucru poti incerca o cautare pe ,oogle cu 3access 'ome server $rom internet3 sau 3cum accese& serverul de acasa3%

Client Web, cu DNS


(n ambele exemple de mai sus in care am $olosit placa Arduino ca sa citim in$ormatie din (nternet am avut adresa (P a server-ului scrisa in clar in codul sursa% Dupa cum am va&ut acest lucru poate cau&a probleme atunci cand adresa (P a server-ului s-a sc'imbat intre timp% Exista un singur lucru care nu se sc'imba si acesta este domeniul server-ului (numele acestuia ) 3google%com3#% Trecerea de la domeniu la adresa (P se c'eama 3re&olvarea domeniului3 si este asigurata de o serie de servere dedicate pre&ente in (nternet numite servere DN*% Arduino este capabil sa le utili&e&e ca sa obtina (P-ul unui anumit server pe ba&a domeniului acestuia ca mai jos% Este exact acelasi exemplu ca mai sus (cautam pe ,oogle termenul 3arduino3# dar de data asta $olosind serviciul DN*%
#include <SPI.h> #include <Ethernet.h> byte mac[] = { 0x00, 0x , 0x!!, 0x33, 0xDE, 0x0( #$ !har ser$er%a e&' " ())).goog*e.!o (; Ethernet3lient client$ &1id %etu4'. { Serial.be2in')500.$ i6 'Ethernet.be2in'mac. == 0. { Serial.4rintln'7Er1are in c1n6i2urarea 61l1%ind D;3P.7.$ # delay',000.$ Serial.4rintln'7c1nectare in 4r12re%...7.$ if (!*ient.!onne!t(ser$er%a e, 80)) # Serial.4rintln'7c1nectat7.$ client.4rintln'70E< /%earch=>=arduin1 ;<<P/,.07.$ client.4rintln'.$ # el%e { Serial.4rintln'7c1nexiune e%uata7.$ #

&1id l114'. { //LA FEL CA IN EXEMPLELE PRECEDENTE

http://www.robofun.ro/forum

http://www.robofun.ro
#

Curs Gratuit Arduino si Robotica

/ultumita librariei excelent scrise modi$icarile sunt minimale (doar cele doua linii marcate cu bold# toata implementarea $iind $acuta direct in librarie%

http://www.robofun.ro/forum

http://www.robofun.ro

Curs Gratuit Arduino si Robotica

Ultimul tweet al unui user Twitter afisat pe CD Shield, f!l!sind Ethernet Shield "sau #rduin! Ethernet$
Acest exemplu demonstrea&a utili&area unui Et'ernet *'ield (sau al unui Arduino Et'ernet# pentru a a$isa ultimul t!eet al unui utili&ator T!itter pe -CD% Poti $olosi orice $el de -CD doresti% (n acest exemplu vom $olosi un -CD s'ield pentru simplitatea conectarii% Ai la dispo&itie doar 8@ de caractere pe acest -CD asa ca vom $olosi $acilitatea de scroll pentru a vedea intreg t!eet-ul% -CD *'ield-ul $oloseste pinii @ 8 : + A si 7 in timp ce Et'ernet *'ield-ul $oloseste pinii 6; 66 6@ si 68 asa ca din $ericire nu avem nici un con$lict de pini%

Din cau&a $aptului ca Et'ernet *'ield este mai inalt decat de obicei http://www.robofun.ro/forum

http://www.robofun.ro

Curs Gratuit Arduino si Robotica

datorita mu$ei Et'ernet daca incercam sa in$igem direct -CD *'ield-ul s-ar putea ca mu$a Et'ernet *'ield-ului sa atinga anumite contacte de pe spatele -CD *'ield-ului% Pentru a evita acest lucru vom $olosi un set de pini ca cei din imaginea de mai sus% >om in$ige mai intai pinii in Et'ernet *'ield si apoi in pini vom in$ige -CD *'ield-ul% (n acest $el ne vom asigura ca exista su$icient spatiu intre Et'ernet *'ield si -CD *'ield%

http://www.robofun.ro/forum

http://www.robofun.ro

Curs Gratuit Arduino si Robotica

#include <SPI.h> #include <Ethernet.h> #include <Ai>uid3ry%tal.h> #include <Qire.h> Ai>uid3ry%tal lcd'E, 5, +, -, R, (.$ char u%ername[] = 7arduin17$ byte mac[] = { 0x00, 0x , 0x!!, 0x33, 0xDE, 0x0, #$ IP ddre%% i4',)(,,5*,,,(0.$ Ethernet3lient client$ c1n%t un%i2ned l1n2 re>ue%tInter&al = 50000$ char %er&er8ame[] = 7a4i.tHitter.c1m7$ b11lean re>ue%ted$ un%i2ned l1n2 la%t ttem4t<ime = 0$ Strin2 currentAine = 77$ Strin2 tHeet = 77$ b11lean readin2<Heet = 6al%e$ &1id %etu4'. { currentAine.re%er&e'(+5.$ tHeet.re%er&e',+0.$ Serial.be2in')500.$ Serial.4rintln'7Incerc %a 1btin 1 adre%a IP 61l1%ind D;3PF7.$ i6 '?Ethernet.be2in'mac.. { Serial.4rintln'7e%ec in 1btinerea unei adre%a IP 4rin D;3P, &1m 61l1%i adre%a IP %etata manual7.$ Ethernet.be2in'mac, i4.$ # Serial.4rint'7 dre%a IPF7.$ Serial.4rintln'Ethernet.l1calIP'..$ c1nnect<1Ser&er'.$ lcd.aut1%cr1ll'.$ lcd.clear'.$

&1id l114'. { i6 'client.c1nnected'.. { i6 'client.a&ailable'.. { char in3har = client.read'.$ currentAine O= in3har$

http://www.robofun.ro/forum

http://www.robofun.ro

Curs Gratuit Arduino si Robotica

i6 'in3har == IJnI. { currentAine = 77$ # i6 ' currentAine.end%Qith'7<text>7.. { readin2<Heet = true$ tHeet = 77$ # i6 'readin2<Heet. { i6 'in3har ?= I<I. { tHeet O= in3har$ # el%e { readin2<Heet = 6al%e$ Serial.4rintln'tHeet.$ lcd.clear'.$ lcd.4rint'tHeet.$ lcd.aut1%cr1ll'.$ client.%t14'.$ # # # # el%e i6 'milli%'. 9 la%t ttem4t<ime > re>ue%tInter&al. { c1nnect<1Ser&er'.$ #

&1id c1nnect<1Ser&er'. { Serial.4rintln'7c1nectare la %er&er...7.$ i6 'client.c1nnect'%er&er8ame, *0.. { Serial.4rintln'7lan%e: re>ue%t ;<<P...7.$ client.4rint'70E< /,/%tatu%e%/u%erStimeline.xml=%creenSname=7.$ client.4rint'u%ername.$ client.4rintln'7Kc1unt=, ;<<P/,.,7.$ client.4rintln'7;LS<F a4i.tHitter.c1m7.$ client.4rintln'.$ # la%t ttem4t<ime = milli%'.$ #

Constanta username de$ineste userul T!itter pentru care ne interesea&a sa obtinem ultimul t!eet% Constanta /AC este un identi$icator unic al placii tale Et'ernet% Este $oarte probabil sa il gasesti scris c'iar pe placa (ca in po&a de mai jos#% C'iar daca s'ield-ul tau nu are /AC-ul scris pe el nu este nici o problema% Poti sa-l $olosesti pe cel din codul de mai sus $ara probleme% *ingura situatie in care s-ar putea intampla sa ai probleme este aceea in care un alt ec'ipament din reteaua ta (de exemplu un laptop# sa aiba exact acelasi /AC (lucru care nu este $oarte probabil#%

http://www.robofun.ro/forum

http://www.robofun.ro

Curs Gratuit Arduino si Robotica

Constanta ip este adresa (P a placii pentru ca&ul in care nu s-a reusit obtinerea unei adresa (P in mod automat prin D4CP% Pentru mai multe detalii despre adrese (P si D4CP ve&i sectiunea dedicata *'ield-ului Et'ernet% requestInterval de$ineste intervalul intre doua actuali&ari succesive in milisecunde% Esti liber sa $olosesti ce interval doresti dar nu mai putin de @;;;; pentru a o$eri un interval de @; de secunde minim pentru a se $inali&a executia unei actuali&ari% api.twitter.com este 50--ul server-ului T!itter catre care vom lansa cererile 4TTP% (n $unctia setup se incearca obtinerea unei adrese (P in mod automat $olosind protocolul D4CP% Daca nu s-a reusit acest lucru se $oloseste adresa (P setata manual la inceputul programului% c onnectToServer lansea&a cererea 4TTP catre server-ul T!itter (include in cererea 4TTP si username-ul setat la inceputul programului#% (mediat ce s-a terminat connectToServer in $unctia loop incepe citirea caracterelor trimise de server% *e citeste caracter cu caracter iar in variabila currentLine se concatenea&a caracterele pentru a obtine intreaga linie (s$arsitul http://www.robofun.ro/forum

http://www.robofun.ro

Curs Gratuit Arduino si Robotica

unei linii de text este marcat prin caracterul 3Cn3#% Atunci cand linia curenta este 3DtextE3 inseamna ca incepand din acest punct pana cand intalnim textul 3D"textE3 avem continutul t!eet-ului care ne interesea&a% (mediat ce am intalnit caracterul 3D3 (care marc'ea&a inceputul pentru D"textE# t!eet-ul s-a inc'eiat% Putem a$isa t!eet-ul pe -CD ( lcd.print(tweet) # si putem inc'ide conexiunea la server (client.stop())% Dupa ce s-au scurs requestInterval milisecunde este apelata din nou $unctia connectToServer si procesul se reia% Daca *'ield-ul -CD 6AF@ ti se pare prea mic poti $olosi orice alt -CD iti place% (ntr-o lectie viitoare vom pre&enta exact acelasi proiect $olosind insa un =i$lG *'ield in loc de Et'ernet *'ield si un -CD @;F: pe (@C in loc de -CD-ul @F6A%

http://www.robofun.ro/forum

http://www.robofun.ro

Curs Gratuit Arduino si Robotica

Aceasta a fost lectia 8. In final, as vrea sa te rog sa ne oferi feedback asupra acestei lectii, pentru a ne permite sa le facem mai bune pe urmatoarele. Este vorba despre un sondaj cu 4 intrebari (oricare este optionala), pe care il poti accesa dand click aici. Sau ne poti contacta direct prin email la contact robofun.ro . Iti multumim, Ec!ipa "obofun."#

http://www.robofun.ro/forum

S-ar putea să vă placă și