K U R S Przykłady zastosowań TCP/IP w mikrokontrolerach, część 4 Aplikacja serwera HTTP umożliwiająca odczyt temperatury oraz sterowanie diodą LED przez przeglądarkę Protokół HTTP (HyperText Trans- fer Protocol) jest wykorzystywany do przeglądania stron www. Jest on oparty na mechanizmie pyta- Listingi do artykułu są umieszczone na płycie nie odpowiedz. Klient żąda prze- CD-EP6/2006B oraz na stronie słania strony z serwera www, od- http://download.ep.com.pl powiedzią jest przesłanie strony do klienta. Protokół HTTP wykorzystuje port o numerze 80. Po udzieleniu Jak mówi stare przysłowie: co dwie głowy to nie jedna . A gdy odpowiedzi na zapytanie klienta głów tych będą tysiące, a nawet miliony? Aż strach pomyśleć. połączenie jest zrywane do czasu Tymczasem taką globalną siłę intelektu mamy dziś w zasięgu otrzymania następnego zapytania. ręki, ba nawet z niej korzystamy. Wszystko za pośrednictwem W zapytaniach wykorzystuje się kil- ka metod jak: GET, HEAD, POST, terabajtów informacji, które w każdej sekundzie przesyłane są PUT itp. W przykładowej aplikacji olbrzymią siecią informatyczną oplatającą całą kulę ziemską. będą wykorzystywane głównie meto- dy GET, HEAD oraz POST. Metoda GET jest wykorzystana w zapytaniu z poziomu przeglądarki umożliwia do żądania przesłania strony www wysłanie (z wykorzystaniem formula- o określonym adresie. Podobna do rza i metody POST) danych o stanie GET jest metoda HEAD, która nie diody LED (możliwe włączenie lub zwraca do klienta treści przesyłki. wyłączenie diody LED). W serwerze Inaczej jest z metodą POST (wy- HTTP jest także możliwość włącze- korzystywaną podczas przesyłania nia autoryzacji poprzez ustawienie danych z formularzy) pozwalająca odpowiedniej stałej. Aby otrzymać żądać od serwera przyjęcia załą- żądaną stronę należy w takim przy- czonych danych jako nowej, skiero- padku podać nazwę użytkownika wanej do niego publikacji. Protokół i hasło. Do zestawu TCP/IP zo- HTTP jest prosty w działaniu. Ser- stał dołączony czujnik temperatury wer po otrzymaniu np. metody GET DS18B20 oraz dioda LED w sposób z adresem strony, wysyła do klienta pokazany na rys. 16. Na wyświetla- Rys. 17. Okno autoryzacji (przeglądarki) ciąg znaków strony czu LCD zestawu będzie wyświetla- www napisanej np. w HTML. W ra- ny komunikat powitalny oraz zmie- do dokładności równej 1oC. War- mach tego przykładu zostanie przed- rzona temperatura. Dodatkowe in- tość zmierzonej temperatury zosta- stawiona aplikacja serwera HTTP, formacje o pracy serwera będą tak- je zapisana w postaci tekstowej do który na zapytanie klienta (wysła- że wysyłane przez interfejs RS232 zmiennej Temperature. W programie nie adresu /index.htm) wysyła stro- do komputerowego terminala. Na występuje stała Authenticate. Jeśli nę powitalną, na której umieszcza list. 8 przestawiono program pracu- ma wartość równą 1, przy dostęp- zmierzoną przez niego czujnikiem jący jako serwer HTTP. W pierwszej nie do strony www będzie dodat- DS18B20 temperaturę. Dodatkowo kolejności konfigurowany jest wy- kowo przeprowadzana autoryzacja. świetlacz LCD oraz moduł TCP/IP. Aby otrzymać stronę www, należy Linia, do której została dołączona podać login oraz hasło. Instrukcje dioda LED oraz linia będąca magi- obsługujące protokół HTTP działają stralą 1Wire jest konfigurowana jako w nieskończonej pętli do loop. In- wyjście. W programie występuje jed- strukcja wyboru case jest identycz- na procedura Pom_temp służąca do na jak w poprzednich programach. odczytu temperatury z termometru Ponieważ aplikacja pracuje jako DS18B20. W tej procedurze w pierw- serwer, gniazdo zostaje otwarte do- szej kolejności wysyłany jest rozkaz piero po sprawdzeniu statusu. Jeśli Rys. 16. Sposób dołączenia czujnika pomiaru. Po opóznieniu ok. 1 se- gniazdo jest zamknięte (Sock_clo- temperatury DS18B20 oraz diody LED kundy następuje odczyt temperatu- sed), następuje otwarcie gniazda do zestawu TCP/IP ry oraz odpowiednia jej konwersja z portem 80 charakterystycznym dla Elektronika Praktyczna 7/2006 108 K U R S ne w formacie Base64. danych wykorzystywane są instruk- W opisywanym przy- cje restore oraz read. Po wysłaniu kładzie loginem jest do przeglądarki liczby przesyłanych test i hasłem jest rów- danych następuje wysłanie strony nież test. W dalszej www odczytywanej kolejno z pamię- kolejności z otrzyma- ci programu. W kod strony podczas nych danych odczyty- jej wysyłania wplatana jest wartość wany jest login i hasła temperatury oraz stan diody LED. i dekodowane funkcją W przypadku otrzymania strony base64dec. Jeśli login www o nazwie innej niż /index.htm, i hasło są identyczne wysyłana jest strona www, która z tymi, które zapisa- powoduje przekierowanie strony na no w programie, to adres /index.htm. Tak jak w przy- zmiennej Bauth zostaje padku głównej strony, najpierw ob- przypisana wartość 1 liczana jest i wysyłana liczba da- Rys. 18. Wygląd pobranej z serwera strony WWW (wyłączenie ponownej nych, a następnie sama strona www autoryzacji). Także do informująca o przekierowaniu. W ko- protokołu HTTP. Kolejna instruk- zmiennej Ipcon zostaje zapisany dzie HTML instrukcja: cja konfiguruje otwarte gniazdo do adres IP klienta. Jest on zapamię- meta HTTP EQUIV= refresh pracy w trybie serwera (nasłuchu). tywany, aby po odświeżeniu strony CONTENT= 5 W przypadku otrzymania statusu nie była przeprowadzana ponowna powoduje, że strona www bę- Sock_close_wait, otwarte gniazdo autoryzacja, aż do zamknięcia prze- dzie automatycznie odświeżana co zostaje zamknięte, co ma miejsce glądarki www. Po przeprowadzonej 5 sekund. Znaki o kodzie ASCII po wysłaniu strony www do klien- poprawnie autoryzacji, do przeglą- 034 to znaki cudzysłowia ( ). Wspo- ta. Po otrzymaniu statusu Sock_es- darki zostaje wysłane polecenie minaliśmy wcześniej o możliwości tablished świadczącego o żądaniu o kodzie 200 informujące, że będzie sterowania przez serwer diodą LED klienta, sprawdzany jest jego adres wysyłana strona www. W przypadku z poziomu przeglądarki. Wykorzysta- IP (pobrany za pomocą instruk- wyłączonej autoryzacji także będzie no do tego celu przyciski wysłania cji getdstip) z adresem znajdującym wysyłane identyczne polecenie. Po formularza przy pomocy metody się w zmiennej Ippon. Jeśli adresy wysłaniu tego typu polecenia, na- POST. Instrukcje zapisane w HTML są różne, zmienna Bauth przyjmuje stępuje skok do podprogramu struc, realizujące wysłanie formularza wartość 0. Porównanie adresów jest w którym jest wysyłana strona z komunikatem zapalenia diody LED wykonywane, aby autoryzacja była www. Do klienta najpierw należy są następujące: jednorazowa dla danego klienta, wysłać informację o tym, ile danych do odebrania. Jeśli są, sprawdza- Content Type: text/html, informujący Dla przycisku wyłączającego dio- na jest metoda zapytania. Jeśli jest o formie zapisu strony www (zapis dę LED, instrukcje będą podobne, to GET lub HEAD, zmienna BCMD w języku HTML). W pierwszej kolej- z tym że wyraz ledon zostanie za- przyjmuje wartość 1 oraz następuje ności sprawdzany jest adres żądanej stąpiony wyrazem ledoff. Naciśnię- skok do podprogramu page. W tym strony www. Jeśli jest identyczny cie przycisku spowoduje wysłanie podprogramie z otrzymanych danych z /index.htm, to wysyłana jest stro- do serwera zapytania z wykorzy- z przeglądarki zostaje odczytana na- na www, przy czym w pierwszej staniem metody POST. Po wykry- zwa żądanej strony www. Nazwa kolejności obliczana jest liczba da- ciu przez serwer tej metody wy- żądanej strony zostaje zapisana do nych, jaka będzie wysyłana do konywany jest podprogram page, zmiennej Shtml. Jeśli autoryzacja przeglądarki. Liczba danych jest ob- a zmiennej Bcmd zostaje przypisa- zostaje włączona i sprawdzane ad- liczana z wykorzystaniem instrukcji na wartość 2. W przypadku metody resy IP są różne (zmienna Bauth Len. Obliczenia są prowadzone aż POST wykrywany jest komunikat wynosi 0), do przeglądarki klienta do napotkania tekstu końca strony Content Length: z którym związana jest wysyłane polecenie o kodzie