Time 在没有外部RTC和Wifi的情况下,如何在ESP32和Arduino IDE上设置epoch来更新时间?
在我的ESP32上,我想知道没有Wifi连接或外部RTC芯片的实际时间。我从这个简单的代码开始Time 在没有外部RTC和Wifi的情况下,如何在ESP32和Arduino IDE上设置epoch来更新时间?,time,arduino,epoch,esp32,Time,Arduino,Epoch,Esp32,在我的ESP32上,我想知道没有Wifi连接或外部RTC芯片的实际时间。我从这个简单的代码开始 time_t now; struct tm* timeinfo; void Check_Time(void) { time(&now); timeinfo = localtime(&now); Serial.println(timeinfo); } void setup() { Serial.begin(115200); } void loop() { Che
time_t now;
struct tm* timeinfo;
void Check_Time(void) {
time(&now);
timeinfo = localtime(&now);
Serial.println(timeinfo);
}
void setup() {
Serial.begin(115200);
}
void loop() {
Check_Time();
delay(1000);
}
它可以工作,因为输出是
Thu Jan 1 00:07:57 1970
Thu Jan 1 00:07:58 1970
Thu Jan 1 00:07:59 1970
Thu Jan 1 00:08:00 1970
...
从1970年1月1日开始。现在我想把这次更新到实际的版本,但我还没有找到一个直接的解决方案。我知道我可以使用
mktime
功能将日期转换为time\t
数据(是否正确?)?我应该如何处理这个问题?我通过以下方法解决了这个问题:
#include <sys/time.h>
// ...
struct timeval tv;
tv.tv_sec = /* seconds since epoch here */;
tv.tv_usec = /* microseconds here */;
settimeofday(&tv, NULL);
老实说,我真的不知道你想要什么?你说“没有WiFi”和“没有RTC芯片”,但你“这次想更新”,那么你想更新是什么意思?手动?@hcheung是的,我想在我的应用程序中手动更新它。“无Wifi”指不使用某种sntp服务器(无互联网),“无RTC芯片”指使用集成在ESP32中的RTC。如果通过
time(&now)
命令我获得系统的历元,是否有设置此值的函数?tm是一个可以为其设置值的结构,这就是您要查找的内容?@hcheung使用mktime我获得time\t
数据。如果我在mktime
之后执行time(&now)
我得到(例如)1970年1月1日星期四00:08:00
再次:我不会用mktime
函数更新系统时间。我想你永远不会看到我提供的链接上的示例。
1970 1 1 0 0 16
1970 1 1 0 0 17
1970 1 1 0 0 18
Time set
2020 12 6 22 45 32
2020 12 6 22 45 33
2020 12 6 22 45 34