Arduinoで遊ぶページ

Arduinoで遊んだ結果を残すページです。
garretlab
サンプルプログラム解説

概要

NTPサーバから時刻を取得し、ESP32の時刻を合わせ、表示します。

プログラム

定義等

#include <WiFi.h>
#include "time.h"

const char* ssid       = "YOUR_SSID";
const char* password   = "YOUR_PASS";

const char* ntpServer = "pool.ntp.org";
const long  gmtOffset_sec = 3600;
const int   daylightOffset_sec = 3600;

ssidとpasswordは、WiFiアクセス用のSSID/パスフレーズです。

ntpServerには、NTPサーバを設定します。

gmtOffset_secは、ローカル時刻とGMTとの差分を秒で設定します。日本の場合は、GMTより9時間早いので、9*3600 = 32400 を設定します。

daylightOffset_secは、夏時間の差分を秒で設定します。日本の場合は、夏時間はないので、0を設定します。

printLocalTime()

void printLocalTime()
{
  struct tm timeinfo;
  if(!getLocalTime(&timeinfo)){
    Serial.println("Failed to obtain time");
    return;
  }
  Serial.println(&timeinfo, "%A, %B %d %Y %H:%M:%S");
}

この関数は、シリアルコンソールに、現在時刻を表示します。

getLocalTime()は、現在の日付と時刻を取得する関数です。取得した日付・時刻情報は、struct tm型であらわされます。

最後に、Serial.println()で、時刻をシリアルコンソールに表示します。

このフォーマットは、ESP32での拡張で、以下に示すように、内部では、64バイトの領域を用意し、strftime()を呼び出しています。fはフォーマットで、NULLポインタを渡したときは、"%c"が設定されます。

    char buf[64];
    size_t written = strftime(buf, 64, f, timeinfo);

setup()

void setup()
{
  Serial.begin(115200);
  
  //connect to WiFi
  Serial.printf("Connecting to %s ", ssid);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
      delay(500);
      Serial.print(".");
  }
  Serial.println(" CONNECTED");
  
  //init and get the time
  configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
  printLocalTime();

  //disconnect WiFi as it's no longer needed
  WiFi.disconnect(true);
  WiFi.mode(WIFI_OFF);
}

WiFi.begin()により、ssidで指定したアクセスポイントに接続します。この際のパスフレーズは、passwordです。WiFiは、WiFi.cppで定義されている変数です。

WiFi.status()は、現在の接続状態を返却します。アクセスポイントに接続しているときは、WL_CONNECTEDが返ってきます。

configTime()は、NTPサーバと時刻を同期させるとともに、ローカルのタイムゾーンの設定を行います。

WiFi.disconnect()は、ESP32をWiFiネットワークから切断します。WiFI.mode()により、null modeに設定します。

loop()

void loop()
{
  delay(1000);
  printLocalTime();
}

1秒ごとにprintLocalTime()を呼び出して、時刻をシリアルコンソールに表示します。

バージョン

1.0.0



メニューを表示するためにJavaScriptを有効にしてください。

Arduinoで遊ぶページ
Copyright © 2018 garretlab all rights reserved.
inserted by FC2 system