NTPサーバーから現在の時間を得るプログラム
void configTime(long gmtOffset_sec, int daylightOffset_sec, const char* server1, const char* server2, const char* server3);
NTPサーバと、ローカルのタイムゾーンを設定long gmtOffset_sec
: GMTとローカル時刻との差(単位は秒)int daylightOffset_sec
: 夏時間で進める時間(単位は秒)。const char* server1
NTPサーバ。最低一つ設定する。const char* server2
const char* server
3
bool getLocalTime(struct tm * info, uint32_t ms);
ローカル時刻を取得する。struct tm * info
: 取得する時刻情報を格納する領域uint32_t ms
: タイムアウト時間。省略した場合は5000が設定される。
サンプルプログラム
get_time.ino
#include "Arduino.h"
#include <WiFi.h>
#include "time.h"
const char *SSID = "your SSID";
const char *PASSWORD = "your password";
const char* ntpServer = "pool.ntp.org";
const long gmtOffset_sec = 9 * 3600;
const int daylightOffset_sec = 0;
void setup()
{
Serial.begin(115200);
delay(100);
Serial.println("Connecting to WiFi");
WiFi.disconnect(true);
WiFi.softAPdisconnect(true);
delay(500);
WiFi.mode(WIFI_STA);
WiFi.begin(SSID, PASSWORD);
delay(1000);
// Try forever
while (WiFi.status() != WL_CONNECTED)
{
Serial.println("...Connecting to WiFi");
delay(1000);
}
Serial.println("Connected");
Serial.println(SSID);
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
//init and get the time
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
}
void loop()
{
struct tm timeinfo;
char buf_time[80];
int a,b;
getLocalTime(&timeinfo);
while(1)
{
sprintf(buf_time,"%04d %02d%02d %02d:%02d:%02d",timeinfo.tm_year+1900,timeinfo.tm_mon+1,timeinfo.tm_mday,timeinfo.tm_hour,timeinfo.tm_min,timeinfo.tm_sec);
Serial.println(buf_time);
a = b = timeinfo.tm_sec;
while( a == b)
{
getLocalTime(&timeinfo);
b = timeinfo.tm_sec;
}
}
}
- 8,9行: 自分のSSIDとPasswordを入力して下さい。
- 11行: NTP サーバー
- 12行: 時間差(日本は、9 * 3600 sec)
- 13行: サマータイム 0
- 42行: NTPサーバと、ローカルのタイムゾーンを設定
- 51,59行: ここで時間を読み込んでいます。
- 54,55行: 取得した時間の表示。
- struct tm構造体の要素
- int tm_sec; 秒 - (0~61)
- int tm_min; 分 - (0~59)
- int tm_hour; 時 - (0~23)
- int tm_mday; 日 - (1~31)
- int tm_mon; 1月からの月数 - (0~11)
- int tm_year; 1900年からの年数
- int tm_wday; 日曜日からの日数 - (0~6)
- int tm_yday; 1月1日からの日数 - (0~365)
- int tm_isdst; 夏時間フラグ
プログラムを実行するとシリアルモニターに現在の時間が表示されます。