当前位置:   article > 正文

Arduino利用NTPClient库获取网络时间,显示时间与实时时间不同步_arduino ntpclient

arduino ntpclient

 网络时间协议(Network Time Protocol,NTP)是用来使计算机时间同步化的一种协议,它可以 使计算机对其服务器或时钟源(如石英钟,GPS等等)做同步化,它可以提供高精准度的时间校正, 与标准时间的误差小于1ms。标准时间来源于原子钟,卫星,天文台等。

之前做透明时钟的时候遇到的问题,使用NTPClient库获取网络时间和日期无法做到同步的问题,最终经过修改程序逐步改进,期间试过将时分秒修改为全局变量、变换WiFi信道、验证JSON返回值数据获取是否正确、利用程序中的看门狗来修改代码进程结构,最终都无济于事。但最终经过去除获取API的服务器解决问题。

以下是获取NTP的部分代码:

  1. #include <NTPClient.h> //NTP库
  2. ……………………………
  3. …………省……………
  4. …………略……………
  5. ……………………………
  6. NTPClient timeClient(ntpUDP, "ntp.tuna.tsinghua.edu.cn"); // NTP获取时间
  7. ……………………………
  8. …………省……………
  9. …………略……………
  10. ……………………………
  11. timeClient.update();
  12. unsigned long epochTime = timeClient.getEpochTime();
  13. //Serial.println(epochTime);
  14. if(flag == 1)
  15. {
  16. currentSec = epochTime;
  17. flag = 0;
  18. }
  19. String formattedTime = timeClient.getFormattedTime();
  20. int tm_Hour = timeClient.getHours();
  21. int tm_Minute = timeClient.getMinutes();
  22. int tm_Second = timeClient.getSeconds();
  23. String weekDay = weekDays[timeClient.getDay()];
  24. char week[weekDay.length() + 1];
  25. weekDay.toCharArray(week,weekDay.length() + 1);
  26. struct tm *ptm = gmtime ((time_t *)&epochTime);
  27. int monthDay = ptm->tm_mday;
  28. int tm_Month = ptm->tm_mon+1;
  29. String currentMonthName = months[tm_Month-1];
  30. int tm_Year = ptm->tm_year+1900;
  31. String currentDate = String(tm_Month) + "/" + String(monthDay);
  32. String currentTime, hour, minute;
  33. ……………………………
  34. …………省……………
  35. …………略……………
  36. ……………………………

以上代码分为三部分:1.调用NTPClient的库文件

                                     2.通过访问NTP服务器地址来获取当前的日期和时间

                                     3.获取具体年、月、日、星期、小时、分钟,这里引用了Epoch Time,省略  代码中已经时区实现为东8区。

ps: Epoch Time: 其实它指的是一个特定的时间:1970-01-01 00:00:00 ,也就是世界标准时间1970年 1月1日0时0分0秒,以这个时间为起点,每过去一秒,数值加1。对应的就可以算出公历时间日期 (不算闰秒)。

但获取到的时间显示仍为Epoch Time,查阅网络后未能发现其原因,最终经过摸索解决

该问题。 

修改前
修改后

将以下代码改为后者,即可使时间恢复为当前实时时间:

  1. NTPClient timeClient(ntpUDP, "ntp.tuna.tsinghua.edu.cn"); // 修改前
  2. NTPClient timeClient(ntpUDP); // 修改后

 附加NTP服务器网址:pool.ntp.org     # 国外的NTP服务器,国内地址为:cn.pool.ntp.org 

                                     ntp.aliyun.com   # 阿里云

                                     time1.cloud.tencent.com  # 腾讯

                                     time.google.com # 谷歌

                                     ntp.tuna.tsinghua.edu.cn # 清华大学

                                     ntp.sjtu.edu.cn # 上海交通大学

                                     ntp.fudan.edu.cn # 复旦大学

 解决原理还在进一步研究中,文章错误和解决原理望不吝赐教!

(文章仅供自身记录学习,遇到同种问题可适当进行参考)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/472024
推荐阅读
相关标签
  

闽ICP备14008679号