JH7UBCブログ

アマチュア無線 電子工作 家庭菜園など趣味のブログです

ESP32 NTP 時計

2020-02-09 12:46:22 | ESP32

 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アドレスが表示されます。

その後、日付と時刻が表示されます。