Program Resource

開発者向け各種コード、アルゴリズム、リソース情報ライブラリ もしくはねふぁの覚え書き

ESP32やESP8266もArduino同様RTC機能(時計)はついていない。

しかし、ESP32やESP8266には無線LAN機能がついている。RTCを使用せずとも、NTPサーバーと定期的に同期し時間管理する事が可能だ。

スケッチも簡単で、標準ライブラリにある configTime 関数でNTPサーバーを設定するだけである。同期は1時間に1回行われる様だ。

以下は起動時に無線LAN接続後NTPサーバーとの同期を待機し、以降シリアルモニターに日時を出力するサンプル。

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

unsigned long last_timer;
#define JST     3600*9
char chbuff[32];

const char* ssid = "APのSSID";
const char* password = "APのパスワード";

void setup() {
     Serial.begin(9600);

     Serial.print("Connecting Wifi");
     WiFi.mode(WIFI_STA);
     if (String(WiFi.SSID()) != String(ssid)) {
          WiFi.begin(ssid, password);
     }  
  
     while (WiFi.status() != WL_CONNECTED) {
          delay(500);
     }
     
	configTime( JST, 0, "ntp.nict.jp", "ntp.jst.mfeed.ad.jp");
	Serial.print("Sync time.");
	time_t t;
	do {
		t = time(NULL);
		delay(100);
	}while (t == 0);
}

void loop() {
	time_t t;
	struct tm *tm;
	t = time(NULL);
	tm = localtime(&t);
	sprintf(chbuff, "%02d/%02d %02d:%02d:%02d", tm->tm_mon + 1, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec);
	Serial.println(chbuff);
	delay(1000);
}

Print Friendly, PDF & Email

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です


*

CAPTCHA