esp8266 获取 NTP 实时时间

使用 esp8266 在线获取实时时间

使用NTP服务需要先安装 NTPClient 库,

打开库 Basic 程序

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

 

[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     = "yang1234";
const char *password = "y123456789";

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();
  int weekDay = timeClient.getDay();
  Serial.println(weekDay);
  Serial.println(timeClient.getFormattedTime());

  delay(1000);
}

输出如下

 

描述:
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("分;");

获取时间格式 - 字符串

unsigned long epochTime = timeClient.getEpochTime();

获取绝对时间
描述:获取自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("日");