ESP-WROOM-02 の時刻合わせ

パソコンやスマホ、ゲーム機の時計ならば電源を切っていても、 バッテリーが残っている限り、時計は動き続けます。 が、ESP-WROOM-02 には時間保持用のバッテリーがありません。 電源を入れる度に 1970/01/01 00:00:00 に巻き戻ります。 このままだと時計が使えません。

とはいえ、ESP-WROOM-02 は Wi-Fi 経由でインターネットに繋がる能力が備わっています。 電源投入後に一定間隔ごとに NTP サーバーに時刻を問い合わせて、時計を合わせればよいわけです。

GitHub – FWeinb/NTPClient: Connect to a NTP server

を使います。

#include <NTPClient.h>

// 情報通信研究機構(NICT)が公開している NTP サーバーで時刻合わせ
// 日本標準時プロジェクト 公開NTP http://www2.nict.go.jp/aeri/sts/tsp/PubNtp/
// UTC+9 = 60(秒) * 60(分) * 9(時間) = 32400(秒)
// 24時間ごとに問い合わせ = 1000(ミリ秒) * 60(秒) * 60(分) * 24(時間) = 86400000(ミリ秒)
NTPClient timeClient("ntp.nict.jp", 32400, 86400000);

void setup() {
  Serial.begin(115200);
  delay(10);

  // Wi-Fi への接続処理を済ます

}

void loop() {
  // 時刻合わせのため、24時間ごとに NTP サーバーへ問い合わせる
  timeClient.update();

  Serial.println(timeClient.getFormattedTime()); // "hh:mm:ss" の文字列が返ってきます
  Serial.println(timeClient.getRawTime());       // unsigned long で UNIX 時間が返ってきます

  delay(1000);
}

これでインターネットに繋がっていれば、24時間ごとに時刻合わせします。

NTP サーバーへの問い合わせ間隔は自由に変更できますが、 あまり短くしてもサーバーに負担を掛けてしまうし、そこまでズレないので、ほどほどにしましょう。

Arduino IDE 1.6.8
ESP8266 core for Arduino 2.1.0