12주차 : NTP 서버 활용 실습 - dhryu60/SmartDevice_2025-1 GitHub Wiki
ESP32 NTP 서버 활용 강의 자료
학습 목표
ESP32를 이용하여 NTP 서버로부터 시간 정보를 가져와 OLED 디스플레이에 표시하는 방법을 학습한다.
핵심 키워드
ESP32, IoT, 사물인터넷, NTP, OLED
준비물
- ESP32
- ESP32 확장 실드
- OLED 디스플레이
프로젝트 개요
ESP32를 사용하여 NTP(Network Time Protocol) 서버에서 시간을 가져오고, OLED 디스플레이에 현재 시간을 표시하는 디지털 시계를 제작한다.
OLED 디스플레이 설정
- Adafruit_SSD1306 라이브러리와 Adafruit_GFX 라이브러리를 설치.
- 아래 코드를 사용하여 OLED 디스플레이를 초기화.
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 32
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println("SSD1306 오류");
while (true);
}
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 0);
display.println("Hello, World!");
display.display();
NTP 서버 연동
- 한국 표준시(UTC+9)를 적용하기 위해 아래와 같이 설정.
int GMTOffset = 60 * 60 * 9; // 한국 시간 오프셋
int daylightOffset = 0; // 서머타임 미적용
configTime(GMTOffset, daylightOffset, "pool.ntp.org", "time.nist.gov");
- 현재 시간을 가져오고 구조체 형태로 변환.
time_t rawtime = time(nullptr);
struct tm* timeinfo = localtime(&rawtime);
rawtime
은 1970년 1월 1일 이후 경과한 시간을 초 단위로 반환한다.timeinfo
는 시각 정보를 시, 분, 초, 요일 등의 항목으로 나누어 저장한다.
출력 결과
- OLED 디스플레이에 현재 시간과 날짜, 요일이 표시되는 디지털 시계가 완성된다.