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 <time.h>
#include <LiquidCrystal_I2C.h>
int lcdColumns = 16;
int lcdRows = 2;
LiquidCrystal_I2C lcd(0x27, lcdColumns, lcdRows);
const char* password = "your passwaord";
// 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");
}
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アドレスが表示されます。
その後、日付と時刻が表示されます。