ESP32電子工作ファンのブログ

ESP32を使った電子工作の話題。その他備忘録など。

ESP32とNTPサーバーを接続してLEDマトリクスにNTP時計を表示してみた。

ESP32とNTPサーバーを接続してLEDマトリクスにNTPの時刻を表示させてみました。

スマホの時刻もどこかのNTPサーバーに同期しているはずなので、分単位で同期すると思っていましたが、予想通りスマホの時刻更新と同時にESP32のLEDマトリクスの時刻も更新されました。

動画がその様子。

 

youtu.be

 

ソースコードGithubに上げてます。

https://github.com/riraosan/RainfallNotifer/blob/master/src/main.cpp

簡単です。ESP32をWifiと接続します。

#include <WiFiClientSecure.h>
 
Setup()内で以下を記述
 
WiFi.begin(ssid, password);
while(WiFi.status() != WL_CONNECTED) {
 Serial.print('.');
 delay(500);
}
Serial.println();
Serial.printf("Connected, IP address: ");
Serial.println(WiFi.localIP());

 

time.hをインクルードして、configtimeでNTPサーバから時刻を取得します。

configTime( JST, 0, "ntp.nict.jp", "ntp.jst.mfeed.ad.jp");
時刻は以下のように取得
void PrintTime(String &str, int flag)
{
 char tmp_str[10] = {0};
 time_t t;
 struct tm *tm;
 //static const char *wd[7] = {"Sun","Mon","Tue","Wed","Thr","Fri","Sat"};

 t = time(NULL);
 tm = localtime(&t);
 //Serial.printf(" %04d/%02d/%02d(%s) %02d:%02d:%02d\n",
 // tm->tm_year+1900, tm->tm_mon+1, tm->tm_mday,
 // wd[tm->tm_wday],
 // tm->tm_hour, tm->tm_min, tm->tm_sec);
 if(flag == 0){
  sprintf(tmp_str, "*|%02d:%02d|", tm->tm_hour, tm->tm_min);
 }else{
  sprintf(tmp_str, " |%02d %02d|", tm->tm_hour, tm->tm_min);
 }

 str = tmp_str;
}