wifi + NTP (Arduino IDE + ESP ボードマネージャ)

はじめに

ESP32 マイコンの大きな特徴は wifi を内蔵していることである. 本ドキュメントでは wifi への接続と, NTP (Network Time Protocol) を用いた現在時刻の取得についてテストする.

プログラムの作成と実行

これまでと同様に, スケッチ例を利用する.

スケッチ例 (SimpleTime.ino) を修正したものを以下に示す. 修正した行は 4-9 行目の設定部のみである.

1 #include <WiFi.h>
2 #include "time.h"
3 
4 const char* ssid       = "YOUR SSSID";   //SSID 入力
5 const char* password   = "YOUR PASSWD";  //パスワード 入力
6 
7 const char* ntpServer = "ntp.nict.jp";
8 const long  gmtOffset_sec = 3600 * 9;  //時差9時間
9 const int   daylightOffset_sec = 0;    //夏時間なし
10 
11 void printLocalTime()
12 {
13   struct tm timeinfo;
14   if(!getLocalTime(&timeinfo)){
15     Serial.println("Failed to obtain time");
16     return;
17   }
18   Serial.println(&timeinfo, "%A, %B %d %Y %H:%M:%S");
19 }
20 
21 void setup()
22 {
23   Serial.begin(115200);
24   
25   //connect to WiFi
26   Serial.printf("Connecting to %s ", ssid);
27   WiFi.begin(ssid, password);
28   while (WiFi.status() != WL_CONNECTED) {
29       delay(500);
30       Serial.print(".");
31   }
32   Serial.println(" CONNECTED");
33   
34   //init and get the time
35   configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
36   printLocalTime();
37 
38   //disconnect WiFi as it's no longer needed
39   WiFi.disconnect(true);
40   WiFi.mode(WIFI_OFF);
41 }
42 
43 void loop()
44 {
45   delay(1000);
46   printLocalTime();
47 }

プログラムのコンパイル・マイコンへの書き込み・シリアルモニタでのチェックを行う. なお, このサンプルではシリアル通信の速度が 115200 となっているので, シリアルモニタにおいてもその通信速度に設定しなければならない.