由於最近有案子需求,為了避免增加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
沒有留言:
發佈留言