乐鑫技术交流
直播中

李玉鑫

7年用户 1186经验值
私信 关注
[问答]

NodeMCU上的RTC和错误日期是什么原因造成的?怎么处理?

我使用 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");
  }
}



回帖(1)

李玉兰

2023-9-19 09:36:56
RTC错误日期通常是因为RTC模块的时间设置错误或者与系统时间不匹配造成的。要解决此问题,您可以尝试以下操作:

1.使用RTC模块的自带程序,通过串口或I2C进行时间调整;

2.检查与RTC模块连接的电路是否正常,确保模块能够正确工作;

3.使用网络服务器更新RTC模块的时间信息。

如果您的系统在离线模式下读取RTC日期时出现错误,请检查您的设备时间是否正确设置。还要确保您的代码读取RTC数据的正确性,并确保正确地将日期和时间转换为相应的格式。同时,还要确保您的代码正确处理闰年和月份的长度。如果依然无法解决问题,您可以考虑尝试其他RTC模块,或联系RTC模块的制造商。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分