Niedawno kod czasu z OBK został zmieniony, aby umożliwić więcej źródeł czasu (oprócz dobrze znanego NTP).
Prawdopodobnie najprostszą metodą jest ustawienie czasu OpenBeken na czas urządzenia używanego do uzyskania dostępu do GUI (jest to już w kodzie OBK, tylko nie jest włączone):
Ustawienie czasu urządzenia na czas przeglądarki
Jeśli zdefiniujesz "ENABLE_TIME_PMNTP" w obk_config.h, GUI pokaże dodatkowy przycisk "Set clock to PC time", który ustawi czas na czas komputera/tabletu...:
Robi się to raz, a dokładność zależy od urządzenia: Mój LN882H wydaje się całkiem niezły, w ciągu pół roku dryft wyniósł tylko około 5 minut - jeśli ustawisz go regularnie, możesz utrzymać go jeszcze lepiej.
Ale oczywiście jest więcej rzeczy do zaprezentowania:
Używając RTC DS3231
Obecny jest również sterownik dla DS3231 RTC - tania możliwość dodania zasilanego bateryjnie układu RTC, który może ustawić czas np. podczas uruchamiania.
Jest on włączony w obk_config.h z "#define ENABLE_DRIVER_DS3231 1"
Przydatne w przypadku, gdy urządzenie nie ma dostępu do innego źródła czasu, np. gdy nie ma Internetu, a zatem nie jest możliwe NTP.
Ważna wskazówka, jeśli masz jedno z tych tanich urządzeń zasilanych bateryjnie, takich jak to: Obwód jest zaprojektowany dla baterii wielokrotnego ładowania - jeśli jest używany ze zwykłą CR2032, może to spowodować wysadzenie ogniwa (a może nawet gorzej).
Możesz łatwo sprawdzić, czy "VCC" jest podłączone do "+" baterii przez rezystor 200 omów i diodę. Jeśli tak, proponuję po prostu usunąć rezystor, aby chronić baterię:
Jeśli twój sprzęt jest czysty, uruchamiasz sterownik z
startdriver DS3231 <SCL-pin> <SDA-pin> <optional arg>opcjonalny argument określa, czy i kiedy czas openbeken jest ustawiony na czas RTC:
"1" - spowoduje to ustawienie czasu urządzenia na czas RTC raz przy uruchomieniu
"2" - czas urządzenia jest regularnie (co minutę) ustawiany na czas RTC, więc RTC jest "zegarem głównym" dla urządzenia.
Aby ustawić RTC, można użyć dwóch poleceń
DS3231_SetTime <hours> <minutes> <seconds> <day> <month> <year> - (np. DS3231_SetTime 19 50 01 13 8 25)
DS3231_SetEpoch <epoka od 1970> - (np. DS3231_SetEpoch 3269879540)
Jeśli korzystasz z komputera z systemem Linux, możesz "ustawić" RTC poprzez
wget -q "http://<your.device.IP.address>/cmd_tool?cmd=DS3231_SetEpoch+$(date -u +%s)"
Oto zdjęcie ESP32 z DS3231 na pinach 25 (SDA) i 26 (SCL).
Więc uruchamiam sterownik z
startdriver DS3231 26 25 1
aby ustawić zegar urządzenia na czas RTC raz przy uruchomieniu sterownika.
Jeśli nie masz (lub nie chcesz), aby twoje urządzenie pobierało czas przez Internet i NTP, zrobiłem dwa pull requesty dla dodatkowych źródeł czasu: GPS i DCF77 (niemiecka stacja radiowa nadająca sygnał czasu na falach długich).
Użycie GPS jako źródła czasu - sterownik NEO-6M
Jest to faktycznie obecne w PR#1890
W przypadku urządzeń z użytecznym UART można użyć mojego sterownika NEO-6M. Dekoduje on instrukcje NMEA z urządzenia i pozwala ustawić czas urządzenia, a nawet szerokość / długość geograficzną w przypadku korzystania z obliczeń "wschodu / zachodu słońca".
Moduły są dość tanie (~ 2,5 do 3 € na ali) i trzeba podłączyć NEO-6M RX i TX do urządzeń TX i RX.
Tutaj przykład z modułem podłączonym do modułu BK7238 (potrzebuje "flagi 26" dla mnie, więc NEO6M TX jest podłączony do P1 i NEO RX do P0).
Masz następujące argumenty do
"startdriver NEO6M""<baudrate>" użyje liczby całkowitej jako prędkości transmisji - wymaga to, aby NEO6M był wcześniej ustawiony na stałe na tę prędkość transmisji. Nie wyśle żadnego polecenia do NEO6M!
"setclock" ustawi czas obk na czas GPS, jeśli NEO6M jest "zablokowany"
"setlatlong" ustawi szerokość/długość geograficzną obk na wartości GPS, jeśli NEO6M jest "zablokowany" (i "ENABLE_TIME_SUNSET_SUNRISE" jest zdefiniowane)
Zwykle moduł GPS wysyła wiele komunikatów NMEA co sekundę - wymagałoby to dużego bufora dla "parsera".
Dlatego po uruchomieniu sterownik wyśle polecenie wyłączenia wszystkich wiadomości z wyjątkiem RMC (będziemy analizować tylko linie "$GPRMC").
Jeśli masz możliwość ustawienia NEOM6 na stałe tylko na to wyjście, potrzebowałbyś tylko RX po stronie obk.
Możesz odczytać i ustawić moduł za pomocą oprogramowania "u-Center" dostępnego pod adresem "https://www.u-blox.com" - lub użyć ostatnio dodanego argumentu "savecfg" do "startdriver".
Nie testowane zbyt wiele, ale działa o.k. tutaj ...
Ponieważ moje biurko nie znajduje się bezpośrednio przy oknie, odbiór czasami jest zły. Kupiłem więc pigtail i antenę do samochodu z kablem 2m.
Nie mierzyłem, ale powiedziałbym, że odbiór nie jest tak dobry, jak gdybym położył tam oryginalną antenę - ale jest w porządku, aby uzyskać sygnał GPS nawet 1,5 metra od okna.
Jeśli używasz inteligentnego przełącznika z przewodami pod napięciem, pamiętaj, że masa (GND) zwykle nie jest odizolowana od przewodów pod napięciem! Będziesz więc potrzebował pełnej izolacji, aby zapobiec porażeniu prądem.
Używanie odbiornika DCF77
To jest faktycznie obecne w PR#1911
Za niewielkie pieniądze dostaniesz małą płytkę z anteną ferrytową taką jak ta:
Zdekoduje ona sygnał radiowy nadający rzeczywisty czas w "bitach" reprezentowany przez zmiany sygnału. Co sekundę następuje zmiana o 100 ms ("0") lub 200 ms "1", która jest dekodowana jako stan wysoki/niski na wyjściu modułu.
Ponieważ jest on często używany w urządzeniach zasilanych bateryjnie, należy włączyć odbiór, podciągając pin "PON" do masy.
Sterownik zdekoduje sygnał, zbierając bity w ciągu jednej minuty, a następnie obliczy datę, godzinę i DST (czas letni/zimowy).
Odbiór nie jest zbyt niezawodny, nawet z bitem parzystości czasami odbiera błędny czas.
Można zatem przetestować, czy następny sygnał jest 60 sekund po poprzednim, aby upewnić się, że odbiór jest prawidłowy.
Dekodowanie odbywa się poprzez przerwania i jest testowane na platformach LN882H, Beken, BL602 i ESP.
Oto niektóre dane wyjściowe debugowania z odbioru i dekodowania sygnału:
Zaczynając od
startdriver DCF77opcjonalne argumenty to
"fall" domyślnie, zbocze narastające będzie oznaczać "bity", jeśli potrzebujesz zbocza opadającego (np.g. jeśli używasz optoizolatora), użyj tego argumentu
"httpstat" dodaj kilka szczegółów ze sterownika na stronie głównej
Jak wspomniano wcześniej, piny IO inteligentnych przełączników są zwykle pod napięciem, więc spróbowałem również, czy działa to poprzez optoizolator: Działa (ale odwraca sygnał w mojej bardzo prostej realizacji):
To pokazuje mój test z przełącznikiem BK7231N (tutaj zasilanym przez zasilacz PoE o napięciu 48V) i wejściem odbiornika na "przełączniku" (ponieważ opto-sprzęgacz odwraca sygnał, użyłem go z argumentem "fall"). Używam zwykłego PC-817 i rezystora 220 omów dla 3,3 V dla urządzenia DCF77.
Fajne? Ranking DIY