charsz napisał(a):
Autor watku niech lepiej malymi kroczkami zacznie sobie opanowywac technologie.
Dokładnie właśnie to mam na myśli. Opis całego systemu to tylko ogólna wizja tego, co kiedyś chciałbym osiągnąć. Na razie jestem na etapie tworzenia poszczególnych "cegiełek" w ramach samokształcenia. Mam już parę czujników, takich jak
TUTAJ. Teraz jestem na etapie pisania daemona na RasPi, który będzie pośredniczył w komunikacji i odpowiadał za parę podstawowych funkcji z zakresu automatyki. Potem napiszę jakiś
Prosty skrypt, który da mi dostęp do aktualnych odczytów przez WWW. W międzyczasie może skonstruuję jeszcze jakiś sterownik, który podłączę do tego systemu.
Plany co do bardziej skomplikowanego WebUI albo aplikacji na Androida, to znacznie odleglejsza przyszłość.
![Szczęśliwy :)](https://forum.atnel.pl/images/smilies/icon_e_smile.gif)
Cytuj:
- serwer w C do odbioru danych (zeby przetrenowac forki i czytanie z socketow)
- AVR jako klient
- UDP bym wywalil i przeszedl na TCP
Ja to widzę trochę inaczej. Po pierwsze nie mam zamiaru rezygnować z UDP. Nie widzę powodu, dla którego miałbym męczyć niewielki uC sesją TCP. Po drugie najprostszy stos na AVR-y (Tuxgraphics) ma na tyle ograniczone możliwości w zakresie komunikacji TCP, że przewaga nad UDP jest znikoma.
Inaczej też widzę kierunek komunikacji w tym przypadku. Wolę, żeby to AVR był serwerem i wysyłał odpowiedź po otrzymaniu odpowiedniego requesta. Daemon na RasPi w tym wypadku pełnił będzie funkcję klienta UDP, cyklicznie odpytując o nowe dane. Takie podejście ma kilka zalet:
1) W razie awarii RasPi ciągle mam możliwość ręcznego odczytania każdego czujnika, chociażby za pomocą netcata albo PacketSendera.
2) Mogę łatwo ustalić częstotliwość odświeżania danych.
Tak więc daemon będzie klientem UDP dla czujników na AVR-ach, a także serwerem TCP dla wyższej warstwy.
Cytuj:
Opanowanie fork, obsluga TCP dla kogos kto ogarnia C to pare dni/pare godzin zalezy ile ma czasu dziennie na nauke.
Na chwilę obecną nie mam większych problemów z obsługą klienta UDP i TCP w C. Podpierając się przykładami z Sieci napisałem już funkcję odczytującą dane z czujnika. Wygląda ona następująco:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Z klientem TCP miałem do czynienia podczas innego ćwiczenia - napisałem prosty program, który komunikuje się z serwerem MPD, parsuje dane o aktualnie odtwarzanej muzyce i wyświetla takie informacje jak tytuł czy wykonawca na wyświetlaczu 2x16 (podpiętym do RasPi).
Cytuj:
Takie cwiczenie daje fajna baze wiedzy o systemie, troche o protokolach sieciowych ale przyszlosciowo niestety nie jest najlepszym rozwiazaniem, bo za chwile moze sie okazac ze bedzie potrzebna baza danych, cos do rysowania wykresow, jakiegos gui do zarzadzania.
Jedno nie wyklucza drugiego. Bazę danych będzie można w przyszłości podpiąć do tego daemona, a GUI czy rysowaniem wykresów niech się już zajmie skomunikowana z nim wyższa warstwa (webaplikacja, aplikacja na androida itp.).
Cytuj:
Co do alarmow to nic nie stoi na przeszkodzie zrobienie jak na AVR:
- jeden alarm liczacy (mili)sekundy
- w petli glownej sprawdzasz wartosc licznika i uruchamiasz funkcje wtedy kiedy potrzebujesz
Tak robiłem to do tej pory. Czyli to jest prawidłowe podejście?
Nie ma pod Linuksem jakiegoś rozwiązania, które pozwalałoby to zrobić o wiele prościej, np. rejestrując wiele funkcji,. które mają się wykonywać w różnych odstępach czasu?
mokrowski napisał(a):
A, i jeśli możesz, zrezygnuj z UDP. UDP jest protokołem bez potwierdzeń i zawodnym i będziesz zdziwiony że jak coś włączysz... to się nie włączyło
![Szczęśliwy :-)](https://forum.atnel.pl/images/smilies/icon_e_smile.gif)
W moim przypadku nie jest to żadnym problemem. Po pierwsze do tej pory jeszcze ani razu mi się nie zdarzyło, żeby jakiś pakiet nie dotarł.
Po drugie po stronie AVR soft napisany jest w taki sposób, by po wykonaniu operacji zawsze była odsyłana odpowiedź z informacją o stanie po wykonaniu tej operacji. Jeśli nie dostanie się informacji zwrotnej wiadomo, że operację trzeba powtórzyć.
Cytuj:
Proponuję zacząć pisać bo jak pytałeś o timery, to jeszcze kawałek drogi przed tobą
![Szczęśliwy :-)](https://forum.atnel.pl/images/smilies/icon_e_smile.gif)
Na razie nic nie stoi na przeszkodzie, żeby robić to na timerach, tak jak w AVR?
To też jest dobre podejście?
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Tylko czy takie podejście nie będzie przeszkodą w obsłudze serwera TCP?