SlideShare a Scribd company logo
1 of 6
Download to read offline
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 website / blog, printare,
sau orice alt mijloc), atat timp cat nu aduci nici un fel de modificari acestuia. Codul sursa din acest document
poate fi utilizat in orice fel de scop, de natura comerciala sau nu, fara nici un fel de limitari.
Arduino – cereri HTTP de tip GET si POST
Despre HTTP.
HTTP este un protocol de comunicare intre un client si un server web. In cazul acestui
protocol comunicatia incepe de la client, dar sunt si situatii in care server-ul doreste sa initieze
comunicatia cu clientul, cum vei descoperi in continuare.
In urma unei cereri HTTP prin care un client initiaza o comunicatie cu un server, acesta din
urma proceseaza cererea si trimite un raspuns inapoi clientului (dar sunt situatii in care nu este
obligatoriu sa trimita raspuns, ci o proceseaza si atat).
HTTP, alaturi de alte protocoale este foarte cunoscut deoarece opereaza la nivelul 7 (nivelul
Aplicatie) din modelul OSI.
Pentru a afla mai multe detalii despre acest protocol sau despre modelul OSI acceseaza link-
urile de mai jos. Sunt foarte utile deoarece te ajuta sa iti aprofundezi cunostintele despre retelistica,
tipurile de protocoale ce opereaza in spatele unei conexiuni de internet, tipurile de retele ce se pot
construi, s.a.m.d.
http://support.microsoft.com/kb/103884
http://www.webopedia.com/quick_ref/OSI_Layers.asp
http://en.wikipedia.org/wiki/OSI_model
http://compnetworking.about.com/cs/designosimodel/g/bldef_osi.htm
GET si POST ?
Pana aici ai inteles ca un client initiaza o comunicatie HTTP cu un server web. Exista 2 tipuri de
cereri pe care un client le poate lansa catre un server si anume: GET si POST.
La ce te ajuta pe tine aceste cereri ? Cererile GET si POST te vor ajuta pe tine sa publici
informatii pe Internet, mai exact sa programezi o placa Arduino sa citeasca „ceva“ si sa faca vizibila
aceasta informatie pe Internet.
Ca si exemplu, sa ne gandim la o statie meteo construita cu o placa Arduino. Statia meteo este
alcatuita dintr-o multitudine de senzori ce sunt responsabili cu masurarea: temperaturii, presiunii,
umiditatii, vitezei/directiei vantului, cantitatii de ploaie, indicelui de confort termic. Asta este doar un
exemplu, dar sunt foarte multe situatii la care trebuie sa publici informatiile pe internet.
Urmatoarea intrebarea care se poate naste este: cum public aceste informatii pe internet si cum
pot sa le vizualizez, ce pot sa fac cu ele sau cum le stochez ?
http://www.robofun.ro/forum
Cererile GET si POST sunt doar o parte a raspunsului. Aceste cereri te ajuta sa initiezi
comunicatia intre statia meteo si server-ul web. Mai departe server-ul web proceseaza informatiile, le
publica pe o pagina web si le salveaza intr-o baza de date.
Server-ul web proceseaza cererile printr-o pagina scrisa in PHP. Pagina PHP initiaza conexiunea
cu baza de date, unde printr-un alt protocol salveaza informatiile procesare prin GET sau POST. Mai
departe, o alta pagina initiaza o conexiune cu baza de date, preia informatiile si le afiseaza sub forma
unui grafic.
Tocmai am descris, sumar, un serviciu de procesare a datelor online (mai este cunoscut sub
serviciu Cloud).
Totusi sunt 2 cereri si trebuie sa alegi doar una, dar inainte de a face lucrul asta trebuie sa vezi
din ce este compusa o cerere:
• in primul rand resursa solicitata de client. In cazul statiei meteo, resursa este o cale catre un
fisier PHP, fisierul care proceseaza cererea. (exemplu: /meteo/preiadate.php)
• tipul cererii: GET sau POST.
• Headere HTTP: sunt informatii standard transmite de client catre server. Practic aceste
informatii ajuta la identificarea clientului.
• Informatiile statiei meteo (temperatura, presiune, umiditate, s.a.m.d).
Ca sa intelegi cat mai usor trebuie sa te gandesti la un exemplu. Revenind la statia meteo,
aceasta este programata sa publice datele printr-un server. Statia meteo initiaza cereri la intervale
regulate de timp (spre exemplu, o data pe minut sau o data la 10 minute) prin GET sau POST. Practic
statia meteo specifica serverului urmatoarele lucruri: pagina php care proceseaza temperatura,
umiditatea, etc; ii spune serverului la ce tip de cerere sa se astepte, ii da de asemenea detalii despre
propria identitate (cine sunt eu, cu ce host vreau sa comunic) si in final ii transfera informatiile
(temperatura, umiditate, etc).
Daca statia meteo a realizat acest lucru si server-ul web preia corect datele, poti sa spui ca ai
reusit sa publici cu succes datele pe un server web.
Cum arata o cerere POST scrisa in cod Arduino ?
Iata mai jos cum o placa Arduino poate sa initializeze o cerere POST cu un server web. Asa
cum am explicat mai sus despre structura cererii HTTP, se poate observa acelasi lucru si in structura
cereri POST.
Mai exact, daca conexiunea cu serverul s-a realizat cu succes se va executa toata structura de
cod cuprinsa intre acolade. Clientul ii spune serverului la ce tip de cerere sa se astepte urmata de adresa
paginii php, apoi ii transmite mai multe detalii despre el insasi (adresa host-ului, tipul agentului:
Arduino, ce ar trebui sa faca server-ul dupa ce primeste datele adica sa inchida conexiunea, formatul
headerului http, dimensiunea informatiilor si in final informatia utila).
http://www.robofun.ro/forum
if (client.connect(server,80)) { // daca s-a conectat cu succes
Serial.println("connected"); // afiseaza pe Monitorul Serial
client.println("POST /pagethattakesdata.php HTTP/1.1"); //
transmite tipul cererii si adresa paginii care proceseaza cererea
client.println("Host: 192.168.2.1"); // adresa host-ului
client.println("User-Agent: Arduino/1.0"); // detalii despre
client
client.println("Connection: close"); // inchide conexiunea
client.println("Content-Type: application/x-www-form-
urlencoded"); // formatul headerului http
client.print("Content-Length: "); // dimensiunea informatiilor
client.println(sizeof(date));
client.println();
client.println(String(date)); // informatiile in sine sub forma
de String
client.println();
client.flush(); // inchide conexiunea
client.stop();
}
Cum proceseaza o pagina PHP cererea de mai sus ?
<?php
$file = 'date.txt';
$current = file_get_contents($file);
if (isset($_POST['data'])) {
$t = $_POST['data'];
$current .= $t;
file_put_contents($file, $current);
} else {
$t = 0;
$current .= $t;
file_put_contents($file, $current);
}
?>
Ce se intampla cu codul php de mai sus ? La fiecare cerere lansata de statia meteo (placa
Arduino) codul este executat si realizeaza urmatorul lucru: deschide un fisier text (a doua linie), preia
continutul (a treia linie), verifica daca exista o cerere POST care incepe cu 'data' (a patra linie), daca
exista atunci codul salveaza toata informatia intr-o variabila iar mai apoi variabila este stocata in
continutul fisierului si apoi rescris in fisierul text (liniile 5, 6 si 7).
Daca exista cereri dar care nu sunt identificate cu 'data', atunci codul scrie un 0 in fisierul text.
Acel 0 poate fi interpretat ca si eroare, daca este cazul.
http://www.robofun.ro/forum
Cum testez codul de mai sus ?
Primul lucru pe care trebuie sa il faci este sa instalezi un server Apache, un compilator PHP, o
si o baza de date MySQL. Pentru simplitate iti recomand utilitarul XAMPP, pe care il poti descarca si
instala de la adresa de mai jos:
http://www.apachefriends.org/ro/index.html
Ai la dispozitie varianta pentru Windows, Linux si Apple.
Descarca utilitarul Notepad++ si creeaza o pagina PHP. Copiaza codul sursa de mai sus in
pagina PHP.
Pagina PHP nou creata trebuie salvata la urmatoarea adresa unde ai instalat utilitarul xampp,
adica /xampp/htdocs/.
http://www.robofun.ro/forum
Daca server-ul este pornit si configurat corect, acesta poate primi cereri de la placa Arduino.
Asa cum am spus mai sus, tot ce face pagina php care serveste cererile este sa le salveze intr-un fisier
text.
Daca codul de mai sus functioneaza cu succes, fisierul text va arata sub urmatoarea forma:
Tot ce vezi acolo este o succesiune de valori salvate pe spatiul serverului, valori generate de o
placa Arduino avand un shield Wifi conectat in pinii acesteia si un senzor de temperatura care la
anumite intervale de timp genereaza si o eroare (valorile 85 prezente in fisier).
Ce poti realiza tu in continuare ?
Afla cum poti salva aceste valori intr-o baza de date ! De asemenea afla cum poti sa generezi un
grafic pe baza unui fisier text continand informatii cu privire la temperatura, umiditate, presiune.
Poti sa iti creezi un sistem dinamic de prelucrare a datelor studiind link-urile de mai jos:
http://blog.protoneer.co.nz/arduino-http-post-requests/
http://www.codetorment.com/2009/11/12/arduino-temperature-and-light-data-logging-and-
chartplotting-webmonitor/
http://forum.arduino.cc/index.php?topic=155218.0
https://github.com/ericbenwa/POST-Arduino-Data-Wireless
http://www.robofun.ro/forum

More Related Content

Viewers also liked

1016李耕心牧師─不堪〝一擊〞
1016李耕心牧師─不堪〝一擊〞1016李耕心牧師─不堪〝一擊〞
1016李耕心牧師─不堪〝一擊〞萬隆基督的教會
 
信愛教會 2015 0412主日信息 -天上的榮光-基督復活的意義
信愛教會 2015 0412主日信息 -天上的榮光-基督復活的意義信愛教會 2015 0412主日信息 -天上的榮光-基督復活的意義
信愛教會 2015 0412主日信息 -天上的榮光-基督復活的意義高雄 信愛教會
 
基督門徒訓練神學院20120920週會信息(講員:鄭家常長老)
基督門徒訓練神學院20120920週會信息(講員:鄭家常長老)基督門徒訓練神學院20120920週會信息(講員:鄭家常長老)
基督門徒訓練神學院20120920週會信息(講員:鄭家常長老)基督門徒訓練神學院
 
與魔鬼共舞 聊聊日常生活中的使用體驗與設計
與魔鬼共舞 聊聊日常生活中的使用體驗與設計與魔鬼共舞 聊聊日常生活中的使用體驗與設計
與魔鬼共舞 聊聊日常生活中的使用體驗與設計Lin Je-We
 
0814李耕心牧師─溫柔的慈悲
0814李耕心牧師─溫柔的慈悲0814李耕心牧師─溫柔的慈悲
0814李耕心牧師─溫柔的慈悲萬隆基督的教會
 
洗禮與跟隨
洗禮與跟隨洗禮與跟隨
洗禮與跟隨gaanchurch
 
基督門徒訓練神學院20140306週會信息(講員:王良玉院長)
基督門徒訓練神學院20140306週會信息(講員:王良玉院長)基督門徒訓練神學院20140306週會信息(講員:王良玉院長)
基督門徒訓練神學院20140306週會信息(講員:王良玉院長)基督門徒訓練神學院
 
住在全能者的蔭下
住在全能者的蔭下住在全能者的蔭下
住在全能者的蔭下Fong-yuen Liu
 
基督門徒訓練神學院20121002週會信息(講員:汪川生牧師)
基督門徒訓練神學院20121002週會信息(講員:汪川生牧師)基督門徒訓練神學院20121002週會信息(講員:汪川生牧師)
基督門徒訓練神學院20121002週會信息(講員:汪川生牧師)基督門徒訓練神學院
 
0904李耕心牧師─人生啊!帥不帥!
0904李耕心牧師─人生啊!帥不帥!0904李耕心牧師─人生啊!帥不帥!
0904李耕心牧師─人生啊!帥不帥!萬隆基督的教會
 
用喜樂彩繪人生
用喜樂彩繪人生用喜樂彩繪人生
用喜樂彩繪人生davidyes899
 
0608李耕心牧師─〝我〞存在
0608李耕心牧師─〝我〞存在0608李耕心牧師─〝我〞存在
0608李耕心牧師─〝我〞存在萬隆基督的教會
 
聽見上帝的聲音 高雄信愛教會 20150419主日信息
聽見上帝的聲音 高雄信愛教會 20150419主日信息聽見上帝的聲音 高雄信愛教會 20150419主日信息
聽見上帝的聲音 高雄信愛教會 20150419主日信息高雄 信愛教會
 
0925李耕心牧師─善莫〝大〞焉
0925李耕心牧師─善莫〝大〞焉0925李耕心牧師─善莫〝大〞焉
0925李耕心牧師─善莫〝大〞焉萬隆基督的教會
 

Viewers also liked (20)

1016李耕心牧師─不堪〝一擊〞
1016李耕心牧師─不堪〝一擊〞1016李耕心牧師─不堪〝一擊〞
1016李耕心牧師─不堪〝一擊〞
 
信愛教會 2015 0412主日信息 -天上的榮光-基督復活的意義
信愛教會 2015 0412主日信息 -天上的榮光-基督復活的意義信愛教會 2015 0412主日信息 -天上的榮光-基督復活的意義
信愛教會 2015 0412主日信息 -天上的榮光-基督復活的意義
 
基督門徒訓練神學院20120920週會信息(講員:鄭家常長老)
基督門徒訓練神學院20120920週會信息(講員:鄭家常長老)基督門徒訓練神學院20120920週會信息(講員:鄭家常長老)
基督門徒訓練神學院20120920週會信息(講員:鄭家常長老)
 
0824王良玉院長 神家真可愛
0824王良玉院長   神家真可愛0824王良玉院長   神家真可愛
0824王良玉院長 神家真可愛
 
Top 15-online-directories
Top 15-online-directoriesTop 15-online-directories
Top 15-online-directories
 
2014/6/8 向著標竿直跑
2014/6/8 向著標竿直跑2014/6/8 向著標竿直跑
2014/6/8 向著標竿直跑
 
與魔鬼共舞 聊聊日常生活中的使用體驗與設計
與魔鬼共舞 聊聊日常生活中的使用體驗與設計與魔鬼共舞 聊聊日常生活中的使用體驗與設計
與魔鬼共舞 聊聊日常生活中的使用體驗與設計
 
20150510Words
20150510Words20150510Words
20150510Words
 
0814李耕心牧師─溫柔的慈悲
0814李耕心牧師─溫柔的慈悲0814李耕心牧師─溫柔的慈悲
0814李耕心牧師─溫柔的慈悲
 
洗禮與跟隨
洗禮與跟隨洗禮與跟隨
洗禮與跟隨
 
基督門徒訓練神學院20140306週會信息(講員:王良玉院長)
基督門徒訓練神學院20140306週會信息(講員:王良玉院長)基督門徒訓練神學院20140306週會信息(講員:王良玉院長)
基督門徒訓練神學院20140306週會信息(講員:王良玉院長)
 
住在全能者的蔭下
住在全能者的蔭下住在全能者的蔭下
住在全能者的蔭下
 
基督門徒訓練神學院20121002週會信息(講員:汪川生牧師)
基督門徒訓練神學院20121002週會信息(講員:汪川生牧師)基督門徒訓練神學院20121002週會信息(講員:汪川生牧師)
基督門徒訓練神學院20121002週會信息(講員:汪川生牧師)
 
0904李耕心牧師─人生啊!帥不帥!
0904李耕心牧師─人生啊!帥不帥!0904李耕心牧師─人生啊!帥不帥!
0904李耕心牧師─人生啊!帥不帥!
 
0414李耕心牧師─使命必達
0414李耕心牧師─使命必達0414李耕心牧師─使命必達
0414李耕心牧師─使命必達
 
用喜樂彩繪人生
用喜樂彩繪人生用喜樂彩繪人生
用喜樂彩繪人生
 
0608李耕心牧師─〝我〞存在
0608李耕心牧師─〝我〞存在0608李耕心牧師─〝我〞存在
0608李耕心牧師─〝我〞存在
 
聽見上帝的聲音 高雄信愛教會 20150419主日信息
聽見上帝的聲音 高雄信愛教會 20150419主日信息聽見上帝的聲音 高雄信愛教會 20150419主日信息
聽見上帝的聲音 高雄信愛教會 20150419主日信息
 
1225李耕心牧師─來生之間
1225李耕心牧師─來生之間1225李耕心牧師─來生之間
1225李耕心牧師─來生之間
 
0925李耕心牧師─善莫〝大〞焉
0925李耕心牧師─善莫〝大〞焉0925李耕心牧師─善莫〝大〞焉
0925李耕心牧師─善莫〝大〞焉
 

Similar to Arduino cereri httpgetpost

Similar to Arduino cereri httpgetpost (20)

Curs gratuitarduino lectia12-conexiunewifi-googledocs
Curs gratuitarduino lectia12-conexiunewifi-googledocsCurs gratuitarduino lectia12-conexiunewifi-googledocs
Curs gratuitarduino lectia12-conexiunewifi-googledocs
 
Curs gratuitarduino lectia8-comunicareethernet
Curs gratuitarduino lectia8-comunicareethernetCurs gratuitarduino lectia8-comunicareethernet
Curs gratuitarduino lectia8-comunicareethernet
 
Tice usb 1
Tice usb 1Tice usb 1
Tice usb 1
 
Reteaua internet
Reteaua internetReteaua internet
Reteaua internet
 
Rețeaua Internet.ppt
Rețeaua Internet.pptRețeaua Internet.ppt
Rețeaua Internet.ppt
 
Rețeaua Internet.ppt
Rețeaua Internet.pptRețeaua Internet.ppt
Rețeaua Internet.ppt
 
Programarea aplicațiilor distribuite
Programarea aplicațiilor distribuiteProgramarea aplicațiilor distribuite
Programarea aplicațiilor distribuite
 
XAMPP
XAMPPXAMPP
XAMPP
 
XAMPP
XAMPPXAMPP
XAMPP
 
XAMPP
XAMPPXAMPP
XAMPP
 
Comunicarea in AS3
Comunicarea in AS3Comunicarea in AS3
Comunicarea in AS3
 
Ce este site-Serverh Webopedia
Ce este site-Serverh WebopediaCe este site-Serverh Webopedia
Ce este site-Serverh Webopedia
 
Reteaua internet
Reteaua internetReteaua internet
Reteaua internet
 
Oauth vs open id
Oauth vs open idOauth vs open id
Oauth vs open id
 
0notiuni generale internet
0notiuni generale internet0notiuni generale internet
0notiuni generale internet
 
0notiuni internet
0notiuni internet0notiuni internet
0notiuni internet
 
48892700 invatam-php
48892700 invatam-php48892700 invatam-php
48892700 invatam-php
 
6 protocoale de retea
6 protocoale de retea6 protocoale de retea
6 protocoale de retea
 
Patrascu Mihaela Hanelore Conceptul World Wide Web
Patrascu Mihaela Hanelore Conceptul World Wide Web Patrascu Mihaela Hanelore Conceptul World Wide Web
Patrascu Mihaela Hanelore Conceptul World Wide Web
 
Laborator 5
Laborator 5Laborator 5
Laborator 5
 

More from Iulius Bors

Set prizecomandatedinarduino
Set prizecomandatedinarduinoSet prizecomandatedinarduino
Set prizecomandatedinarduinoIulius Bors
 
Raspberry pi wirelesshotspot
Raspberry pi wirelesshotspotRaspberry pi wirelesshotspot
Raspberry pi wirelesshotspotIulius Bors
 
Raspberry piuln2803
Raspberry piuln2803Raspberry piuln2803
Raspberry piuln2803Iulius Bors
 
Raspberry pi timelapse
Raspberry pi timelapseRaspberry pi timelapse
Raspberry pi timelapseIulius Bors
 
Raspberry pi lcd-shield20x4
Raspberry pi lcd-shield20x4Raspberry pi lcd-shield20x4
Raspberry pi lcd-shield20x4Iulius Bors
 
Raspberry pi bmp085blueedition
Raspberry pi bmp085blueeditionRaspberry pi bmp085blueedition
Raspberry pi bmp085blueeditionIulius Bors
 
Raspberry pi firmata - arduino
Raspberry pi   firmata - arduinoRaspberry pi   firmata - arduino
Raspberry pi firmata - arduinoIulius Bors
 
Programare in prolog_pentru_inteligenta_artificiala
Programare in prolog_pentru_inteligenta_artificialaProgramare in prolog_pentru_inteligenta_artificiala
Programare in prolog_pentru_inteligenta_artificialaIulius Bors
 
Motoare pascupasarduinoeasydriver
Motoare pascupasarduinoeasydriverMotoare pascupasarduinoeasydriver
Motoare pascupasarduinoeasydriverIulius Bors
 
Curs gratuitarduino lectia15-seismografcuexcel
Curs gratuitarduino lectia15-seismografcuexcelCurs gratuitarduino lectia15-seismografcuexcel
Curs gratuitarduino lectia15-seismografcuexcelIulius Bors
 
Curs gratuitarduino lectia14-analogieelectricitatecurgereafluidelor-proiect-f...
Curs gratuitarduino lectia14-analogieelectricitatecurgereafluidelor-proiect-f...Curs gratuitarduino lectia14-analogieelectricitatecurgereafluidelor-proiect-f...
Curs gratuitarduino lectia14-analogieelectricitatecurgereafluidelor-proiect-f...Iulius Bors
 
Curs gratuitarduino lectia13-mousesitastatura
Curs gratuitarduino lectia13-mousesitastaturaCurs gratuitarduino lectia13-mousesitastatura
Curs gratuitarduino lectia13-mousesitastaturaIulius Bors
 
Curs gratuitarduino lectia11-muzicacuarduino
Curs gratuitarduino lectia11-muzicacuarduinoCurs gratuitarduino lectia11-muzicacuarduino
Curs gratuitarduino lectia11-muzicacuarduinoIulius Bors
 
Curs gratuitarduino lectia10-lcd-uri
Curs gratuitarduino lectia10-lcd-uriCurs gratuitarduino lectia10-lcd-uri
Curs gratuitarduino lectia10-lcd-uriIulius Bors
 
Curs gratuitarduino lectia9-senzoriatmosferici
Curs gratuitarduino lectia9-senzoriatmosfericiCurs gratuitarduino lectia9-senzoriatmosferici
Curs gratuitarduino lectia9-senzoriatmosfericiIulius Bors
 
Curs gratuitarduino lectia7-senzoridistanta
Curs gratuitarduino lectia7-senzoridistantaCurs gratuitarduino lectia7-senzoridistanta
Curs gratuitarduino lectia7-senzoridistantaIulius Bors
 
Curs gratuitarduino lectia6-senzoriforta
Curs gratuitarduino lectia6-senzorifortaCurs gratuitarduino lectia6-senzoriforta
Curs gratuitarduino lectia6-senzorifortaIulius Bors
 
Curs gratuitarduino lectia5-accelerometre
Curs gratuitarduino lectia5-accelerometreCurs gratuitarduino lectia5-accelerometre
Curs gratuitarduino lectia5-accelerometreIulius Bors
 
Curs gratuitarduino lectia4-modalitati decomunicare
Curs gratuitarduino lectia4-modalitati decomunicareCurs gratuitarduino lectia4-modalitati decomunicare
Curs gratuitarduino lectia4-modalitati decomunicareIulius Bors
 
Curs gratuitarduino lectia3-proiectesimple-1
Curs gratuitarduino lectia3-proiectesimple-1Curs gratuitarduino lectia3-proiectesimple-1
Curs gratuitarduino lectia3-proiectesimple-1Iulius Bors
 

More from Iulius Bors (20)

Set prizecomandatedinarduino
Set prizecomandatedinarduinoSet prizecomandatedinarduino
Set prizecomandatedinarduino
 
Raspberry pi wirelesshotspot
Raspberry pi wirelesshotspotRaspberry pi wirelesshotspot
Raspberry pi wirelesshotspot
 
Raspberry piuln2803
Raspberry piuln2803Raspberry piuln2803
Raspberry piuln2803
 
Raspberry pi timelapse
Raspberry pi timelapseRaspberry pi timelapse
Raspberry pi timelapse
 
Raspberry pi lcd-shield20x4
Raspberry pi lcd-shield20x4Raspberry pi lcd-shield20x4
Raspberry pi lcd-shield20x4
 
Raspberry pi bmp085blueedition
Raspberry pi bmp085blueeditionRaspberry pi bmp085blueedition
Raspberry pi bmp085blueedition
 
Raspberry pi firmata - arduino
Raspberry pi   firmata - arduinoRaspberry pi   firmata - arduino
Raspberry pi firmata - arduino
 
Programare in prolog_pentru_inteligenta_artificiala
Programare in prolog_pentru_inteligenta_artificialaProgramare in prolog_pentru_inteligenta_artificiala
Programare in prolog_pentru_inteligenta_artificiala
 
Motoare pascupasarduinoeasydriver
Motoare pascupasarduinoeasydriverMotoare pascupasarduinoeasydriver
Motoare pascupasarduinoeasydriver
 
Curs gratuitarduino lectia15-seismografcuexcel
Curs gratuitarduino lectia15-seismografcuexcelCurs gratuitarduino lectia15-seismografcuexcel
Curs gratuitarduino lectia15-seismografcuexcel
 
Curs gratuitarduino lectia14-analogieelectricitatecurgereafluidelor-proiect-f...
Curs gratuitarduino lectia14-analogieelectricitatecurgereafluidelor-proiect-f...Curs gratuitarduino lectia14-analogieelectricitatecurgereafluidelor-proiect-f...
Curs gratuitarduino lectia14-analogieelectricitatecurgereafluidelor-proiect-f...
 
Curs gratuitarduino lectia13-mousesitastatura
Curs gratuitarduino lectia13-mousesitastaturaCurs gratuitarduino lectia13-mousesitastatura
Curs gratuitarduino lectia13-mousesitastatura
 
Curs gratuitarduino lectia11-muzicacuarduino
Curs gratuitarduino lectia11-muzicacuarduinoCurs gratuitarduino lectia11-muzicacuarduino
Curs gratuitarduino lectia11-muzicacuarduino
 
Curs gratuitarduino lectia10-lcd-uri
Curs gratuitarduino lectia10-lcd-uriCurs gratuitarduino lectia10-lcd-uri
Curs gratuitarduino lectia10-lcd-uri
 
Curs gratuitarduino lectia9-senzoriatmosferici
Curs gratuitarduino lectia9-senzoriatmosfericiCurs gratuitarduino lectia9-senzoriatmosferici
Curs gratuitarduino lectia9-senzoriatmosferici
 
Curs gratuitarduino lectia7-senzoridistanta
Curs gratuitarduino lectia7-senzoridistantaCurs gratuitarduino lectia7-senzoridistanta
Curs gratuitarduino lectia7-senzoridistanta
 
Curs gratuitarduino lectia6-senzoriforta
Curs gratuitarduino lectia6-senzorifortaCurs gratuitarduino lectia6-senzoriforta
Curs gratuitarduino lectia6-senzoriforta
 
Curs gratuitarduino lectia5-accelerometre
Curs gratuitarduino lectia5-accelerometreCurs gratuitarduino lectia5-accelerometre
Curs gratuitarduino lectia5-accelerometre
 
Curs gratuitarduino lectia4-modalitati decomunicare
Curs gratuitarduino lectia4-modalitati decomunicareCurs gratuitarduino lectia4-modalitati decomunicare
Curs gratuitarduino lectia4-modalitati decomunicare
 
Curs gratuitarduino lectia3-proiectesimple-1
Curs gratuitarduino lectia3-proiectesimple-1Curs gratuitarduino lectia3-proiectesimple-1
Curs gratuitarduino lectia3-proiectesimple-1
 

Arduino cereri httpgetpost

  • 1. 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 website / blog, printare, sau orice alt mijloc), atat timp cat nu aduci nici un fel de modificari acestuia. Codul sursa din acest document poate fi utilizat in orice fel de scop, de natura comerciala sau nu, fara nici un fel de limitari.
  • 2. Arduino – cereri HTTP de tip GET si POST Despre HTTP. HTTP este un protocol de comunicare intre un client si un server web. In cazul acestui protocol comunicatia incepe de la client, dar sunt si situatii in care server-ul doreste sa initieze comunicatia cu clientul, cum vei descoperi in continuare. In urma unei cereri HTTP prin care un client initiaza o comunicatie cu un server, acesta din urma proceseaza cererea si trimite un raspuns inapoi clientului (dar sunt situatii in care nu este obligatoriu sa trimita raspuns, ci o proceseaza si atat). HTTP, alaturi de alte protocoale este foarte cunoscut deoarece opereaza la nivelul 7 (nivelul Aplicatie) din modelul OSI. Pentru a afla mai multe detalii despre acest protocol sau despre modelul OSI acceseaza link- urile de mai jos. Sunt foarte utile deoarece te ajuta sa iti aprofundezi cunostintele despre retelistica, tipurile de protocoale ce opereaza in spatele unei conexiuni de internet, tipurile de retele ce se pot construi, s.a.m.d. http://support.microsoft.com/kb/103884 http://www.webopedia.com/quick_ref/OSI_Layers.asp http://en.wikipedia.org/wiki/OSI_model http://compnetworking.about.com/cs/designosimodel/g/bldef_osi.htm GET si POST ? Pana aici ai inteles ca un client initiaza o comunicatie HTTP cu un server web. Exista 2 tipuri de cereri pe care un client le poate lansa catre un server si anume: GET si POST. La ce te ajuta pe tine aceste cereri ? Cererile GET si POST te vor ajuta pe tine sa publici informatii pe Internet, mai exact sa programezi o placa Arduino sa citeasca „ceva“ si sa faca vizibila aceasta informatie pe Internet. Ca si exemplu, sa ne gandim la o statie meteo construita cu o placa Arduino. Statia meteo este alcatuita dintr-o multitudine de senzori ce sunt responsabili cu masurarea: temperaturii, presiunii, umiditatii, vitezei/directiei vantului, cantitatii de ploaie, indicelui de confort termic. Asta este doar un exemplu, dar sunt foarte multe situatii la care trebuie sa publici informatiile pe internet. Urmatoarea intrebarea care se poate naste este: cum public aceste informatii pe internet si cum pot sa le vizualizez, ce pot sa fac cu ele sau cum le stochez ? http://www.robofun.ro/forum
  • 3. Cererile GET si POST sunt doar o parte a raspunsului. Aceste cereri te ajuta sa initiezi comunicatia intre statia meteo si server-ul web. Mai departe server-ul web proceseaza informatiile, le publica pe o pagina web si le salveaza intr-o baza de date. Server-ul web proceseaza cererile printr-o pagina scrisa in PHP. Pagina PHP initiaza conexiunea cu baza de date, unde printr-un alt protocol salveaza informatiile procesare prin GET sau POST. Mai departe, o alta pagina initiaza o conexiune cu baza de date, preia informatiile si le afiseaza sub forma unui grafic. Tocmai am descris, sumar, un serviciu de procesare a datelor online (mai este cunoscut sub serviciu Cloud). Totusi sunt 2 cereri si trebuie sa alegi doar una, dar inainte de a face lucrul asta trebuie sa vezi din ce este compusa o cerere: • in primul rand resursa solicitata de client. In cazul statiei meteo, resursa este o cale catre un fisier PHP, fisierul care proceseaza cererea. (exemplu: /meteo/preiadate.php) • tipul cererii: GET sau POST. • Headere HTTP: sunt informatii standard transmite de client catre server. Practic aceste informatii ajuta la identificarea clientului. • Informatiile statiei meteo (temperatura, presiune, umiditate, s.a.m.d). Ca sa intelegi cat mai usor trebuie sa te gandesti la un exemplu. Revenind la statia meteo, aceasta este programata sa publice datele printr-un server. Statia meteo initiaza cereri la intervale regulate de timp (spre exemplu, o data pe minut sau o data la 10 minute) prin GET sau POST. Practic statia meteo specifica serverului urmatoarele lucruri: pagina php care proceseaza temperatura, umiditatea, etc; ii spune serverului la ce tip de cerere sa se astepte, ii da de asemenea detalii despre propria identitate (cine sunt eu, cu ce host vreau sa comunic) si in final ii transfera informatiile (temperatura, umiditate, etc). Daca statia meteo a realizat acest lucru si server-ul web preia corect datele, poti sa spui ca ai reusit sa publici cu succes datele pe un server web. Cum arata o cerere POST scrisa in cod Arduino ? Iata mai jos cum o placa Arduino poate sa initializeze o cerere POST cu un server web. Asa cum am explicat mai sus despre structura cererii HTTP, se poate observa acelasi lucru si in structura cereri POST. Mai exact, daca conexiunea cu serverul s-a realizat cu succes se va executa toata structura de cod cuprinsa intre acolade. Clientul ii spune serverului la ce tip de cerere sa se astepte urmata de adresa paginii php, apoi ii transmite mai multe detalii despre el insasi (adresa host-ului, tipul agentului: Arduino, ce ar trebui sa faca server-ul dupa ce primeste datele adica sa inchida conexiunea, formatul headerului http, dimensiunea informatiilor si in final informatia utila). http://www.robofun.ro/forum
  • 4. if (client.connect(server,80)) { // daca s-a conectat cu succes Serial.println("connected"); // afiseaza pe Monitorul Serial client.println("POST /pagethattakesdata.php HTTP/1.1"); // transmite tipul cererii si adresa paginii care proceseaza cererea client.println("Host: 192.168.2.1"); // adresa host-ului client.println("User-Agent: Arduino/1.0"); // detalii despre client client.println("Connection: close"); // inchide conexiunea client.println("Content-Type: application/x-www-form- urlencoded"); // formatul headerului http client.print("Content-Length: "); // dimensiunea informatiilor client.println(sizeof(date)); client.println(); client.println(String(date)); // informatiile in sine sub forma de String client.println(); client.flush(); // inchide conexiunea client.stop(); } Cum proceseaza o pagina PHP cererea de mai sus ? <?php $file = 'date.txt'; $current = file_get_contents($file); if (isset($_POST['data'])) { $t = $_POST['data']; $current .= $t; file_put_contents($file, $current); } else { $t = 0; $current .= $t; file_put_contents($file, $current); } ?> Ce se intampla cu codul php de mai sus ? La fiecare cerere lansata de statia meteo (placa Arduino) codul este executat si realizeaza urmatorul lucru: deschide un fisier text (a doua linie), preia continutul (a treia linie), verifica daca exista o cerere POST care incepe cu 'data' (a patra linie), daca exista atunci codul salveaza toata informatia intr-o variabila iar mai apoi variabila este stocata in continutul fisierului si apoi rescris in fisierul text (liniile 5, 6 si 7). Daca exista cereri dar care nu sunt identificate cu 'data', atunci codul scrie un 0 in fisierul text. Acel 0 poate fi interpretat ca si eroare, daca este cazul. http://www.robofun.ro/forum
  • 5. Cum testez codul de mai sus ? Primul lucru pe care trebuie sa il faci este sa instalezi un server Apache, un compilator PHP, o si o baza de date MySQL. Pentru simplitate iti recomand utilitarul XAMPP, pe care il poti descarca si instala de la adresa de mai jos: http://www.apachefriends.org/ro/index.html Ai la dispozitie varianta pentru Windows, Linux si Apple. Descarca utilitarul Notepad++ si creeaza o pagina PHP. Copiaza codul sursa de mai sus in pagina PHP. Pagina PHP nou creata trebuie salvata la urmatoarea adresa unde ai instalat utilitarul xampp, adica /xampp/htdocs/. http://www.robofun.ro/forum
  • 6. Daca server-ul este pornit si configurat corect, acesta poate primi cereri de la placa Arduino. Asa cum am spus mai sus, tot ce face pagina php care serveste cererile este sa le salveze intr-un fisier text. Daca codul de mai sus functioneaza cu succes, fisierul text va arata sub urmatoarea forma: Tot ce vezi acolo este o succesiune de valori salvate pe spatiul serverului, valori generate de o placa Arduino avand un shield Wifi conectat in pinii acesteia si un senzor de temperatura care la anumite intervale de timp genereaza si o eroare (valorile 85 prezente in fisier). Ce poti realiza tu in continuare ? Afla cum poti salva aceste valori intr-o baza de date ! De asemenea afla cum poti sa generezi un grafic pe baza unui fisier text continand informatii cu privire la temperatura, umiditate, presiune. Poti sa iti creezi un sistem dinamic de prelucrare a datelor studiind link-urile de mai jos: http://blog.protoneer.co.nz/arduino-http-post-requests/ http://www.codetorment.com/2009/11/12/arduino-temperature-and-light-data-logging-and- chartplotting-webmonitor/ http://forum.arduino.cc/index.php?topic=155218.0 https://github.com/ericbenwa/POST-Arduino-Data-Wireless http://www.robofun.ro/forum