ESPで実行ログに現在時刻をつけて確認したいと思い、ネットから時刻を取得する方法を調べてみました。
こちらで紹介されているコードをそのまま使ってみて、ちゃんと取得できたので自分のプログラムに入れてみたのですが、なぜか取得できませんでした。
取得できない原因
原因は意外なところにあって、WiFi接続を固定IPアドレスにしていたからでした。ESPWiFiはIPアドレスやゲートウェイの設定はあってもDNSサーバーを設定する方法が無いらしく、固定IPだけ設定すると名前解決ができなくて取得に失敗するっぽいです。
(中略) /* * 固定IPに設定していると、名前解決できない!(=ドメイン名でアクセスできない) */ IPAddress ip(192,168,1,33); IPAddress gateway(192,168,1,1); IPAddress subnet(255,255,255,0); WiFi.config(ip, gateway, subnet); 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());
解決方法
解決方法としては、mDNSとかいうライブラリを使って名前解決できるようにするか、簡易的には以下のようにNTPサーバーをIPアドレスで指定すればOKです。
(中略) //configTime( JST, 0, "ntp.nict.jp", "ntp.jst.mfeed.ad.jp"); // 名前解決できないときは直接IPアドレスでNTPサーバーを指定 configTime( JST, 0, "133.243.238.244");
これだけ。簡単。
本当はちゃんとDNS使いたいけど今の環境だと色々難しいので早く回線契約したい。