TCP IP i mikrokontrolery, cz.2.pdf

(722 KB) Pobierz
108-111_tcp_cz2.indd
K U R S
Przykłady zastosowań TCP/IP
w mikrokontrolerach , część 2
Po przedstawieniu wstępnych in-
formacji na temat protokołu TCP/IP
i skonfigurowaniu modułu IIM7000A
do pracy w naszej sieci możemy
przystąpić do konkretnych prób.
Aplikacja wysyłająca
wiadomości e–mail bez
autoryzacji po naciśnięciu
przycisku (protokół SMTP)
Poczta elektroniczna należy chy-
ba do najczęściej wykorzystywa-
nych aplikacji pracujących w TCP/IP.
Adres w poczcie elektronicznej zawie-
ra nazwę konta użytkownika oraz do-
menę usługodawcy internetowego. Do
wysyłania wiadomości e–mail wykorzy-
stywany jest protokół SMTP ( Simple
Mail Transfer Protocol ) zapewniający
przesyłanie listów pomiędzy dwiema
stacjami. Protokół SMTP wykorzystuje
numer portu 25. Określa on zarów-
no format wiadomości jak i metody
przesyłania poczty. Przesyłając pocz-
tę do adresata, aplikacja wysyłająca
posługuje się poleceniami protokołu.
Po zakończeniu transmisji połączenie
pomiędzy aplikacjami jest przerywa-
ne. W przykładzie przedstawionym
niżej zostanie pokazany sposób wy-
słania wiadomości e–mail po naci-
śnięciu jednego z przycisków S1 lub
S2, które występują w zestawie Easy
TCP/IP. Treścią wysyłanej wiadomości
będzie informacja, który przycisk zo-
stał naciśnięty. Wysyłanie wiadomości
przebiega bez autoryzacji, czyli użycia
loginu i hasła. Przyciski S1, S2 zosta-
ły dołączone do zestawu w sposób
pokazany na rys. 2 . Na list. 2 przed-
stawiono program wysyłający wiado-
mość e–mail. Przebieg działania pro-
gramu można śledzić przez interfejs
RS232 z uruchomionym programem
Listingi do artykułu
są umieszczone na płycie
CDEP5/2006 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ą.
terminala. Prędkość transmisji wynosi
19200 bodów. Do terminala wysyłana
jest większość danych otrzymanych
z modułu TCP/IP. Początek progra-
mu jak i konfiguracja modułu TCP/IP
będzie identyczna we wszystkich pre-
zentowanych aplikacjach. W tym przy-
padku linie portów, do których dołą-
czono przyciski zostały skonfigurowa-
ne jako wejścia z rezystorami podcią-
gającymi. W pętli głównej programu
następuje oczekiwanie na naciśnięcie
przycisku S1 lub S2. Po naciśnięciu
któregoś z nich, następuje zapisanie
numeru naciśniętego przycisku do
zmiennej P_s , po czym są wykonywa-
ne instrukcje odpowiedzialne za wy-
słanie wiadomości e–mail. W pierwszej
kolejności są to instrukcje pętli do–lo-
op , która jest opuszczana, gdy j=0 .
Instrukcja getsocket otwiera gniazdo
do komunikacji TCP/IP. Pierwszy para-
metr to numer gniazda. W tym przy-
padku jest to gniazdo numer 0. Ko-
lejny parametr to tryb pracy gniazda.
Dla komunikacji TCP/IP wykorzysty-
wany jest tryb Sock_stream . W przy-
padku UDP będzie wykorzystywany
tryb Sock_sdgrm . Następny parametr
to port używany przez otwierane
Rys. 3. Widok odebranej wiadomości,
która została wysłana przez moduł
Easy TCP/IP
Rys. 2. Sposób dołączenia przycisków
S1 i S2
Rys. 4. Informacje wysłane przez mikrokontroler do terminala podczas transmi-
towania wiadomości e–mail
108
Elektronika Praktyczna 5/2006
649299937.009.png 649299937.010.png 649299937.011.png 649299937.012.png
K U R S
Rys. 5. Widok odebranej wiadomości
e–mail wysłanej z autoryzacją przez
Easy TCP/IP
parametr to numer otwartego gniaz-
da. Drugim jest zmienna, do której
będą trafiać odebrane dane. Możliwe
jest także zastosowanie trzeciego pa-
rametru informującego o liczbie odbie-
ranych danych, mającego znaczenie
tylko przy zmiennych nie będących
ciągami znaków. Odczytywane dane
z modułu TCP/IP są nie tylko prze-
twarzane w programie, ale i wysyłane
do komputerowego terminala. Typowe
połączenie (wysłanie e–maila) składa
się z sześciu etapów, które zostaną
przedstawione na podstawie kolejnych
instrukcji w programie. Po poprawnym
połączeniu serwer poczty wysyła ko-
munikat o kodzie 220. Po rozpoznaniu
tego komunikatu w programie, do ser-
wera wysyłane jest polecenie HELO ,
które rozpoczyna sesję. Polecenie to
zawiera także nazwę konta e–mail,
z którego będzie wysyłana wiadomość.
Znaki 013 i 010 w kodzie ASCII są
znakami potwierdzenia. Wysyłanie da-
nych do TCP/IP umożliwia instrukcja
tcpwrite , której pierwszy parametr to
numer otwartego gniazda. Drugim pa-
rametrem jest zmienna, z której będą
wysyłane dane. Instrukcja ta zwraca
liczbę wysłanych bajtów. Po wysłaniu
do serwera polecenia rozpoczęcia se-
sji, serwer potwierdza jej otrzymanie
komunikatem o kodzie 250. Następnie
wysyłane jest polecenie MAIL FROM:
z adresem e–mail nadawcy wiadomo-
ści. Serwer także i to polecenie po-
twierdza komunikatem o kodzie 250.
Kolejnym poleceniem wysyłanym do
serwera jest RCPT TO: w którym na-
leży podać adresata wiadomości. I to
polecenie serwer potwierdza komuni-
katem o kodzie 250. Kolejne polecenie
DATA umożliwia zapisanie treści wia-
domości e–mail tj. nadawcy, odbiorcy,
tytułu oraz treści. Po wysłaniu tego
polecenia serwer zwraca komunikat
o kodzie 354. W tym przypadku w tre-
ści wiadomości zapisywana jest infor-
macja o naciśniętym przycisku. Zapis
treści wiadomości e–mail kończy się
umieszczeniem znaku kropki (.). Po
zapisaniu treści wiadomości serwer
zwraca komunikat o kodzie 250. Po
zapisaniu wiadomości e–mail wysy-
łane jest do serwera polecenie QUIT
kończące sesję. Serwer to polecenie
potwierdza komunikatem o kodzie 221.
Po otrzymaniu z rejestru kontrolnego
modułu TCP/IP komunikatu Sock_clo-
se_wait , należy zamknąć gniazdo in-
strukcją closesocket , której parametrem
jest numer otwartego gniazda. Komu-
nikat Sock_close_wait jest otrzymywa-
ny, gdy serwer zamyka połączenie.
Po zamknięciu gniazda program prze-
chodzi do oczekiwania na naciśnię-
gniazdo. Ostatni parametr określa do-
datkowe opcje. Wartość 0 oznacza, że
brak jest dodatkowych opcji. Instruk-
cja ta w przypadku otwarcia gniazda
zwraca jego numer. W przeciwnym
przypadku zwracana jest wartość 255.
Jeśli gniazdo zostanie otwarte, wyko-
nywana jest instrukcja socketconnect ,
która służy do nawiązania połączenia
z serwerem TCP/IP. Pierwszy jej pa-
rametr to numer otwartego gniazda.
Następnym parametrem jest adres IP
serwera, z którym nawiązywane jest
połączenie oraz numer portu. Dla pro-
tokołu SMTP port wynosi 25. Adres
IP będzie adresem serwera pocztowe-
go. Adres IP serwera można spraw-
dzić wykonując polecenie:
ping.exe serwer_p
gdzie serwer_p to nazwa serwera
pocztowego. W przypadku nawiązania
połączenia instrukcja zwraca war-
tość 0, w przeciwnym razie zwróci
1. W przypadku uzyskania połącze-
nia wykonywana jest instrukcja soc-
ketstat zwracająca informacje o stanie
danego gniazda. Pierwszym jej para-
metrem jest numer otwartego gniaz-
da, a drugim parametr określający, co
ma zwrócić instrukcja. Przy wartości
0 drugiego parametru zwracana jest
wartość rejestru statusu, czyli stan
gniazda. Zwracana wartość przez te
instrukcje sprawdzana jest w instrukcji
wyboru, która będzie identyczna dla
wielu protokołów TCP/IP. Sprawdzane
są w niej trzy wartości: Sock_establi-
shed informuje o ustabilizowaniu się
połączenia, Sock_close_wait i Sock_clo-
sed informują o zakończeniu połącze-
nia. Przy wartości drugiego parametru
równej 1 zwracana będzie informacja,
ile bajtów można umieścić w buforze,
a przy wartości równej 2 zwracana
będzie liczba danych nieodebranych
z bufora. Po odczytaniu rejestru z in-
formacją Sock_established zgłasza się
serwer, po czym jest już możliwe
wysłanie wiadomości e–mail. Kolej-
na instrukcja socketstat z drugim pa-
rametrem o wartości 2 sprawdza, czy
są jakieś dane do odebrania z bufora.
Do odbierania danych z bufora służy
instrukcja tcpread , w której pierwszy
Rys. 6. Informacje wysłane przez mikrokontroler do terminala podczas wysyła-
nia wiadomości e–mail z autoryzacją
Elektronika Praktyczna 5/2006
109
649299937.001.png 649299937.002.png
K U R S
Rys. 7. Sposób dołączenia diody LED
danych powstaje całkowicie nieczytel-
ny dla człowieka ciąg znaków. W pro-
gramie po wysłaniu do serwera po-
lecenia auth login , otrzymywany jest
komunikat o kodzie 334 z zakodowaną
w Base64 nazwą Username: . Do deko-
dowania informacji zapisanej w Base-
64 służy funkcja base64dec . Wysyła-
na nazwa użytkownika powinna zo-
stać zakodowana do formatu Base64 .
Umożliwia to funkcja base64enc . Po
wysłaniu nazwy użytkownika serwer
zwraca komunikat o kodzie 334 z za-
kodowaną nazwą Password: . Po zako-
dowaniu hasła i jego wysłaniu, serwer
zwraca komunikat o kodzie 235, który
informuje o prawidłowo przeprowadzo-
nej autoryzacji. Dalsze etapy wysyła-
nia wiadomości e–mail są identyczne
jak dla przypadku bez autoryzacji.
Na rys. 5 . przedstawiono widok ode-
branej wiadomości e–mail wysłanej
z autoryzacją przez Easy TCP/IP po
naciśnięciu przycisku S2. Na rys. 6
przedstawiono informacje wysłane
przez mikrokontroler do terminala,
podczas wysyłania wiadomości e–mail
z autoryzacją. Przykład pokazuje, w jak
prosty sposób można wysłać wiado-
mość e–mail pod dowolny adres po
zaistnieniu określonego zdarzenia, np.
awarii jakiegoś urządzenia wykrytej
przez odpowiedni czujnik.
przekazywana w temacie wiadomo-
ści e–mail. Zestaw Easy TCP/IP bę-
dzie pobierał wiadomości z serwera
i w zależności od informacji poda-
nej w temacie będzie sterował diodą
LED dołączoną do niego w sposób
pokazany na rys. 7 . Na wyświetla-
czu LCD będzie prezentowana liczba
e–maili znajdujących się na serwe-
rze oraz informacja z tematu odbie-
ranej wiadomości. Przebieg działania
programu można śledzić także przez
interfejs RS232 z uruchomionym pro-
gramem terminala. Na list. 4 przed-
stawiono program odbierający wia-
domości z serwera POP3, na pod-
stawie których steruje diodą LED.
W pierwszej kolejności w programie
konfigurowany jest moduł TCP/IP,
wyświetlacz LCD oraz linia portu
PB.6 jako wyjście, do którego zo-
stała dołączona dioda LED. Program
realizuje w nieskończonej pętli co 5
sekund połączenie do serwera POP3
sprawdzając czy nie ma wiadomości
do odebrania. Nawiązywanie połą-
czenia z serwerem POP3 przebiega
podobnie jak w przypadku wysyła-
nia wiadomości, z tym że z wyko-
rzystaniem portu 110. Po połączeniu
zgłasza się serwer POP3 wysyłając
komunikat zaczynający się od zna-
ków +OK . W dalszej kolejności wy-
syłane jest polecenie USER z nazwą
użytkownika konta e–mail. Po uzy-
skaniu potwierdzenia ( +OK ) wysyła-
ne jest polecenie PASS z hasłem do
konta e–mail. Zarówno nazwa użyt-
kownika, jak i hasło wysyłane są
w sposób niekodowany. Po otrzyma-
niu komunikatu +OK można rozpo-
cząć odbieranie wiadomości e–mail.
W tym celu wysyłane jest polecenie
STAT , które pozwala określić liczbę
wiadomości przechowywanych na
serwerze. Po wysłaniu tego pole-
cenia serwer wysyła potwierdzenie
(+OK), liczbę wiadomości na ser-
werze oraz ilość zajmowanego przez
nie miejsca na dysku. Po wyfiltro-
waniu z otrzymanych danych infor-
macji o liczbie wiadomości na ser-
werze (dane te są wyświetlane na
wyświetlaczu LCD) następuje odbie-
ranie wiadomości w pętli For . Pętla
wykonywana jest tyle razy, ile na
serwerze jest wiadomości. W przy-
padku braku wiadomości pętla For
nie jest wykonywana. W pętli For
wysyłane jest polecenie TOP , które
odbiera wiadomość (bez kasowa-
nia z serwera). Polecenie to posiada
dwa parametry: numer wiadomości
oraz liczbę odbieranych wierszy.
cie przycisku S1 lub S2. Na rys. 3 .
przedstawiono widok odebranej wia-
domości e–mail wysłanej przez Easy
TCP/IP po naciśnięciu przycisku S2.
Na rys. 4 przedstawiono informacje
wysłane przez mikrokontroler do ter-
minala podczas transmitowania wia-
domości e–mail.
Aplikacja wysyłająca
wiadomości e–mail
z autoryzacją po naciśnięciu
przycisku (protokół SMTP)
Coraz więcej serwerów poczty
podczas wysyłania wiadomości wy-
maga autoryzacji, czyli podania na-
zwy użytkownika i hasła do konta
e–mail. Przedstawiony na list. 3 pro-
gram realizuje to samo, co program
z list. 2, z tą różnicą, że wiadomość
e–mail jest wysyłana z autoryzacją.
Opisane zostaną tylko różnice pomię-
dzy programami z list. 2 i list. 3. Za-
miast polecenia HELO wysyłane jest
polecenie EHLO , będące poleceniem
rozszerzonym. Także w tym przypad-
ku serwer potwierdza otrzymane po-
lecenie komunikatem o kodzie 250.
Następnie do serwera jest wysyłane
polecenie autoryzacji. Występują róż-
ne jego wersje, jak: auth login , auth
plan..., w których login oraz hasło są
kodowane w różny sposób. W przykła-
dzie wybrano polecenie auth login ,
w którym login (nazwa użytkownika)
oraz hasło są zapisywane algoryt-
mem Base64 . Algorytm Base64 służy
do konwersji ciągu bajtów binarnych
do postaci znaków kodu ASCII i jest
często wykorzystywany w TCP/IP do
przesyłania nazw użytkowników oraz
haseł. Base64 pozwala zapisać dane
8–bitowe w formie 6–bitowych liczb.
Dane przeznaczone do zakodowania
dzielone są najpierw na 3–bajtowe
grupy, po czym każda z takich trójek
jest dzielona na cztery 6–bitowe licz-
by. Każda liczba otrzymuje następnie
odpowiednik w postaci jednego znaku.
Przydział znaków odbywa się na pod-
stawie ściśle określonego, 64–znako-
wego alfabetu, będącego podzbiorem
kodów ASCII. W wyniku zakodowania
Aplikacja odbierająca
wiadomości e–mail
z informacją o włączeniu, bądź
wyłączeniu diody LED (POP3)
Protokół POP3 ( Post Office Proto-
col 3 ) jest najpowszechniej stosowa-
ny do odbierania wiadomości e–ma-
il. Serwer POP3 przechowuje pocztę
do czasu, gdy użytkownik połączy
się i odbierze swoje listy. Listy bę-
dące na serwerze można pozostawić
lub skasować po odebraniu. Protokół
POP3 wykorzystuje port 110. W tym
przykładzie zostanie pokazany spo-
sób sterowania diodą LED poprzez
wysłanie wiadomości (możliwe włą-
czenie, bądź wyłączenie diody). In-
formacja o stanie diody LED będzie
Rys. 8. Widok wysyłanej wiadomości
z informacją w temacie, że dioda
LED ma zostać włączona
110
Elektronika Praktyczna 5/2006
649299937.003.png 649299937.004.png
K U R S
Podanie drugiego parametru o war-
tości 0 umożliwia pobranie całej
wiadomości. W dalszej części pę-
tli jest wykrywany tekst Subject: ,
po którym znajduje się informacja,
jaki ma być stan diody LED. Jeśli
odebrano w temacie tekst LED_ON ,
dioda LED zostanie zapalona, nato-
miast w przypadku odebrania w te-
macie tekstu LED_OFF lub dowol-
nego innego, dioda LED zostanie
wyłączona. Zawartość tematu jest
także wyświetlana w drugiej linii
wyświetlacza LCD. Odczyt wiado-
mości e–mail następuje, aż do wy-
krycia znaku kropki (.). Po odczyta-
niu danej wiadomości wysyłane jest
polecenie DELE z numerem odczyta-
nej wiadomości. Polecenie to kasuje
z serwera wiadomość e–mail o poda-
nym numerze. Bez użycia tego po-
lecenia wiadomości e–mail po od-
czytaniu nie będą usuwane z serwe-
ra. Wiadomości e–mail są odczyty-
wane z opóźnieniem 1 sekundy. Po
odczytaniu wszystkich wiadomości
wysyłane jest do serwera polecenie
QUIT , które kończy sesję POP3. Po
rozłączeniu i zamknięciu gniazda
program przecho-
dzi do opóźnienia,
po którym znów
się połączy z ser-
werem POP3. Do-
stępnych jest wie-
le innych poleceń
protokołu POP3
jak: LIST , RETR
czy NOOP , które
nie zostały wyko-
rzystane. Dokład-
ne informacje na
ich temat znajdują
się w dokumentach
RFC. Na rys. 8 .
przedstawiono wi-
dok wysyłanej wia-
domości z informa-
cją w temacie, że dioda LED ma
zostać włączona. Na rys. 9 przed-
stawiono informacje wysłane przez
mikrokontroler do terminala pod-
czas odbierania wiadomości z serwe-
ra POP3. Zaprezentowany przykład
pokazuje prosty sposób sterowania
elementami wykonawczymi za po-
mocą wysyłanej wiadomości e–ma-
il. Łącząc wysyłanie i odbieranie
wiadomości w jedną całość można
uzyskać potwierdzenie wiadomością
e–mail wykonania polecenia wysła-
nego również wiadomością e–mail.
W ostatniej części kursu będzie
mowa o serwerze zapytań, komuni-
kacji za pośrednictwem protokołu
UDP oraz serwerze HTTP.
Marcin Wiązania, EP
marcin.wiazania@ep.com.pl
Zawody Sumo Robotów i Międzynarodowy Festiwal
Robotów CybAiRBot 2006
22 kwietnia na Politechnice Poznańskiej odbyły
się Zawody Sumo Robotów i Międzynarodowy
Festiwal Robotów CybAiRBot 2006. Roboty
startujące w Zawodach Sumo mogą ważyć
maksymalnie 3 kg i mieć rozmiary 20x20 cm.
Muszą to być pojazdy w pełni autonomiczne
i inteligentne, potrafiące samodzielnie odszukać
innego robota i wypchnąć go z ringu. Do
Poznania zjechało się ponad 30 robotów
skonstruowanych głównie przez studentów
uczelni technicznych. Udział w imprezie
wzięli m.in. znani w środowisku „robociarzy”
Demon, Plugawy Oprawca, Bizon, Skorpion,
więc konkurencja była bardzo duża.
W ramach CybAiRBot 2006 odbył się
Konkurs na Najciekawszą Konstrukcję Robota
Amatorskiego. Wziął w niej udział m.in. robot
Torquemax, który przybył w asyście swoich
konstruktorów do Poznania aż z dalekiej
Kolumbii.
Organizatorzy
z a p r o s i l i
na zawody
także inne
roboty. W holu
n o w e g o
c e n t r u m
wykładowego
Politechniki
Poznańskiej
można było
spotkać całą
gamę robotów
m o b l i n y c h
z a r ó w n o
kołowych, jak
i kroczących oraz
gąsienicowych,
praktycznie ze
wszystkich uczelni oraz wielu firm działających
w tej branży. Publiczność mogła poznać m.in.
Inspektora – policyjnego robota do rozbrajania
bomb pracującego na co dzień w poznańskiej
Policji. Gościom usługiwał robot–hostessa
TOKA–3, u którego zawsze znajdzie się trochę
łakoci. Roboty LEGO oraz piesek–robot AIBO
dostarczyły dużo frajdy dzieciom.
Na CybAiRBot można było zobaczyć m.in. jak
dalecy kuzyni robotów – inteligentne systemy
wizyjne radzą sobie z rozpoznawaniem
ludzkich twarzy. Nie zabrakło także
prawdziwych samurajów, którzy pokazali jak
kiedyś w Japonii walczyło się na miecze.
W przerwach można było wysłuchać
wykładów i prezentacji na temat współczesnej
robotyki.
Impreza jest adresowana do szerokiego grona
odbiorców w wieku od 2 do 102 lat i ma za
zadanie popularyzację nowoczesnej techniki
oraz robotyki.
Więcej informacji na www.sumo.put.poznan.pl.
Elektronika Praktyczna 5/2006
111
Rys. 9. Informacje wysłane przez mikrokontroler do ter-
minala podczas odbierania wiadomości z serwera POP3
649299937.005.png 649299937.006.png 649299937.007.png 649299937.008.png
Zgłoś jeśli naruszono regulamin