2018年5月31日星期四

nodemcu get Internet time 透過nodemcu取得網路時間

由於最近有案子需求,為了避免增加RTC時鐘所以透過nodemcu取得網路時間回報事件發生的時間點

注意有些網路似乎不能取得網路時間
像我用win10插wifi網路卡,就無法拿到網路時間
手機開熱點就可以

硬體設備
nodemcu

軟體開發環境
arduino ide 1.8.5
ESP開發板版本 ESP8266 Community 2.3.0

以下為程式碼:

#include <ESP8266WiFi.h>
#include <time.h>

const char* ssid = "AWSIOT";
const char* password = "12345678";

int ledPin = 13;

int timezone = 8 * 3600;//設定時區因為台灣是+8所以->時區*3600
int dst = 0;

void setup() {

  pinMode(ledPin,OUTPUT);
  digitalWrite(ledPin,LOW);

  Serial.begin(115200);
  Serial.println();
  Serial.print("Wifi connecting to ");
  Serial.println( ssid );

  WiFi.begin(ssid,password);

  Serial.println();

  Serial.print("Connecting");

  while( WiFi.status() != WL_CONNECTED ){
      delay(500);
      Serial.print(".");     
  }

  digitalWrite( ledPin , HIGH);
  Serial.println();

  Serial.println("Wifi Connected Success!");
  Serial.print("NodeMCU IP Address : ");
  Serial.println(WiFi.localIP() );

  configTime(timezone, dst, "pool.ntp.org","time.nist.gov");
  Serial.println("\nWaiting for Internet time");

  while(!time(nullptr)){
     Serial.print("*");
     delay(1000);
  }
  Serial.println("\nTime response....OK"); 
}

void loop() {

  time_t now = time(nullptr);
  struct tm* p_tm = localtime(&now);
  Serial.print(p_tm->tm_mday);
  Serial.print("/");
  Serial.print(p_tm->tm_mon + 1);
  Serial.print("/");
  Serial.print(p_tm->tm_year + 1900);

  Serial.print(" ");

  Serial.print(p_tm->tm_hour);
  Serial.print(":");
  Serial.print(p_tm->tm_min);
  Serial.print(":");
  Serial.println(p_tm->tm_sec);

}
實作結果


來源網站:https://github.com/jumejume1/NodeMCU_ESP8266/blob/master/READ_TIME_FROM_INTERNET/READ_TIME_FROM_INTERNET.ino

沒有留言:

發佈留言

打賞按讚