Arduino利用Esp8266同步NTP服务器时间

在单片机开发过程中(基于树莓派的嵌入式可忽略),我们经常会遇到设置好的时间由于断电或其他原因不得不重新设置。

Arduino一键配置上网

闲来无事波波就补充一篇Arduino利用Esp8266同步NTP服务器时间的笔记吧。

在本篇笔记中我们需要用到一个NTP类库,下载地址>>NTPclient-3.2.0.zip

代码片段:

  1. #include <ESP8266WiFi.h>
  2. #include <NTPClient.h>
  3. #include <WiFiUdp.h>
  4. const char *ssid     = "WIFI信道";
  5. const char *password = "WIFI密码";
  6. WiFiUDP ntpUDP;
  7. NTPClient timeClient(ntpUDP, "pool.ntp.org");
  8. String weekDays[7]={"Sunday""Monday""Tuesday","Wednesday""Thursday""Friday""Saturday"};
  9. //Month names
  10. String months[12]={"January""February""March""April","May""June""July""August""September""October""November""December"};
  11. void setup() {
  12.     // Initialize Serial Monitor
  13.     Serial.begin(115200);
  14.     // Connect to Wi-Fi
  15.     Serial.print("Connecting to ");
  16.     Serial.println(ssid);
  17.     WiFi.begin(ssid, password);
  18.     while (WiFi.status() != WL_CONNECTED) {
  19.         delay(500);
  20.         Serial.print(".");
  21.     }
  22.     // Initialize a NTPClient to get time
  23.     timeClient.begin();
  24.     //设置偏移时间(以秒为单位)以调整时区,例如:
  25.     // GMT +1 = 3600
  26.     // GMT +8 = 28800
  27.     // GMT -1 = -3600
  28.     // GMT 0 = 0
  29.     timeClient.setTimeOffset(28800);
  30. }
  31. void loop() {
  32.     timeClient.update();
  33.     //获取时间戳
  34.     unsigned long epochTime = timeClient.getEpochTime();
  35.     Serial.print("Epoch Time: ");
  36.     Serial.println(epochTime);
  37.     //转化为当前时间
  38.     String formattedTime = timeClient.getFormattedTime();
  39.     Serial.print("Formatted Time: ");
  40.     Serial.println(formattedTime);
  41.     int currentHour = timeClient.getHours();
  42.     Serial.print("Hour: ");
  43.     Serial.println(currentHour);
  44.     int currentMinute = timeClient.getMinutes();
  45.     Serial.print("Minutes: ");
  46.     Serial.println(currentMinute);
  47.     int currentSecond = timeClient.getSeconds();
  48.     Serial.print("Seconds: ");
  49.     Serial.println(currentSecond);
  50.     String weekDay = weekDays[timeClient.getDay()];
  51.     Serial.print("Week Day: ");
  52.     Serial.println(weekDay);
  53.     //Get a time structure
  54.     struct tm *ptm = gmtime ((time_t *)&epochTime);
  55.     int monthDay = ptm->tm_mday;
  56.     Serial.print("Month day: ");
  57.     Serial.println(monthDay);
  58.     int currentMonth = ptm->tm_mon+1;
  59.     Serial.print("Month: ");
  60.     Serial.println(currentMonth);
  61.     String currentMonthName = months[currentMonth-1];
  62.     Serial.print("Month name: ");
  63.     Serial.println(currentMonthName);
  64.     int currentYear = ptm->tm_year+1900;
  65.     Serial.print("Year: ");
  66.     Serial.println(currentYear);
  67.     //Print complete date:
  68.     String currentDate = String(currentYear) + "-" + String(currentMonth) + "-" + String(monthDay);
  69.     Serial.print("Current date: ");
  70.     Serial.println(currentDate);
  71.     Serial.println("");
  72.     delay(2000);
  73. }

关于时间的同步问题我们可以设置成Arduino启动时自动同步一次,也可以设置定时同步。至于怎么同步就不再赘述了。

 

你想把广告放到这里吗?

发表评论

您必须 登录 才能发表留言!