処理概要

NTPを使用した時刻設定は以下の2つの手順で簡単に行うことができます。

  • WiFiによるネットワークへの接続
  • configTzTime() 関数によるNTPを使用した時刻同期の設定

サンプルスケッチ

NTPで時刻同期をした日時をOLEDディスプレイに表示するESP32用のスケッチを示します。

スケッチの起動後NTPで時刻設定し、その後、OLEDディスプレイに日時を表示する時計になります。

#include <U8x8lib.h>
#include <WiFi.h>

const char *ssid = "yourssid";
const char *password = "yourpasswd";

U8X8_SSD1306_128X64_NONAME_HW_I2C u8x8(U8X8_PIN_NONE);

struct tm timeInfo;

void setup() {
  u8x8.begin();
  u8x8.setFont(u8x8_font_7x14B_1x2_r);

  if (WiFi.begin(ssid, password) != WL_DISCONNECTED) {
    ESP.restart();
  }

  u8x8.print("Connecting.\n");

  while (WiFi.status() != WL_CONNECTED) {
    u8x8.print(".");
    delay(1000);
  }

  u8x8.print("\nConnected!");

  configTzTime("JST-9", "ntp.nict.jp", "ntp.jst.mfeed.ad.jp");

  getLocalTime(&timeInfo);
  u8x8.clearDisplay() ;
}

char tstr[20];

void loop() {
  getLocalTime(&timeInfo);
  if (timeInfo.tm_year != 70) {
    sprintf(tstr, "%04d/%02d/%02d",
            timeInfo.tm_year + 1900, timeInfo.tm_mon + 1, timeInfo.tm_mday);
    u8x8.draw1x2String(6, 0, tstr);
    sprintf(tstr, "%02d:%02d:%02d",
            timeInfo.tm_hour, timeInfo.tm_min, timeInfo.tm_sec);
    u8x8.draw2x2String(0, 4, tstr);
  } else {
    u8x8.draw1x2String(6, 0, "...sync.");
  }

  delay(200);
}

関連記事

MicroPythonでNTPを使用した時刻同期を行う方法を紹介しています。