esp8266 获取 NTP 实时时间

  • esp8266 获取 NTP 实时时间
    • 开发环境:
    • 背景:
    • NTPClient 库的安装
    • 打开库 Demo 程序
    • 程序设计
      • [WIFI连接]
      • [NTP连接]
      • [示例]
      • 运行程序以后,就可以从串口助手中观察到时间:
    • [NTPClient库函数描述]
      • 构造函数NTPClient ( )
      • 时间获取函数
      • 获取时间格式 - 字符串
    • [C语言gmtime()函数:获取当前时间和日期]

esp8266 获取 NTP 实时时间

使用 esp8266 在线获取实时时间

开发环境:

MCU型号:ESP8266
IDE环境 : Arduino IDE

背景:

NTP是网络时间协议(Network Time Protocol),它是用来同步网络中各个计算机的时间的协议。esp8266也可以通过建立与NTP服务的连接,来获取实时时间

NTPClient 库的安装

使用NTP服务需要先安装 NTPClient 库,按组合件 Crtrl + Shift + I 调出库管理 具体操作如下所示:

打开库 Demo 程序

库自带了一个建议的demo程序,方便用户快速开发,具体操作如下所示:

打开以后弹出一个窗口:

接着我们就可以将窗口缩放到合适大小,开始代码的编辑。

程序设计

[WIFI连接]

需要设置路由器的密码(Password)和名称(SSID)这样才可以esp8266才可以上网,具体操作如下:

const char *ssid     = "602";                          // 路由器名称
const char *password = "602602602";         // 路由器密码

[NTP连接]

由于全球的时间是不同的,所以需要校准时间,以北京时间为例,在创建实例的时候,见校准参数传入即可,具体操作如下:

NTPClient timeClient(ntpUDP, "ntp1.aliyun.com",60*60*8, 30*60*1000);

[示例]

修改工程以后,完整的示例代码如下所示,如果你已经安装好库,也可以直接复制以下代码到工程中,直接编译运行查看打印信息:

#include <NTPClient.h>
// change next line to use with another board/shield
#include <ESP8266WiFi.h>
//#include <WiFi.h> // for WiFi shield
//#include <WiFi101.h> // for WiFi 101 shield or MKR1000
#include <WiFiUdp.h>const char *ssid     = "602";
const char *password = "602602602";WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "ntp1.aliyun.com",60*60*8, 30*60*1000);void setup(){Serial.begin(115200);WiFi.begin(ssid, password);while ( WiFi.status() != WL_CONNECTED ) {delay ( 500 );Serial.print ( "." );}timeClient.begin();
}void loop() {timeClient.update();Serial.println(timeClient.getFormattedTime());delay(1000);
}

运行程序以后,就可以从串口助手中观察到时间:

[NTPClient库函数描述]

构造函数NTPClient ( )

描述:NTPClient类构造函数之一,设置NTP的基本参数。
语法:NTPClient(UDP& udp, const char* poolServerName, long timeOffset, unsigned long updateInterval);
参数:WiFiUDP类对象;NTP服务器路径;NTP时间偏移(时区);时间间隔。
用法:

NTPClient timeClient(ntpUDP, "ntp1.aliyun.com", 60*60*8, 30*60*1000);
//参数1 - ntp_udp:WiFiUDP对象
//参数2 - “ntp1.aliyun.com”:阿里云NTP服务器(任意NTP服务器都可)
//参数3 - 60*60*8 :该参数单位为秒,60*60为东一区时间,北京时间为东八区,所以这里参数为 60*60*8
//参数4 - 30*60*1000:设置NTP更新最小时间间隔,参数单位为毫秒

时间获取函数

调用以获取当前时间为周几,小时数,分钟数,秒数等的函数。
语法:

    int getDay() const;int getHours() const;int getMinutes() const;int getSeconds() const;

描述:
getDay()函数
描述:获取当前时间星期几。
参数:无。
返回值:数字0 - 6,注意,国外将每周星期天定为一周的第一天。所以星期天的返回值为0。星期六的返回值为6。

getHours()函数
描述:获取小时数。
参数:无。
返回值:0 - 23。

getMinutes()函数
描述:获取分钟数。
参数:无。
返回值:0 - 59。

getSeconds()函数
描述:获取秒数。
参数:无。
返回值:0 - 59。
用法:

  //获取星期、时、分int weekDay = timeClient.getDay();int currentHour = timeClient.getHours();int currentMinute = timeClient.getMinutes();Serial.print("星期");Serial.print(weekDay);Serial.print(";");Serial.print(currentHour);Serial.print("点");Serial.print(currentMinute);Serial.println("分;");

获取时间格式 - 字符串

描述:获取时间格式为 hh:mm:ss 的字符串。
语法:getFormattedTime()
参数:无。
返回值:字符串 hh:mm:ss 。

  //获取时间格式 - 字符串Serial.println(timeClient.getFormattedTime());    //此命令与“将epochTime换算成年月日”冲突,会导致年月日换算不准

获取绝对时间
描述:获取自1970年1月1日到现在的时间秒数(很大一个数字)。
语法:getEpochTime()
参数:无。
返回值:时间秒数。

  //获取时间戳unsigned long epochTime = timeClient.getEpochTime();Serial.print("Epoch Time:");Serial.println(epochTime);//将epochTime换算成年月日struct tm *ptm = gmtime((time_t *)&epochTime);int monthDay = ptm->tm_mday;int currentMonth = ptm->tm_mon + 1;Serial.print(currentMonth);Serial.print("月");Serial.print(monthDay);Serial.println("日");

[C语言gmtime()函数:获取当前时间和日期]

定义函数:struct tm *gmtime(const time_t *timep);
函数说明:gmtime()将参数timep 所指的time_t 结构中的信息转换成真实世界所使用的时间日期表示方法,然后将结果由结构tm 返回。
结构tm 的定义为:
struct tm{
int tm_sec; //代表目前秒数, 正常范围为0-59, 但允许至61 秒
int tm_min; //代表目前分数, 范围0-59
int tm_hour; //从午夜算起的时数, 范围为0-23
int tm_mday; //目前月份的日数, 范围01-31
int tm_mon; //代表目前月份, 从一月算起, 范围从0-11
int tm_year; //从1900 年算起至今的年数
int tm_wday; //一星期的日数, 从星期一算起, 范围为0-6
int tm_yday; //从今年1 月1 日算起至今的天数, 范围为0-365
int tm_isdst; //日光节约时间的旗标
};
此函数返回的时间日期未经时区转换,而是UTC 时间。
返回值:返回结构tm 代表目前UTC 时间。
示例:

#include <time.h>
void setup() {Serial.begin(115200);
}
void loop() {char *wday[] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};time_t timep;struct tm *p;time(&timep);p = gmtime(&timep);printf("%d/%d/%d ", (1900 + p->tm_year), (1 + p->tm_mon), p->tm_mday);printf("%s %d:%d:%d\n", wday[p->tm_wday], p->tm_hour, p->tm_min, p->tm_sec);delay(1000);
}

执行结果:

1969/12/31 Wed 24:0:0
1970/1/1 Thu 0:0:1
1970/1/1 Thu 0:0:2
1970/1/1 Thu 0:0:3
1970/1/1 Thu 0:0:4
1970/1/1 Thu 0:0:5

esp8266 获取 NTP 实时时间相关推荐

  1. js 实时显示服务器时间,js获取服务器实时时间

    本文主要和大家分享js获取服务器实时时间,主要以代码的方法和大家分享,希望能帮助到大家. AJAX获取服务器时间 /* * ajax 函数,处理 ajax 请求 * @param function c ...

  2. ESP8266同步NTP服务器时间

    Arduino利用ESP8266同步NTP服务器时间 依赖NTPclient-3.2.0库:https://github.com/arduino-libraries/NTPClient/archive ...

  3. esp8266 at接收数据中断时间_利用ESP8266获取网络同步时间(北京时间)

    本文需要读者有一点ESP8266的基础知识,比如ESP8266的模式设置,AP连接,联网. 1. 提供网络时间的网站 要想获取网络时间首先要有提供网络时间的网站,免费提供网络时间的网站有很多, 这里以 ...

  4. java ntpudpclient_Java代码获取NTP服务器时间

    apache的commons-net包下面有ntp相关的实现类,主要类有: 类NTPUDPClient中相关方法: 其中,第二个重载方法使用协议规范默认端口:123. Java代码段: 运行结果为: ...

  5. js动态获取实时时间

    给大家整理了一点获取当下实时时间的方法: let curDate = new Date(); //获取对象let year = curDate.getFullYear(); //获取年let curM ...

  6. esp32 Micropython驱动ST7735 1.8寸TFT屏幕 中文显示;时间显示、网络network实时时间获取utptime;urequests、upip等包安装

    参考: https://blog.csdn.net/weixin_57604547/article/details/122274614 0.线连接 IO就是GPIO引脚 ESP32 ---- TFT ...

  7. 使用RT-Thread Studio DIY 迷你桌面时钟(三)| 获取NTP时间(at_device软件包 + netutils软件包)

    寻求更清爽的阅读体验,请移步:Mculover666的个人博客. 1. 项目进度 桌面Mini时钟项目用来演示如何使用RT-Thread Stduio开发项目,整个项目的架构如下: 在前两篇博文中简单 ...

  8. esp8266获取网络时间

    esp8266获取网络时间 我们使用的手机都有 "使用网络上的时间,自动调整日期和时间" 的功能.如果我们自己做的电子时钟也有自动调整时间的功能,那就很方便,而且不怕时间不准了. ...

  9. ESP32-网络开发实例-通过NTP获取 Epoch/Unix时间

    通过NTP获取 Epoch/Unix时间 NTP代表"网络时间协议",它是用于在计算机系统之间进行时钟同步的网络协议. 换句话说,它用于同步网络中的计算机时钟时间. 本文将介绍如何 ...

最新文章

  1. JGG:华中师大蒋兴鹏组-不同稀疏水平信号的微生物组关联检验方法
  2. wamp php字符编码,关于Apache默认编码错误 导致网站乱码的解决方案
  3. python中 __name__及__main()__的妙处02
  4. 实例手册_独家数据 | 1820Fall 香港研究生商科类14个热门专业 1400+申请实例汇总...
  5. OJ 169 Majority Element
  6. android 判断app处于前后台
  7. 会聊天到底有多重要?汽车语音识别大盘点
  8. C#类对象转换成XML
  9. 公式推导以及仿真代码的修改 11-28
  10. java tomcat 内存溢出怎么解决_Tomcat内存溢出分析及解决方法
  11. html+jQuery实现拖动滑块图片拼图验证码插件,移动端适用
  12. win10的pagefile.sys是什么文件?pagefile.sys文件太大如何移动到D盘中?
  13. 类似911的代理ip,911代理的官网,yilu代理软件,911s5替代软件海外代理平台哪里有?
  14. win7浏览器主页修改不过来_win7浏览器主页不能修改怎么办 win7浏览器主页不能修改解决方法...
  15. 读《南怀瑾讲人生哲理》
  16. 一WAN多拨(一号多拨)实验
  17. GUI(Graphic User Interface) 图形用户界面
  18. 盲盒系统的玩法运营如何盈利
  19. Web前端开发实训 -- 弹球王小游戏
  20. java和js中遍历数组和对象的总结

热门文章

  1. 单片机c语言程序开发洗衣机,单片机课程设计(洗衣机控制系统).doc
  2. java 生成tar.gz_如何完全从Java中的内存中的对象(无文件)创建tar或tar.gz存档
  3. SystemUI 下拉通知栏快捷键加载流程
  4. PyQt5 自定义标题栏,实现无边框,最小化最大化关闭事件,窗口拖动移动,窗口改变大小,仿百度网盘色调美化
  5. java反编译微信小程序_微信小程序反编译的实现
  6. 万科旗下万物云冲刺港股:年营收237亿 经调整利润19亿
  7. JavaScript之入门学习风云(1)
  8. 如何在win 10 家庭版上安装日语语言包
  9. Python版消灭病毒、消灭新冠小游戏源代码
  10. 【独家干货】医院电子病历体系的构建与应用