赞
踩
网络时间协议(Network Time Protocol,NTP)是用来使计算机时间同步化的一种协议,它可以 使计算机对其服务器或时钟源(如石英钟,GPS等等)做同步化,它可以提供高精准度的时间校正, 与标准时间的误差小于1ms。标准时间来源于原子钟,卫星,天文台等。
之前做透明时钟的时候遇到的问题,使用NTPClient库获取网络时间和日期无法做到同步的问题,最终经过修改程序逐步改进,期间试过将时分秒修改为全局变量、变换WiFi信道、验证JSON返回值数据获取是否正确、利用程序中的看门狗来修改代码进程结构,最终都无济于事。但最终经过去除获取API的服务器解决问题。
以下是获取NTP的部分代码:
- #include <NTPClient.h> //NTP库
-
- ……………………………
- …………省……………
- …………略……………
- ……………………………
-
- NTPClient timeClient(ntpUDP, "ntp.tuna.tsinghua.edu.cn"); // NTP获取时间
-
- ……………………………
- …………省……………
- …………略……………
- ……………………………
-
- timeClient.update();
- unsigned long epochTime = timeClient.getEpochTime();
- //Serial.println(epochTime);
- if(flag == 1)
- {
- currentSec = epochTime;
- flag = 0;
- }
-
- String formattedTime = timeClient.getFormattedTime();
- int tm_Hour = timeClient.getHours();
- int tm_Minute = timeClient.getMinutes();
- int tm_Second = timeClient.getSeconds();
- String weekDay = weekDays[timeClient.getDay()];
-
- char week[weekDay.length() + 1];
- weekDay.toCharArray(week,weekDay.length() + 1);
-
- struct tm *ptm = gmtime ((time_t *)&epochTime);
- int monthDay = ptm->tm_mday;
- int tm_Month = ptm->tm_mon+1;
- String currentMonthName = months[tm_Month-1];
- int tm_Year = ptm->tm_year+1900;
- String currentDate = String(tm_Month) + "/" + String(monthDay);
- String currentTime, hour, minute;
-
- ……………………………
- …………省……………
- …………略……………
- ……………………………
以上代码分为三部分: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,查阅网络后未能发现其原因,最终经过摸索解决
该问题。
将以下代码改为后者,即可使时间恢复为当前实时时间:
- NTPClient timeClient(ntpUDP, "ntp.tuna.tsinghua.edu.cn"); // 修改前
- 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 # 复旦大学
解决原理还在进一步研究中,文章错误和解决原理望不吝赐教!
(文章仅供自身记录学习,遇到同种问题可适当进行参考)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。