지금까지 ESP32 에 관한 글은 아래를 참고해 주세요.
* Hardware | ESP32 Deep sleep 알아보기
- https://chocoball.tistory.com/entry/Hardware-ESP32-Deep-sleep
* Hardware | ESP32 Cryptographic HW 가속 확인해 보기
- https://chocoball.tistory.com/entry/Hardware-ESP32-Cryptographic-HW-acceleration
* Hardware | EPS32 PWM 기능 확인해 보기
- https://chocoball.tistory.com/entry/Hardware-EPS32-PWM
* Hardware | ESP32 의 internal sensor 확인해 보기
- https://chocoball.tistory.com/entry/Hardware-ESP32-internal-sensors
* Hardware | ESP32 의 Dual core 확인해 보기
- https://chocoball.tistory.com/entry/Hardware-ESP32-Dual-core
* Hardware | ESP32 스펙 확인해 보기
- https://chocoball.tistory.com/entry/Hardware-ESP32-spec-check
* Hardware | ESP32 간단 사용기
- https://chocoball.tistory.com/entry/Hardware-simple-review-ESP32
이 글을 마지막으로 ESP32 에 대해 대략적인 내용은 얼추 확인해 본 것 같습니다.
이후에는 WiFi 이용한 활용시에는 가능한 ESP32 를 사용해 보려 합니다.
1. NTP
본 포스트는 아래 글을 참조 하였습니다.
* Getting Date & Time From NTP Server With ESP32
- https://lastminuteengineers.com/esp32-ntp-server-date-time-tutorial/
동일한 시간 기준으로 동작해야 하는 서비스를 위해, 인터넷에서는 NTP 라는 서비스가 지원되고 있습니다.
* Network Time Protocol
- https://en.wikipedia.org/wiki/Network_Time_Protocol
이를태면, 정확한 시간 정보를 가져올 수 있는 서버들이 존재한다는 것이죠.
2. WiFi
"인터넷" 을 통해 시간 정보를 가져와야 하므로, WiFi 등의 인터넷 연결이 필수 입니다.
ESP32 는, WiFi 연결을 위해 "WiFi.h" 라이브러리를 지원합니다. 이를 통해 쉽게 WiFi 연결을 실현해 줍니다.
지금까지 Arduino + ESP8266 에서는 AT command 를 이용하여, 하나하나 명령어를 정의해야 했었는데, 그럴 수고를 덜어줍니다.
const char* ssid = "YOUR_SSID"; const char* password = "YOUR_PASS";
인터넷 접속을 위한 WiFI SSID 및 비번 정의를 하면 끝 입니다. 정말로 이걸로 끝입니다.
3. NTP
#include "WiFi.h" #include "time.h" const char* ssid = "YOUR_SSID"; const char* password = "YOUR_PASS"; const char* ntpServer = "pool.ntp.org"; const long gmtOffset_sec = 3600; const int daylightOffset_sec = 3600; 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(); }
위의 소스를 각 로컬 상황에 맞게 설정해줘야 합니다.
const char* ntpServer = "pool.ntp.org"; const long gmtOffset_sec = 3600; const int daylightOffset_sec = 3600;
우선, NTP 서버는 "pool.ntp.org" 로 정의 합니다. 이 FQDN 을 통해 NTP 서버를 할당 받습니다.
"gmOffset_sec" 는 GMT 기준으로 얼마나 차이나는지를 확인합니다.
한국은 그리니치 천문대 기준 9시간 추가된 시간대인, "GMT+9" 이므로 "3600 * 9 = 32400" 만큼 더해주면 됩니다.
또한, "daylightOffset_sec" 은, 서머타임 적용 지역이면, 한시간인 3600 을 적용하면 됩니다.
우리나라는 서머타임 적용은 80년대에 일시적으로 적용하고, 그 이후 사용되지 않으므로 "0" 으로 정의합니다. (옛날 사람...)
위의 내용을 적용하고 실행하면 다음과 같이 됩니다.
'Hardware' 카테고리의 다른 글
Hardware | ebook 크레마 사운드 액정 수리기 - 6 (3) | 2020.05.10 |
---|---|
Hardware | 샤오미 미밴드 4 한글 패치 (2) | 2020.04.25 |
Hardware | ESP32 Deep sleep 알아보기 (0) | 2020.04.18 |
Hardware | ESP32 Cryptographic HW 가속 확인해 보기 (2) | 2020.04.16 |
Hardware | EPS32 PWM 기능 확인해 보기 (0) | 2020.04.11 |