很抱歉,如果这是一个菜鸟问题,但我已经通过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)
的其他实现?
预先感谢:)
答案 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