我使用 NodeMCU 连接 DS1307RTC 模块。在我的设备上可以在线和离线工作。如果它在线工作,使用 NTP 更新日期时间,但如果它离线工作,用户可以通过 html 界面(网络服务器)更新日期时间。
我对离线模式有问题,因为当我在“手动更新”后从 RTC 读取日期时,这是错误的,时间是正确的,但日期是错误的大约 52 年。
这是我的代码的摘录:
代码:
全选// convert string to
time_t (input as "07/08/2019 06:00")
time_t createTimeFromString(const char *str) {
TimeElements te;
te.Year = CalendarYrToTm((str[6] - '0') * 1000 + (str[7] - '0') * 100 + (str[8] - '0') * 10 + (str[9] - '0'));
te.Month = (str[3] - '0') * 10 + (str[2] - '0');
te.Day = (str[0] - '0') * 10 + (str[1] - '0');
te.Hour = (str[11] - '0') * 10 + (str[12] - '0');
te.Minute = (str[14] - '0') * 10 + (str[15] - '0');
te.Second = 0;
return makeTime(te);
}
// convert string to char
char* string2char(String command) {
if (command.length() != 0) {
char *p = const_cast(command.c_str());
return p;
}
}
void setup() {
tmElements_t tm;
if (RTC.read(tm)) {
setSyncProvider(RTC.get);
Log(LOG_LEVEL_VERBOSE, "Datetime from RTC: " + digits2string(day()) + "/" + digits2string(month()) + "/" + year() + " " + digits2string(hour()) + ":" + digits2string(minute()) + ":" + digits2string(second()));
} else {
Log(LOG_LEVEL_ERROR, "RTC not found");
}
}