ESP32やESP8266もArduino同様RTC機能(時計)はついていない。
しかし、ESP32やESP8266には無線LAN機能がついている。RTCを使用せずとも、NTPサーバーと定期的に同期し時間管理する事が可能だ。
スケッチも簡単で、標準ライブラリにある configTime 関数でNTPサーバーを設定するだけである。同期は1時間に1回行われる様だ。
以下は起動時に無線LAN接続後NTPサーバーとの同期を待機し、以降シリアルモニターに日時を出力するサンプル。
#include <WiFi.h>
#include <time.h>
unsigned long last_timer;
#define JST 3600*9
char chbuff[32];
const char* ssid = "APのSSID";
const char* password = "APのパスワード";
void setup() {
Serial.begin(9600);
Serial.print("Connecting Wifi");
WiFi.mode(WIFI_STA);
if (String(WiFi.SSID()) != String(ssid)) {
WiFi.begin(ssid, password);
}
while (WiFi.status() != WL_CONNECTED) {
delay(500);
}
configTime( JST, 0, "ntp.nict.jp", "ntp.jst.mfeed.ad.jp");
Serial.print("Sync time.");
time_t t;
do {
t = time(NULL);
delay(100);
}while (t == 0);
}
void loop() {
time_t t;
struct tm *tm;
t = time(NULL);
tm = localtime(&t);
sprintf(chbuff, "%02d/%02d %02d:%02d:%02d", tm->tm_mon + 1, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec);
Serial.println(chbuff);
delay(1000);
}