Установить time() на ESP8266
Если я вызываю configTime() на ESP8266 с использованием ядра ESP8266, то time() изменяется с uptime на unixtime. Однако при этом отправляется запрос SNTP. У меня есть DS3231 RTC, подключенный без интернета. Как я могу установить time() без вызова configTime ()?
Заранее спасибо
@rnsi, 👍0
Обсуждение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
,
@khoih-prog
Смотрите также:
- ESP8266: ошибка: 'getLocalTime' was not declared in this scope
- Как разобрать 20180810T143000Z в time_t
- Как найти разницу между двумя timestamp
- ESP8266 ISO 8601 string to tm struct
- Каков идеальный способ проверить, готово ли время на ESP8266 через NTP?
- Время UNIX в мс в человеческую дату и время
- Не удалось изменить NtpClient для использования статического IP-адреса
- Безопасный при опрокидывании NTP дизайн с ESP8266 (Curiosity)
Вероятно [
settimeofday(...)
](https://linux.die.net/man/2/settimeofday) - это то, что вы хотите., @Majenko