• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
zegar z serwerem czasu
#1
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ć.


Załączone pliki
.txt   zegar.txt (Rozmiar: 21.01 KB / Pobrań: 9)
 
Odpowiedź
#2
(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ć.
 
Odpowiedź
#3
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?
 
Odpowiedź
#4
(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.
Ktoś ma lub wie gdzie znajdę jakiś przykładowy szkic tej drugiej funkcji - czyli nasłuchu i rozsyłania czasu?
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:
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.
 
Odpowiedź
#5
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.
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości