Witam, mam zrobiony następujący szkic w załączniku i potrzebuję dołożyć kawałek programu aby Arduino dodatkowo rozsyłało swój czas w sieci lokalnej po określonym porcie. Nie wiem jak to zrobić.
Ocena wątku:
zegar z serwerem czasu
|
19-09-2024, 11:46
(16-09-2024, 20:58)tomis22 napisał(a): Witam, mam zrobiony następujący szkic w załączniku i potrzebuję dołożyć kawałek programu aby Arduino dodatkowo rozsyłało swój czas w sieci lokalnej po określonym porcie. Nie wiem jak to zrobić.
Przede wszystkim musisz przerobić swój program by nie robił 1-minutowych delay.
Czy już wiesz jak chcesz rozsyłać czas?
Normalnie NTP nie rozsyła czasu - to klienci pytają się o czas. Ten program też się pyta.
A skoro masz czekać na pytania, program musi być w stałym nasłuchu na porcie, bo pytania (żądania) mogą przyjść w dowolnej chwili i dobrze byłoby szybko odpowiedzieć.
22-09-2024, 13:29
Ok, moje Arduino ma pełnić rolę "przekaźnika". Tzn ma być klientem który pyta o czas serwery czasu i synchronizuje swój zegar a następnie na zapytanie urządzeń w sieci lokalnej rozsyła ten czas na porcie 123.
Ktoś ma lub wie gdzie znajdę jakiś przykładowy szkic tej drugiej funkcji - czyli nasłuchu i rozsyłania czasu?
Ktoś ma lub wie gdzie znajdę jakiś przykładowy szkic tej drugiej funkcji - czyli nasłuchu i rozsyłania czasu?
23-09-2024, 19:48
(22-09-2024, 13:29)tomis22 napisał(a): Ok, moje Arduino ma pełnić rolę "przekaźnika". Tzn ma być klientem który pyta o czas serwery czasu i synchronizuje swój zegar a następnie na zapytanie urządzeń w sieci lokalnej rozsyła ten czas na porcie 123.Nasłuch i rozsyłanie czasu to nie powinna być jedna funkcja. W funkcji setup trzeba zainicjować znacznik czasu na za (przykładowo) 15 sek (millis() + 15000) i wysłać żądanie o czas do serwera nadrzędnego. A w funkcji loop:
Ktoś ma lub wie gdzie znajdę jakiś przykładowy szkic tej drugiej funkcji - czyli nasłuchu i rozsyłania czasu?
sprawdzić bez czekania czy coś przyszło UDP na port 123
jeśli tak odczytać pakiet i jeśli to żądanie - odpowiedzieć
jeśli odpowiedż - ustawić czas u siebie i ustawić znacznik czasu za 60 sec
jeśli osiągnieto czas (millis) zapamiętany w znaczniku wysłać żadanie i ustawić znacznik za ok 15 sek.
Oczywiście to taki najprostszy schemat.
Dzięki temu będziesz miał wysyłanie żądania czasu co 15 sekund, gdy przyjdzie odpowiedź przestawiamy to na 60 sekund.
To w sumie może nawet pracować na systemie, który nie ma RTC, tylko pamiętany jest czas uruchomienia systemu (wyzerowania millis). Ale z RTC będziesz mógł wystartować system bez internetu, urządzenia podrzędne dostaną czas z RTC głównego, po ewentualnym przywróceniu połączenia z internetem nastąpi korekta.
W kodzie, który załączyłeś składają i rozkładają pakiety NTP "ręcznie" więc bez dokumentacji NTP nic się nie da zmienić.
Oczywiście taka dokumentacja jest dostępna w sieci.
26-09-2024, 21:32
Trochę to wszystko skomplikowane. Rozumiem - z programem muszę poradzić sobie sam. Przykładu podobnego realizującego takie założenia nie mogę znaleźć żeby było prościej. Niestety mam małe doświadczenie z takim programowaniem.
Zarys teoretyczny już jest. Dzięki OscarX za pomoc.
Zarys teoretyczny już jest. Dzięki OscarX za pomoc.
Przeglądający: 1 gości