monoのアイコン画像

ESP8266でNTPサーバから時刻を取得する

mono 2020年06月14日に作成  (2020年06月15日に更新)

(某共有サイトに投稿していた元記事を移動してきた記事です。)

はじめに
電子工作をやってると、特定の時間や一定時間ごとに動かしたいという動作が出てくる。
そういう時にNTPサーバから時刻を取得したら便利かなと思ったので、このやり方で正しいのかわからないけど書き記しておきます。

準備
ArduinoIDEのスケッチ>ライブラリをインクルード>ライブラリを管理から「ライブラリマネージャ」を開き「NTPClient」をインストールする。
キャプションを入力できます

とりあえず時刻を表示してみる
exapmleファイルから引用

exampleから引用

#include <NTPClient.h> // change next line to use with another board/shield #include <ESP8266WiFi.h> //#include <WiFi.h> // for WiFi shield //#include <WiFi101.h> // for WiFi 101 shield or MKR1000 #include <WiFiUdp.h> const char *ssid = "WiFiのSSID"; const char *password = "WiFiのパスワード"; WiFiUDP ntpUDP; NTPClient timeClient(ntpUDP); void setup(){ Serial.begin(115200); WiFi.begin(ssid, password); while ( WiFi.status() != WL_CONNECTED ) { delay ( 500 ); Serial.print ( "." ); } timeClient.begin(); } void loop() { timeClient.update(); Serial.println(timeClient.getFormattedTime()); delay(1000); }

キャプションを入力できます

UTC時刻だけど表示出来た。
日本標準時にするには、

//NTPClient timeClient(ntpUDP);を以下に書き換える
NTPClient timeClient(ntpUDP,32400);

時/分/秒(HOUR, MINUTE, SECOND)を別々に表示する
時/分/秒を別々に取得出来たほうがより便利かなと思ったので一応…
timeClient.getMinutes()で分を取得できる。時や秒も同様に

Serial.println(timeClient.getHours());
 Serial.println(timeClient.getMinutes());
 Serial.println(timeClient.getSeconds());

キャプションを入力できます
出来た。
ただ、1秒毎の取得だとNTPサーバに負荷がかかりそうだけどどうなんだろうか…

1
monoのアイコン画像
プログラミング初心者の元経営学部で現法学部のバリバリ文系男子です。 アウトプット用に作りました。 生暖かい目で見守って頂けたら幸いです。 某共有サイトに投稿していた電子工作に関する記事はelchikaに移しました。電子工作以外のプログラミングは引き続き某共有サイトに投稿しています。 https://qiita.com/mono_taro
mono さんが 2020/06/14 に 編集 をしました。 (メッセージ: 初版)
mono さんが 2020/06/15 に 編集 をしました。
ログインしてコメントを投稿する