LoginSignup
0
0

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-02-14

はじめに

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

準備

ArduinoIDEのスケッチ>ライブラリをインクルード>ライブラリを管理から「ライブラリマネージャ」を開き「NTPClient」をインストールする。
Screenshot from 2020-02-14 20-57-07.png

とりあえず時刻を表示してみる

exapmleファイルから引用

#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);
}

Screenshot from 2020-02-14 21-15-06.png
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());

Screenshot from 2020-02-14 21-48-27.png
出来た。
ただ、1秒毎の取得だとNTPサーバに負荷がかかりそうだけどどうなんだろうか…

追記

elchikaに記事を投稿しました。
(https://elchika.com/article/fe06afea-ee55-43ab-8952-8acc96f56778/)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0