Установить time() на ESP8266

Если я вызываю configTime() на ESP8266 с использованием ядра ESP8266, то time() изменяется с uptime на unixtime. Однако при этом отправляется запрос SNTP. У меня есть DS3231 RTC, подключенный без интернета. Как я могу установить time() без вызова configTime ()?

Заранее спасибо

, 👍0

Обсуждение

Вероятно [settimeofday(...)](https://linux.die.net/man/2/settimeofday) - это то, что вы хотите., @Majenko


1 ответ


4

Всякий раз, когда у вас есть время эпохи, либо из RTC, NTP и т. Д., Используйте функцию POSIX settimeofday (), чтобы установить системное время, как сказал @Majenko

Пример кода выглядит следующим образом:

// Предполагая, что у нас уже есть время "эпохи" Unix, то есть время с 1 января 1970 года.
// От РТК, НТП и др.
time_t epoch_t = epoch;

// установите время в UTC
setTime(epoch_t);

// установите системное время на UTC
timeval tv = { epoch_t, 0 };
settimeofday(&tv, nullptr);

// Теперь мы можем получить системное время, вызвав time()
time_t timeNowUTC;
struct tm * timeInfo

timeNowUTC = time(nullptr);
timeInfo = localtime(&timeNowUTC);

Для справки, проблема была решена на форуме Arduino : Update time() от DS3231

,