TCP IP i mikrokontrolery, cz.4.pdf

(607 KB) Pobierz
108-110_tcp_cz4.indd
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-
nie–odpowiedź. Klient żąda prze-
słania strony z serwera www, od-
powiedzią jest przesłanie strony do
klienta. Protokół HTTP wykorzystuje
port o numerze 80. Po udzieleniu
odpowiedzi na zapytanie klienta
połączenie jest zrywane do czasu
otrzymania następnego zapytania.
W zapytaniach wykorzystuje się kil-
ka metod jak: GET , HEAD , POST ,
PUT itp. W przykładowej aplikacji
będą wykorzystywane głównie meto-
dy GET , HEAD oraz POST . Metoda
GET jest wykorzystana w zapytaniu
do żądania przesłania strony www
o określonym adresie. Podobna do
GET jest metoda HEAD , która nie
zwraca do klienta treści przesyłki.
Inaczej jest z metodą POST (wy-
korzystywaną podczas przesyłania
danych z formularzy) pozwalająca
żądać od serwera przyjęcia załą-
czonych danych jako nowej, skiero-
wanej do niego publikacji. Protokół
HTTP jest prosty w działaniu. Ser-
wer po otrzymaniu np. metody GET
z adresem strony, wysyła do klienta
(przeglądarki) ciąg znaków strony
www napisanej np. w HTML. W ra-
mach tego przykładu zostanie przed-
stawiona aplikacja serwera HTTP,
który na zapytanie klienta (wysła-
nie adresu /index.htm) wysyła stro-
nę powitalną, na której umieszcza
zmierzoną przez niego czujnikiem
DS18B20 temperaturę. Dodatkowo
Listingi do artykułu
są umieszczone na płycie
CD-EP6/2006B oraz na stronie
http://download.ep.com.pl
Jak mówi stare przysłowie: „co dwie głowy to nie jedna”. A gdy
głów tych będą tysiące, a nawet miliony? Aż strach pomyśleć.
Tymczasem taką globalną siłę intelektu mamy dziś w zasięgu
ręki, ba – nawet z niej korzystamy. Wszystko za pośrednictwem
terabajtów informacji, które w każdej sekundzie przesyłane są
olbrzymią siecią informatyczną oplatającą całą kulę ziemską.
z poziomu przeglądarki umożliwia
wysłanie (z wykorzystaniem formula-
rza i metody POST ) danych o stanie
diody LED (możliwe włączenie lub
wyłączenie diody LED). W serwerze
HTTP jest także możliwość włącze-
nia autoryzacji poprzez ustawienie
odpowiedniej stałej. Aby otrzymać
żądaną stronę należy w takim przy-
padku podać nazwę użytkownika
i hasło. Do zestawu TCP/IP zo-
stał dołączony czujnik temperatury
DS18B20 oraz dioda LED w sposób
pokazany na rys. 16 . Na wyświetla-
czu LCD zestawu będzie wyświetla-
ny komunikat powitalny oraz zmie-
rzona temperatura. Dodatkowe in-
formacje o pracy serwera będą tak-
że wysyłane przez interfejs RS232
do komputerowego terminala. Na
list. 8 przestawiono program pracu-
jący jako serwer HTTP. W pierwszej
kolejności konfigurowany jest wy-
świetlacz LCD oraz moduł TCP/IP.
Linia, do której została dołączona
dioda LED oraz linia będąca magi-
stralą 1Wire jest konfigurowana jako
wyjście. W programie występuje jed-
na procedura Pom_temp służąca do
odczytu temperatury z termometru
DS18B20. W tej procedurze w pierw-
szej kolejności wysyłany jest rozkaz
pomiaru. Po opóźnieniu ok. 1 se-
kundy następuje odczyt temperatu-
ry oraz odpowiednia jej konwersja
Rys. 17. Okno autoryzacji
do dokładności równej 1 o C. War-
tość zmierzonej temperatury zosta-
je zapisana w postaci tekstowej do
zmiennej Temperature . W programie
występuje stała Authenticate . Jeśli
ma wartość równą 1, przy dostęp-
nie do strony www będzie dodat-
kowo przeprowadzana autoryzacja.
Aby otrzymać stronę www, należy
podać login oraz hasło. Instrukcje
obsługujące protokół HTTP działają
w nieskończonej pętli do–loop . In-
strukcja wyboru case jest identycz-
na jak w poprzednich programach.
Ponieważ aplikacja pracuje jako
serwer, gniazdo zostaje otwarte do-
piero po sprawdzeniu statusu. Jeśli
gniazdo jest zamknięte ( Sock_clo-
sed ), następuje otwarcie gniazda
z portem 80 charakterystycznym dla
Rys. 16. Sposób dołączenia czujnika
temperatury DS18B20 oraz diody LED
do zestawu TCP/IP
108
Elektronika Praktyczna 7/2006
649299709.006.png 649299709.007.png 649299709.008.png 649299709.009.png 649299709.001.png
K U R S
Rys. 18. Wygląd pobranej z serwera strony WWW
ne w formacie Base64 .
W opisywanym przy-
kładzie loginem jest
test i hasłem jest rów-
nież test . W dalszej
kolejności z otrzyma-
nych danych odczyty-
wany jest login i hasła
i dekodowane funkcją
base64dec . Jeśli login
i hasło są identyczne
z tymi, które zapisa-
no w programie, to
zmiennej Bauth zostaje
przypisana wartość 1
(wyłączenie ponownej
autoryzacji). Także do
zmiennej Ipcon zostaje zapisany
adres IP klienta. Jest on zapamię-
tywany, aby po odświeżeniu strony
nie była przeprowadzana ponowna
autoryzacja, aż do zamknięcia prze-
glądarki www. Po przeprowadzonej
poprawnie autoryzacji, do przeglą-
darki zostaje wysłane polecenie
o kodzie 200 informujące, że będzie
wysyłana strona www. W przypadku
wyłączonej autoryzacji także będzie
wysyłane identyczne polecenie. Po
wysłaniu tego typu polecenia, na-
stępuje skok do podprogramu struc ,
w którym jest wysyłana strona
www. Do klienta najpierw należy
wysłać informację o tym, ile danych
będzie wysyłanych, po czy można
wysłać samą stronę www. Przed
wysłaniem strony www, do prze-
glądarki jest wysyłany komunikat
Content–Type: text/html , informujący
o formie zapisu strony www (zapis
w języku HTML). W pierwszej kolej-
ności sprawdzany jest adres żądanej
strony www. Jeśli jest identyczny
z /index.htm , to wysyłana jest stro-
na www, przy czym w pierwszej
kolejności obliczana jest liczba da-
nych, jaka będzie wysyłana do
przeglądarki. Liczba danych jest ob-
liczana z wykorzystaniem instrukcji
Len . Obliczenia są prowadzone aż
do napotkania tekstu końca strony
</body></html> . Liczba wysy-
łanych danych jest zapisywana
w zmiennej wsize . Jest ona wy-
syłana za komunikatem Content–
–Length: . Na liczbę wysyłanych da-
nych mają wpływ nie tylko dane
zapisane w HTML samej strony, ale
uwzględniana jest też wartość zmie-
rzonej temperatury oraz stan diody
LED. Strona www została zapisana
w pamięci programu za pomocą in-
strukcji data . Jest ona identyfikowa-
na etykietą www. Do odczytu tych
danych wykorzystywane są instruk-
cje restore oraz read . Po wysłaniu
do przeglądarki liczby przesyłanych
danych następuje wysłanie strony
www odczytywanej kolejno z pamię-
ci programu. W kod strony podczas
jej wysyłania wplatana jest wartość
temperatury oraz stan diody LED.
W przypadku otrzymania strony
www o nazwie innej niż /index.htm ,
wysyłana jest strona www, która
powoduje przekierowanie strony na
adres /index.htm . Tak jak w przy-
padku głównej strony, najpierw ob-
liczana jest i wysyłana liczba da-
nych, a następnie sama strona www
informująca o przekierowaniu. W ko-
dzie HTML instrukcja:
meta HTTP–EQUIV=”refresh”
CONTENT=”5”
powoduje, że strona www bę-
dzie automatycznie odświeżana co
5 sekund. Znaki o kodzie ASCII
034 to znaki cudzysłowia (”). Wspo-
minaliśmy wcześniej o możliwości
sterowania przez serwer diodą LED
z poziomu przeglądarki. Wykorzysta-
no do tego celu przyciski wysłania
formularza przy pomocy metody
POST . Instrukcje zapisane w HTML
realizujące wysłanie formularza
z komunikatem zapalenia diody LED
są następujące:
<form method=”post”>
<input type=”hidden”
name=”ledon”>
<input type=”submit value=”LED
ON”><br><br></form>
Dla przycisku wyłączającego dio-
dę LED, instrukcje będą podobne,
z tym że wyraz ledon zostanie za-
stąpiony wyrazem ledoff . Naciśnię-
cie przycisku spowoduje wysłanie
do serwera zapytania z wykorzy-
staniem metody POST . Po wykry-
ciu przez serwer tej metody wy-
konywany jest podprogram page ,
a zmiennej Bcmd zostaje przypisa-
na wartość 2. W przypadku metody
POST wykrywany jest komunikat
Content–Length: z którym związana
jest liczba wysłanych przez prze-
glądarkę danych. Liczba wysłanych
danych z przeglądarki jest zapisy-
wana do zmiennej Bcontent . Jeśli
zmienna Bcmd jest równa 2, przy
metodzie POST po instrukcjach au-
toryzacji następuje odczyt danych
wysłanych po naciśnięciu przycisku
wysyłającego formularz. Wysłane
dane są odczytywane do zmiennej
Buf leżącej w tej samej przestrzeni
adresowej pamięci mikrokontrolera
co zmienna s . Liczbę odbieranych
protokołu HTTP. Kolejna instruk-
cja konfiguruje otwarte gniazdo do
pracy w trybie serwera (nasłuchu).
W przypadku otrzymania statusu
Sock_close_wait , otwarte gniazdo
zostaje zamknięte, co ma miejsce
po wysłaniu strony www do klien-
ta. Po otrzymaniu statusu Sock_es-
tablished świadczącego o żądaniu
klienta, sprawdzany jest jego adres
IP (pobrany za pomocą instruk-
cji getdstip ) z adresem znajdującym
się w zmiennej Ippon . Jeśli adresy
są różne, zmienna Bauth przyjmuje
wartość 0. Porównanie adresów jest
wykonywane, aby autoryzacja była
jednorazowa dla danego klienta,
a nie wymagana po każdorazowym
odświeżeniu strony www w prze-
glądarce. W dalszej części programu
sprawdzane jest czy są jakieś dane
do odebrania. Jeśli są, sprawdza-
na jest metoda zapytania. Jeśli jest
to GET lub HEAD , zmienna BCMD
przyjmuje wartość 1 oraz następuje
skok do podprogramu page . W tym
podprogramie z otrzymanych danych
z przeglądarki zostaje odczytana na-
zwa żądanej strony www. Nazwa
żądanej strony zostaje zapisana do
zmiennej Shtml . Jeśli autoryzacja
zostaje włączona i sprawdzane ad-
resy IP są różne (zmienna Bauth
wynosi 0), do przeglądarki klienta
jest wysyłane polecenie o kodzie
401, będące żądaniem autoryzacji.
W kolejnej linii wysyłana jest na-
zwa serwera, który żąda autoryzacji.
Będzie ona wyświetlana w okienku
autoryzacji, które zostało pokazane
na rys. 17 . Po wysłaniu informacji
o autoryzacji, następuje ponowne
oczekiwanie na dane od klienta. Je-
śli w otrzymanych danych znajdu-
je się tekst Authorization: Basic , to
znaczy że otrzymano z przeglądarki
nazwę użytkownika i hasło kodowa-
Elektronika Praktyczna 7/2006
109
649299709.002.png 649299709.003.png
K U R S
Rys. 19. Postać informacji wysłanych przez mikrokontroler do terminala
podczas działania serwera HTTP
Na rys. 19
przedstawio-
no informa-
cje wysłane
przez mi-
krokontroler
do terminala
podczas dzia-
łania serwe-
ra HTTP. Na
podstawie
opisanego
wyżej ser-
wera HTTP
pokazano
jak wykorzystując język
HTML zaprezentować na
stronie www informacje
uzyskane z czujnika tem-
peratury oraz jak można
sterować układem wyko-
nawczym, którym wcale
nie musi być dioda LED
– równie dobrze może to
być np. przekaźnik, czy
triak załączający urządze-
nie o większym obciąże-
niu.
cjach (po odpowiednich
przeróbkach). Dokładniej-
szych informacji o proto-
kołach TCP i UDP należy
szukać w dokumentach
RFC. W artykule nie wy-
czerpano wszystkich za-
gadnień. Nie przedstawio-
no także wszystkich moż-
liwych instrukcji zwią-
zanych z modułem TCP,
a dokładnie biblioteką
tcpip.lbx jak np.: getdst-
port , która umożliwia od-
czyt portu podłączonego
klienta, udpwrite wysyłają-
ca protokołem UDP dane
czy instrukcji maketcp,
która formatuje adres IP
do zmiennej LONG. Pod-
czas testów programów
bardzo pomocny okazuje
się komputerowy terminal
oraz program easytcp.exe .
Jeśli Czytelnicy będą
zainteresowani tą tematy-
ką, w przyszłości zostaną
przedstawione kolejne apli-
kacje, jak serwer DHCP
czy FTP, a także aplikacje
umożliwiające połączenie
się z Ethernetem czy In-
ternetem za pomocą naj-
prostszego mikrokontrolera
wykorzystującego do tego
interfejs I 2 C (potrzebnych
jest tylko kilka linii mi-
krokontrolera). Tego typu
komunikację umożliwia
wykorzystywany w artyku-
le moduł IIM7000A lub
IIM7010. Prosimy o listy
w tej sprawie.
Marcin Wiązania, EP
marcin.wiazania@ep.com.pl
danych wskazuje zmienna
Bcontent . Jeśli otrzymano
tekst ledon , dioda LED
zostaje zapalona, a jeśli le-
doff dioda zostaje zgaszo-
na. Temperatura jest mie-
rzona zawsze po wysłaniu
strony www. W tym cza-
sie jest także wyświetla-
na na wyświetlaczu LCD.
Aby pobrać stronę www
z serwera, w przeglądarce
należy wpisać następujący
adres: http://192.168.1.8/
index.html
Po zalogowaniu
(rys. 17) zostaje wyświe-
tlona strona www, która
automatycznie jest od-
świeżana co 5 sekund.
Na rys. 18 przedstawiono
wygląd pobranej z serwera
strony www. Wyświetla-
na jest na niej zmierzo-
na temperatura oraz stan
diody LED. Przycisk LED
ON włącza diodę LED,
a LED OFF wyłącza ją.
Podsumowanie
Wykorzystywanie
Ethernetu oraz Interne-
tu w wielu nietypowych
aplikacjach będzie się co-
raz bardziej rozpowszech-
niało. Już dziś można
w prosty sposób dołączyć
do sieci mikrokontroler 8–
–bitowy, co zostało przed-
stawione w przykładach.
Miejmy nadzieję, że opi-
sane w artykule programy
wykorzystujące protokoły
TCP i UDP wiele wyja-
śniły i że będą przydatne
w wielu własnych aplika-
110
Elektronika Praktyczna 7/2006
649299709.004.png 649299709.005.png
Zgłoś jeśli naruszono regulamin