Ktoś z was ma jakiś pomysł na zaimplementowanie w miarę dokładnego zegara czasu rzeczywistego na ESP8266? Przez "w miarę dokładny" mam na myśli taki, którzy nie "odpływałby" więcej jak kilka sekund na dobę, pozwalając by synchronizacja z NTP co kilka godzina załatwiała sprawę.
W najnowszym SDK mamy gotowe funkcje do pobierania czasu z serwera NTP. Problemem jest późniejsza inkrementacja zmiennej, w której trzymamy czas. Najprościej byłoby użyć mechanizmu timera programowego (os_timer_t), ale on nie gwarantuje wykonania przypisanej funkcji dokładnie po upływie zadanego odcinka czasu. Czas będzie więc sobie pływał...
Dokumentacja najnowszego SDK (wersja 1.1.1) opisuje co prawda funkcje hw_timer, jednak nie widzę nigdzie odpowiadającego im pliku nagłówkowego, ani przykładów. Sam opis jest bardzo oględny i lakoniczny. Czyżby do dokumentacji trafiła jeszcze nie zaimplementowana funkcjonalność?
W końcu mamy też dwie takie funkcje: system_get_time() - zwraca ilość us od startu systemu (z grubsza coś jak millis() w Arduino) system_get_rtc_time() - zwraca ilość taktów zegara RTC system_get_rtc_calib() - zwraca długość trwania taktu zegara RTC z dokładnością do 0,1us.
Na podstawie tego można wyliczyć jak długo pracuje zegar. Dałoby się jakoś wykorzystać ten mechanizm do dokładnego "taktowania" zmiennej, w której trzymam czas w formacie uniksowym, synchronizowany z ntp?
Na razie wolałbym uniknąć stosowania zewnętrznego układu RTC na I2C.