ESP32 NTP時計

JH7UBC 2020.2.9


 ESP32でWiFi接続ができましたので、NTP(Netwaork Time Protocol)サーバーから時刻の情報を取得して、LCDに表示するNTP時計を作ってみます。
 NTPサーバーから時刻情報を取得するスケッチは、Autumn-Color.comというサイトのスケッチをコピーさせていただきました。
このスケッチでは、Arduino IDEのシリアルモニタに時刻を表示させています。
コピペしてESP32-DevKitCで実行してみると



年/月/日(曜日)時:分:秒が1秒ごとに表示されます。これをLCDに表示してみます。
LCDは、1602(16文字2行)ですので、1行では入りきりませんので、
1行目に年/月/日(曜日)を表示して、2行目に時:分:秒を表示することにします。
LCDは、I2C用を使いましたのでESP32-DevKitCとの接続は、次のようにします。

スケッチです。「your SSID」、「your password」には自宅のWiFiのSSIDとパスワードを入れてます。

 
/*
 * ESP32 NTP Clock I2C LCD Display
 * 2020.02.08
 * JH7UBC Keiji Hata
 */

#include <WiFi.h>
#include <time.h>
#include <LiquidCrystal_I2C.h>

// set the LCD
int lcdColumns = 16;
int lcdRows = 2;
LiquidCrystal_I2C lcd(0x27, lcdColumns, lcdRows);


#define JST     3600* 9
// set WiFi ssid & password
const char* ssid = "your SSID";
const char* password = "your passwaord";


void setup() {
  // initialize LCD
  lcd.init();
  // turn on LCD backlight                     
  lcd.backlight();
  //WiFi set up
  WiFi.begin(ssid, password);
  while(WiFi.status() != WL_CONNECTED) {
    lcd.print(".");
    delay(500);
  }
  lcd.clear();
  lcd.print("Connected");
  lcd.setCursor(0, 1);
  lcd.print("IP:");
  lcd.print(WiFi.localIP());
  delay(1000);
  lcd.clear();
  configTime( JST, 0, "ntp.nict.jp", "ntp.jst.mfeed.ad.jp");
}

void loop() {
  time_t t;
  struct tm *tm;
  static const char *wd[7] = {"Sun","Mon","Tue","Wed","Thr","Fri","Sat"};
 
  t = time(NULL);
  tm = localtime(&t);
  lcd.home();
  lcd.printf("%04d/%02d/%02d(%s)",tm->tm_year+1900, tm->tm_mon+1, tm->tm_mday,wd[tm->tm_wday]);
  lcd.setCursor(0,1);
  lcd.printf("%02d:%02d:%02d",tm->tm_hour, tm->tm_min, tm->tm_sec);
  delay(1000);
}

configTime()は、NTPサーバーに接続する関数、getlocalTime()は時刻情報を取得する関数で、
説明は「Arduinoで遊ぶページ」のこちらのページが参考になりました。
WiFiに接続すると、1行目に「Connected」、2行目にIPアドレスが表示されます。
その後、日付と時刻が表示されます。

inserted by FC2 system