c - 与互联网同步时间?

标签 c arduino-esp8266

当我的 Arduino 启动时,我尝试将其时间与互联网同步,并使用以下代码来执行此操作。这段代码在过去是有效的,但今天它永远不会退出 while 循环,所以我在循环中放置了一些调试语句来查看发生了什么。从输出来看,它会在这个循环中持续很长时间。我得到了这段代码,所以我真的不知道 while 循环的目的是什么。有什么想法或者有更好的方法同步时间吗?感谢您的帮助!

void initTime()
{
 const int MIN_EPOCH = 40 * 365 * 24 * 3600;
 time_t epochTime;

 configTime(0, 0, "pool.ntp.org", "time.nist.gov");

 Serial.print("Fetching time from NTP");

 epochTime = time(NULL);

 while (epochTime < MIN_EPOCH)
 {
   Serial.print(".");
   delay(2000);
   epochTime = time(NULL);

   Serial.print("MIN EPOCH: ");
   Serial.println(MIN_EPOCH);
   Serial.print("EPOCH TIME: ");
   Serial.println(epochTime);
 }

 Serial.println();
 Serial.print("Fetched NTP epoch time is: ");
 Serial.println(epochTime);
}

输出:

从 NTP.MIN EPOCH 获取时间:1261440000

纪元时间:28810

.最小纪元:1261440000

纪元时间:28812

.最小纪元:1261440000

纪元时间:28814

.最小纪元:1261440000

纪元时间:28816

.最小纪元:1261440000

纪元时间:28818

.最小纪元:1261440000

最佳答案

解释循环正在做什么:

configTime 启动(或可以启动)一个异步进程来经常同步时间。循环检查并确保我们有一个理智的时间(1970 年 1 月 1 日后 40 年,即 2010 年 1 月 1 日)。如果不正常,我们会等待直到同步。

我认为您也许可以使 SNTP 进程同步,但如果您陷入困境,这会让您陷入困境。

关于c - 与互联网同步时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57778235/

相关文章:

c - 双向链表 - 段错误

c - strcpy() 函数进入无限循环

mysql - 使用 Arduino IDE 借助变量从节点 MCU 发送数据

c++ - ESP8266:如何在station模式下获取客户端的MAC地址(STA_MODE)?

Azure ESP8266 IoT 客户端库无法与 ESP8266 Web 服务器配合使用

c++ - 计算广播地址时数字错误

c - 在 C 中更新全局变量

c++ - 从串行数据读取的长度始终为1

esp8266 - NodeMCU自动加入开放wifi

c - HAL_UART_Transmit_IT 如何在 STM32F091VB 上管理串行发送数据