반응형

ESP32는 와이파이를 통해서 인터넷에 연결이 가능하므로 와이파이 연결이 된다면 NTP(Network Time Protocol) 서버를 통해 매우 정확한 현재 시간을 구할 수 있다. 나중에 시간이 된다면 ESP32와 온습도 센서, LCD 등을 가지고 벽걸이 시계를 하나 만들어 볼까? 생각 중인데... 정확한 시간은 물론 정보제공 서버와의 통신을 통해서 날씨, 뉴스 등의 정보도 표시해 주고 센서를 통해서는 현재 기온 및 습도 등을 표시해 주는 유용한 장치를 만들 수 있을 것이다.




ESP32에 대한 일반적인 사항과 아두이노 개발환경을 설치하는 방법은 아래의 과거 포스팅을 참고한다.


■ 스케치

소스를 보면 연결할 와이파이 SSID 와 패스워드를 넣을 수 있게 되어 있고 gmtOffset_sec 변수에 32400 을 대입해 주었다. 이것은 NTP 서버에서 제공해 주는 시간 값이 영국 그리니치 표준시 기준이기 때문에 우리나라에 맞게 수정해 주어야 한다. 우리나라는 GMT+9 (그리니치 표준시 보다 9시간 빠름) 지역이기 때문에 9시간을 더해 주면 된다. 그러므로 9시간을 초(Sec)로 변환한 값인 32400을 변수에 대입해 주었다. daylightOffset_sec 변수는 섬머타임 여부를 나타낸다. 섬머타임 적용지역의 경우 하절기에 시간이 1시간 앞당겨진다. 우리나라는 해당사항이 없으므로 0을 대입해 주었다. NTP 서버의 경우 자신이 알고 있는 다른 서버를 이용해도 된다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <WiFi.h>
#include "time.h"
 
const char* ssid       = "ssid"//와이파이 SSID
const char* password   = "password";  //와이파이 패스워드
 
const char* ntpServer = "kr.pool.ntp.org";
 
//3200초는 1시간, 우리나라는 GMT+9 이므로 3600초x9 = 32400 해 줌
const long  gmtOffset_sec = 32400
 
//섬머타임 적용 시 3600 (시간을 1시간 빠르게 함)
//우리나라는 시행 안하므로 0
const int   daylightOffset_sec = 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);
  
  //connect to WiFi
  Serial.printf("Connecting to %s ", ssid);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
      delay(500);
      Serial.print(".");
  }
  Serial.println(" CONNECTED");
  
  //init and get the time
  configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
  printLocalTime();
 
  //disconnect WiFi as it's no longer needed
  WiFi.disconnect(true);
  WiFi.mode(WIFI_OFF);
}
 
void loop()
{
  delay(1000);
  printLocalTime();
}
cs



실행한 결과이다. 컴퓨터의 시간과 비교해보니 거의 정확히 일치한다. 


시간 구하기는 앞으로 ESP32를 이용한 DIY 에 활용할 일이 많을 것이다.

반응형

+ Recent posts