Start z STM32 VL Discovery – 19 — TCP/IP – 4 UDP

Start z STM32 VL Discovery – 19 — TCP/IP – 4 UDP
Razem głosów: 3 co stanowi: 93.33% całości.

ENC28J60

Skoro już obiecałem to niech wam będzie, zrobimy sobie aplikację do naszego Discovery, która będzie komunikować się z naszym układem poprzez UDP. Oczywiście wykorzystamy w tym celu znany nam już kod (kot) serwera www z poprzednich części. Dodatkowo napiszemy sobie aplikację w środowisku MS VisualStudio C# Express.

Wprowadzenie:

Pamiętacie zapewne jak wspominałem UDP, napisałem też że protokół ten jest banalnie prosty. Powodem tego jest fakt iż w UDP nie mamy potwierdzania transmisji (jak to jest w przypadku TCP/IP). Ale niewielkim nakładem sił  możemy sobie potwierdzenie zrobić , a ja postaram się pokazać jak bardzo jest to proste :)

Po mrocznej stronie serwera :P

Od strony sprzętowej nasza Dyskoteka jest połączona z chińskim modułem ENC, który jest podłączony do sieci LAN.  No chyba juz nie muszę pisać … a dobra napiszę ,  jak krowie na rowie , a co …. Aby nawiązać połączenie z modułem opartym o ENC28j60 używamy połączenia 5 wire  (SPI + INT) dzięki czemu dostajemy informacje o otrzymanym pakiecie.  I cała obsługa pakietu może się odbywać w przerwaniu …. (jak w ostatniej części :)

W zasadzie kod obsługi komunikacji UDP jest praktycznie częścią znanego nam już kodu do obsługi pakietów TCP/IP  używanego do komunikacji na porcie 80 czyli HTTP. Kod jest nieco dłuższy ale będziemy mieli 2 w 1 :) , a więc większa wygoda dla nas. Popełnimy więc „KOT” :)

Kod jest jasny i mam nadzieje że nie muszę go dodatkowo tłumaczyć.

W pakiecie UDP możemy wysłać do 220 bajtów w jednym ciągu. W tym przykładzie wysyłamy

komendę „hasło”, która jest oddzielona od polecenia przecinkami. A więc pierwsze w naszym łańcuchu

sprawdzamy hasło, a następnie sprawdzamy czy jest  „t= „, które oznacza początek komendy.

Mamy do dyspozycji 3 opcje (t=1, t=0 oraz t=?), pierwsze 2 służą do zmiany stanu diody LED4,

natomiast 3-cia sprawdza czy naciśnięto przycisk użytkownika.

To wszystko odbywa się po stronie naszego serwera , a co po stronie klienta na PC ??

— A to już całkiem inna historia … zatem do przeczytania za ileś tam taktów procesora :)

 

KILKASET zmarnowanych przerwań i taktów później :

Hehehe, zrobiłem was w bambuko ……

No dobra, nasza testowa aplikacja wygląda tak :

Free Image Hosting at www.ImageShack.us

Jak już wspomniałem aplikacja została napisana w MS VisualStudio C# Express.  Procesu instalacji

i tworzenia projektu chyba nie muszę opisywać. Zakładam więc że macie jakieś podstawy w pracy

z VisualStudio.

Działanie Programu Klienta:

Program jak widać wyżej jest banalnie prosty. Czarne pole obok napisu LED4 po kliknięciu wysyła

komendę t=1 czyli zaświeć LED4, a ponowne kliknięcie t=0 gasi LED4 – oczywiście zmieni się też kolor w aplikacji.

Przyciskiem Sprawdź STAN  sprawdzamy co jest włączone na płytce Discovery , więc jeśli w tym czasie

był naciśnięty USER Button  zmieni sie nam kolor w aplikacji.

Zacznijmy więc od kodu przycisku „Sprawdź Stan”:

Za pomocą 3 linijek kodu:

tworzymy połączenie, gdzie oczekujemy na wysyłanie pakietów UDP z urządzenia , a następnie za pomocą udp.Send(wyslij, wyslij.Lenght) dane będą przesłane przy użyciu pakietów UDP do miejsca docelowego. Serwer otrzyma odpowiedź poprzez:

server_udp_socket.ReceiveFrom(wiadomosc, ref ep),

gdzie ep oznacza po prostu EndPoint. Tak więc kod przejmuje kontrole nad łańcuchem i ustawia widok zgodnie z otrzymanym wynikiem.

Przerwa na kilka taktów procesora :)

Witam po przerwie kontynuacją będzie opis kodu do sterowania LED4, w zasadzie jest on bardzo podobny do wcześniejszego kodu , a jedyną zmiana jest tylko to że w przypadku LED będziemy wysyłać komendę t=0 dla zgaszenia lub t=1 do zaświecenia diody.

 

Tak zatem powinien nasz kod wyglądać :

Jak więc widzicie w ostatnich linijkach kodu sprawdzamy odpowiedzi i aktualizujemy wygląd w aplikacji. W tym miejscu chciałbym też zauważyć iż włączona zapora sieciowa może nam utrudniać połączenie więc najlepiej ją wyłączyć na czas naszych testów.

 

Słowo na koniec

 

To tak do końca nie jest koniec komunikacji w sieci ethernet , temat jest bardzo szeroki i daleki do wyczerpania. Możemy korzystać z niezliczonych możliwości np. synchronizacji czasu przez serwery NTP, wysyłać wiadomości e-mail, odbierać e-maile przez POP3, wysyłać SMSy i wiele innych…….

Tak naprawdę to tylko wstęp do budowy rozległych systemów sieciowych mogących służyć nawet do budowy ethernetowych sterowników Home Inteligence. Jak więc widzicie sami połączeń sieciowych możemy używać w bardzo różny sposób i do różnych celów. Mam nadzieję że choć trochę przybliżyłem wam problematykę połączeń z siecią Ethernet i zainspirowałem do własnych eksperymentów.

Pliki do pobrania:

Aplikacja VS źródło : 

Podziel się na:
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • Blogplay