본문 바로가기
  • 재미있는 펌웨어와 코딩
ESP32/기초 및 Tips

ESP32 시간설정 NTP

by 윤재윤호 2023. 10. 11.

ESP32 내부에 시계 기능이 있지만 값을 기억하지는 못합니다.

와이파이를 통하여 인터넷 시간을 가져와서 설정 하면 현재 시간을 알 수 있습니다.

NTP(Network Time Protocol) 

인터넷 곳곳에 NTP 서버를 운영중인곳이 많이 있는데 그 중에 한 곳에서 현재 시간을 가져 옵니다.

영국 런던 남동쪽에 위치한 그리니치 천문대로 부터 시간을 가져 옵니다.

 

전체 소스코드 입니다.

#include <WiFi.h>
#include "time.h"

const char* ssid = "YOUR_SSID";
const char* password = "YOUR_PASSWORD";

const char* ntpServer = "pool.ntp.org"; // NTP 서버 주소
uint8_t timeZone = 9; // 한국은 GMT+9
uint8_t summerTime = 0; // 썸머타임 적용 안함

void printLocalTime() {
  struct tm timeinfo;
  if( !getLocalTime(&timeinfo) ) {
    Serial.println( "Failed to obtain time" );
    return;
  }
  Serial.println( &timeinfo, "%A, %B %d %Y %H:%M:%S" );
}

void setup() {
  Serial.begin( 115200 );
  WiFi.begin( ssid, password );
    
  // 와이파이가 연결될 때까지 기다린다.
  if( WiFi.waitForConnectResult() != WL_CONNECTED ) {
      Serial.printf( "WiFi Failed!\n" );
      return;
  }

  Serial.print( "IP Address: " );
  Serial.println( WiFi.localIP() );
  configTime( 3600 * timeZone, 3600 * summerTime, ntpServer ); // 시간 설정
}

void loop() {
  delay( 1000 );
  printLocalTime();
}

 

현재 시간을 1초마다 보여 줍니다.

 

코드 내용을 보면

헤더 파일을 선언 합니다.

#include <WiFi.h>
#include "time.h"

 

공유기의 SSIDPASSWORD를 입력합니다.

const char* ssid = "YOUR_SSID";
const char* password = "YOUR_PASSWORD";

 

NTP 서버는 pool.ntp.org 를 사용합니다.

 

우리나라는 그리니치 천문대로부터 9시간 빠르므로 

GMT(Greenwich Mean Time)+9 입니다.

썸머타임은 적용하지 않습니다.

const char* ntpServer = "pool.ntp.org"; // NTP 서버 주소
uint8_t timeZone = 9; // 한국은 GMT+9
uint8_t summerTime = 0; // 썸머타임 적용 안함

 

ESP32 모듈 내부의 시간을 읽어와서 시리얼창으로 출력 합니다.

void printLocalTime() {
  struct tm timeinfo;
  if( !getLocalTime(&timeinfo) ) {
    Serial.println( "Failed to obtain time" );
    return;
  }
  Serial.println( &timeinfo, "%A, %B %d %Y %H:%M:%S" );
}

 

NTP 서버에서 시간을 읽어와서 우리나라에 맞게 시간을 설정하는 코드입니다.

1시간은 3600초 이므로 3600 x 9 = 32400초 만큼 더해 줍니다.

썸머타임은 없기 때문에 3600을 곱해도 0 입니다.

configTime( 3600 * timeZone, 3600 * summerTime, ntpServer ); // 시간 설정

 

1초마다 시간을 보여 줍니다.

void loop() {
  delay( 1000 );
  printLocalTime();
}

 

'ESP32 > 기초 및 Tips' 카테고리의 다른 글

텔레그램 ID 얻기  (0) 2023.10.14
텔레그램 챗봇 만들기  (0) 2023.10.12
ESP32 네트워크 채널 문제  (0) 2023.10.06
ESP32 부팅시 디버깅 메시지 없애기  (0) 2023.10.02
ESP32 고정 IP 만들기  (0) 2023.10.01