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アドレスが表示されます。
その後、日付と時刻が表示されます。