ESP8266의 ntp 설정은 한 줄로
3869 단어 ntpESP8266ESP-WROOM-02
개요
ntp (네트워크 시간 프로토콜)는 네트워크를 통해 시계를 맞추기위한 통신 규칙이며, 네트워크상의 시간 서버와 동기화하여 정확한 시간을 쉽게 얻을 수 있습니다.
esp8266 Arduino에서도 이용할 수 있지만, ntp 패킷을 작성 및 송수신하는 스케치의 예가 제공되고 있기 때문에, 자신이 해야 한다고 오해하고 있는 사람이 있을지도 모릅니다. 응.
esp8266 Arduino에는 ntp 기능이 내장되어있어 특히 라이브러리를 포함하지 않고도 설정하는 것만으로 ntp 동기화 시간 정보를 얻을 수 있습니다.
추가: 2020/05/24:
esp8266 arduino ver 2.7.0 이후, 이전에 설명한 방법에서는 시간이 18시간 어긋나게 되었습니다. 기존에는 configTime() 함수로 설정을 했지만 2.7.0 이후에는 configTzTime() 함수를 사용하는 것이 좋습니다.
사용법
configTzTime() 함수로 설정합니다. 선언은 Arduino.h에 있으므로 특별히 포함 할 필요가 없습니다.
Arduino.h// esp32 api compatibility
inline void configTzTime(const char* tz, const char* server1,
const char* server2 = nullptr, const char* server3 = nullptr)
일본에서 사용하는 경우 tz는 "JST-9"입니다. tz에 지정 가능한 문자열은 TZ.h을 참조하십시오.
ntp의 동기화가 완료되면 time() 함수가 UNIX 시간(1970년 1월 1일 0시 0분 0초부터의 윤초를 포함하지 않는 초수)을 돌려주게 되므로, 이것을 localtime() 함수 등 로 변환하여 이용합니다. 동기화가 완료될 때까지 time() 함수는 0을 반환하므로 이상한 시간을 표시하고 싶지 않은 경우는 비0이 반환될 때까지 기다리는 것이 좋습니다. time() 이나 localtime() 의 사용에는 time.h 를 인클루드 할 필요가 있습니다.
샘플 프로그램
사용 예를 나타냅니다.
clock.ino#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <time.h>
#define WIFI_SSID "your_wifi_ssid"
#define WIFI_PASSWORD "your_wifi_password"
#define JST 3600*9
void setup() {
Serial.begin(115200);
delay(100);
Serial.print("\n\nReset:\n");
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while(WiFi.status() != WL_CONNECTED) {
Serial.print('.');
delay(500);
}
Serial.println();
Serial.printf("Connected, IP address: ");
Serial.println(WiFi.localIP());
// configTime( JST, 0, "ntp.nict.jp", "ntp.jst.mfeed.ad.jp"); // esp8266/arduino ver 2.6.3まで有効
// configTime( -JST, 0, "ntp.nict.jp", "ntp.jst.mfeed.ad.jp"); // 2.7.0, 2.7.1ならこれでも可
configTzTime("JST-9", "ntp.nict.jp", "ntp.jst.mfeed.ad.jp"); // 2.7.0以降, esp32コンパチ
}
void loop() {
time_t t;
struct tm *tm;
static const char *wd[7] = {"Sun","Mon","Tue","Wed","Thr","Fri","Sat"};
t = time(NULL);
tm = localtime(&t);
Serial.printf("ESP8266/Arduino ver%s : %04d/%02d/%02d(%s) %02d:%02d:%02d\n",
__STR(ARDUINO_ESP8266_GIT_DESC),
tm->tm_year+1900, tm->tm_mon+1, tm->tm_mday,
wd[tm->tm_wday],
tm->tm_hour, tm->tm_min, tm->tm_sec);
delay(1000);
}
런타임 시리얼 모니터는 다음과 같습니다.
좀 더 자세한 이야기
configTime(), time()등의 소스를 보면(자), 각각 sntp.c 의 대응 함수를 호출하고 있는 것 같고, sntp.c를 보면 1시간에 1회 ntp 패킷을 던지고 있는 것 같습니다.
Reference
이 문제에 관하여(ESP8266의 ntp 설정은 한 줄로), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/h_nari/items/d0374d1e1e36b9d988c0
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
configTzTime() 함수로 설정합니다. 선언은 Arduino.h에 있으므로 특별히 포함 할 필요가 없습니다.
Arduino.h
// esp32 api compatibility
inline void configTzTime(const char* tz, const char* server1,
const char* server2 = nullptr, const char* server3 = nullptr)
일본에서 사용하는 경우 tz는 "JST-9"입니다. tz에 지정 가능한 문자열은 TZ.h을 참조하십시오.
ntp의 동기화가 완료되면 time() 함수가 UNIX 시간(1970년 1월 1일 0시 0분 0초부터의 윤초를 포함하지 않는 초수)을 돌려주게 되므로, 이것을 localtime() 함수 등 로 변환하여 이용합니다. 동기화가 완료될 때까지 time() 함수는 0을 반환하므로 이상한 시간을 표시하고 싶지 않은 경우는 비0이 반환될 때까지 기다리는 것이 좋습니다. time() 이나 localtime() 의 사용에는 time.h 를 인클루드 할 필요가 있습니다.
샘플 프로그램
사용 예를 나타냅니다.
clock.ino#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <time.h>
#define WIFI_SSID "your_wifi_ssid"
#define WIFI_PASSWORD "your_wifi_password"
#define JST 3600*9
void setup() {
Serial.begin(115200);
delay(100);
Serial.print("\n\nReset:\n");
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while(WiFi.status() != WL_CONNECTED) {
Serial.print('.');
delay(500);
}
Serial.println();
Serial.printf("Connected, IP address: ");
Serial.println(WiFi.localIP());
// configTime( JST, 0, "ntp.nict.jp", "ntp.jst.mfeed.ad.jp"); // esp8266/arduino ver 2.6.3まで有効
// configTime( -JST, 0, "ntp.nict.jp", "ntp.jst.mfeed.ad.jp"); // 2.7.0, 2.7.1ならこれでも可
configTzTime("JST-9", "ntp.nict.jp", "ntp.jst.mfeed.ad.jp"); // 2.7.0以降, esp32コンパチ
}
void loop() {
time_t t;
struct tm *tm;
static const char *wd[7] = {"Sun","Mon","Tue","Wed","Thr","Fri","Sat"};
t = time(NULL);
tm = localtime(&t);
Serial.printf("ESP8266/Arduino ver%s : %04d/%02d/%02d(%s) %02d:%02d:%02d\n",
__STR(ARDUINO_ESP8266_GIT_DESC),
tm->tm_year+1900, tm->tm_mon+1, tm->tm_mday,
wd[tm->tm_wday],
tm->tm_hour, tm->tm_min, tm->tm_sec);
delay(1000);
}
런타임 시리얼 모니터는 다음과 같습니다.
좀 더 자세한 이야기
configTime(), time()등의 소스를 보면(자), 각각 sntp.c 의 대응 함수를 호출하고 있는 것 같고, sntp.c를 보면 1시간에 1회 ntp 패킷을 던지고 있는 것 같습니다.
Reference
이 문제에 관하여(ESP8266의 ntp 설정은 한 줄로), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/h_nari/items/d0374d1e1e36b9d988c0
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <time.h>
#define WIFI_SSID "your_wifi_ssid"
#define WIFI_PASSWORD "your_wifi_password"
#define JST 3600*9
void setup() {
Serial.begin(115200);
delay(100);
Serial.print("\n\nReset:\n");
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while(WiFi.status() != WL_CONNECTED) {
Serial.print('.');
delay(500);
}
Serial.println();
Serial.printf("Connected, IP address: ");
Serial.println(WiFi.localIP());
// configTime( JST, 0, "ntp.nict.jp", "ntp.jst.mfeed.ad.jp"); // esp8266/arduino ver 2.6.3まで有効
// configTime( -JST, 0, "ntp.nict.jp", "ntp.jst.mfeed.ad.jp"); // 2.7.0, 2.7.1ならこれでも可
configTzTime("JST-9", "ntp.nict.jp", "ntp.jst.mfeed.ad.jp"); // 2.7.0以降, esp32コンパチ
}
void loop() {
time_t t;
struct tm *tm;
static const char *wd[7] = {"Sun","Mon","Tue","Wed","Thr","Fri","Sat"};
t = time(NULL);
tm = localtime(&t);
Serial.printf("ESP8266/Arduino ver%s : %04d/%02d/%02d(%s) %02d:%02d:%02d\n",
__STR(ARDUINO_ESP8266_GIT_DESC),
tm->tm_year+1900, tm->tm_mon+1, tm->tm_mday,
wd[tm->tm_wday],
tm->tm_hour, tm->tm_min, tm->tm_sec);
delay(1000);
}
configTime(), time()등의 소스를 보면(자), 각각 sntp.c 의 대응 함수를 호출하고 있는 것 같고, sntp.c를 보면 1시간에 1회 ntp 패킷을 던지고 있는 것 같습니다.
Reference
이 문제에 관하여(ESP8266의 ntp 설정은 한 줄로), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/h_nari/items/d0374d1e1e36b9d988c0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)