mono が 2020年06月15日08時37分48秒 に編集
初版
タイトルの変更
ESP8266でNTPサーバから時刻を取得する
タグの変更
備忘録
ESP8266
Arduino
本文の変更
**はじめに** 電子工作をやってると、特定の時間や一定時間ごとに動かしたいという動作が出てくる。 そういう時にNTPサーバから時刻を取得したら便利かなと思ったので、このやり方で正しいのかわからないけど書き記しておきます。 **準備** ArduinoIDEのスケッチ>ライブラリをインクルード>ライブラリを管理から「ライブラリマネージャ」を開き「NTPClient」をインストールする。  **とりあえず時刻を表示してみる** exapmleファイルから引用 ```arduino: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時刻だけど表示出来た。 日本標準時にするには、 ```arduino: //NTPClient timeClient(ntpUDP);を以下に書き換える NTPClient timeClient(ntpUDP,32400); ``` **時/分/秒(HOUR, MINUTE, SECOND)を別々に表示する** 時/分/秒を別々に取得出来たほうがより便利かなと思ったので一応… timeClient.getMinutes()で分を取得できる。時や秒も同様に ```arduino: Serial.println(timeClient.getHours()); Serial.println(timeClient.getMinutes()); Serial.println(timeClient.getSeconds()); ```  出来た。 ただ、1秒毎の取得だとNTPサーバに負荷がかかりそうだけどどうなんだろうか…