現在の時間を得る

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* server3
  • 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;  夏時間フラグ

プログラムを実行するとシリアルモニターに現在の時間が表示されます。