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); }