如何在不访问互联网的情况下设置ESP32的时钟?

时间:2019-01-31 10:09:56

标签: arduino esp32 time.h

很抱歉,如果这是一个菜鸟问题,但我已经通过http://www.cplusplus.com/reference/ctime/tm/教程等来穷尽了研究。

我正在使用ESP32的Arduino SimpleTime示例,但希望能够设置时间而无需访问互联网。

我在过去的项目中使用TimeLib.h,该项目具有使用setTime(Hour, Minute, Second, MDay, Mon, Year)函数的时间设置功能,但是根据Espressif第120期,该库和时钟的实现似乎容易受到时间提前的影响: https://github.com/espressif/arduino-esp32/issues/120

我已经测试了SimpleTime草图,但由于ADC读取而未发现任何时间提前漂移,因此希望在无法访问Internet的情况下也能够从启动设置ESP32,并且仍然能够运行有一段时间,这样我就可以使用time(NULL)mktime(tm_struct)等。

是否可以使用configTime(gmtOffset_sec, daylightOffset_sec, ntpServer)的其他实现?

预先感谢:)

2 个答案:

答案 0 :(得分:0)

我遇到了完全相同的问题,并找到了解决方法。我想将时间存储在EEPROM中,很少通过ntp同步时间。因此,在断电的情况下,时间将从EEPROM加载。

这就是我设置时间

tm local;
if (esp_sleep_get_wakeup_cause() == ESP_SLEEP_WAKEUP_UNDEFINED) { // if reset or power loss
  struct timeval val;
  loadStruct(&local); // e.g. load time from eeprom
  const time_t sec = mktime(&local); // make time_t
  localtime(&sec); //set time
} else {
  getLocalTime(&local);
}

就是这样!您的时间已设定。

答案 1 :(得分:-1)

看看这个图书馆,ESP32Time

时间可以设置如下;

setTime(30, 24, 15, 17, 1, 2021);  // 17th Jan 2021 15:24:30
setTime(1609459200);  //specify the epoch, 1st Jan 2021 00:00:00
setTime();            // default 1st Jan 2021 00:00:00