인터넷 현재 시간 받기 #2 [아두이노/ESP8266]
아두이노

인터넷 현재 시간 받기 #2 [아두이노/ESP8266]

반응형

전에 ESP8266을 이용해서 인터넷으로부터 현재 시간을 받는 코드를 소개한 적이 있다. (http://diy-project.tistory.com/6)

전혀 문제가 없는 코드이지만 가끔씩 서버와 연결이 끊어지고 속도도 맘에 들지 않는다. 그래서 새로운 방법을 찾던 중 괜찮은 방법을 찾았다.

(https://github.com/scanlime/esp8266-Arduino/blob/master/tests/Time/Time.ino)

코드도 훨씬 간단하다. 다만 delay(1000); 동안 다른 작업을 못하기에 mills()를 이용해 코드를 약간 수정했다. 아래는 해당 코드이다.

반응형
#include <ESP8266WiFi.h> 
#include <time.h> 
 
const char* ssid = "*****"; 
const char* password = "*****"; 
 
int timezone = 3; 
int dst = 0; 
 
unsigned long previousMillis = 0;
const long interval = 1000; 
 
void setup() { 
   Serial.begin(115200); 
   Serial.setDebugOutput(true); 
 
   WiFi.mode(WIFI_STA); 
   WiFi.begin(ssid, password); 
   Serial.println("\nConnecting to WiFi"); 
   while (WiFi.status() != WL_CONNECTED) { 
     Serial.print("."); 
     delay(1000); 
   }
 
   configTime(3 * 3600, 0, "pool.ntp.org", "time.nist.gov"); 
   Serial.println("\nWaiting for time"); 
   while (!time(nullptr)) { 
     Serial.print("."); 
     delay(1000); 
   }
   Serial.println(""); 
 }
 
 void loop() {
  unsigned long currentMillis = millis();
  
  if (currentMillis - previousMillis >= interval) {
    previousMillis = currentMillis;
    
    time_t now = time(nullptr); 
    Serial.println(ctime(&now)); 
 
  }
 }

 

이 코드를 ESP8266을 이용하는 wemos d1, nodemcu등에 업로드 한 뒤 시리얼 모니터를 열면 아래와 같이 현재 시간이 출력된다. (한국 시간으로 변환하려면 코드를 추가해야한다.)

 

  

반응형
    # 테스트용