ESP32 Timeライブラリを作りました
概要
こんにちは、けりです。 みなさん、ESP32使ってますか?
今回はESP32の時刻合わせのArduinoライブラリを作ったので紹介します。
ESP32Time
ESP32Time - Arduino Library for ESP32 Time Adjustment
こちらはArduinoのライブラリです。zipファイルをダウンロードして、Arduino IDEで読み込めば簡単に使うことができます。ライブラリを読み込むと、自動的にサンプルプログラムも追加されます。
ライブラリの概要
- NTPから時刻を取得し、ESP32の内部の時計を合わせる
- 1日ごとに時計を合わせる
使い方
- WiFiに接続する
setup()
内でESP32Time.begin()
を呼んで時刻合わせタスクを起動する
動作環境
Arduino core for ESP32 WiFi chip環境があれば動作します。
コード
最新のコードはこちら
ESP32Time.h
ESP32Timeクラスの実体は既に定義されていますが、ESP32.begin()
をしない限りCPUリソースを消費することはありません。
#pragma once
#include <WiFi.h>
#include "freertos/task.h"
class ESP32Time;
extern class ESP32Time ESP32Time;
class ESP32Time {
public:
ESP32Time(char *time_zone = "JST-9");
~ESP32Time();
void begin(int stack_size = 1024, int priority = 0);
void set_time();
private:
const char* time_zone;
xTaskHandle handle;
void periodicTimeAdjustmentTask();
bool getNtpTime(struct timeval * tvp);
};
サンプルプログラム
/**
@file ESP32Time.ino
@author kerikun11
@date 2017.08.29
*/
#include <WiFi.h>
#include <ESP32Time.h>
const char* ssid = "";
const char* psk = "";
void setup() {
Serial.begin(115200);
// WiFi Connection
log_i("connecting to %s ...", ssid);
WiFi.begin(ssid, psk);
if (WiFi.waitForConnectResult() != WL_CONNECTED) {
log_e("WiFi connection failed:(");
while (1) delay(1000);
}
// adjust the time just now,
// and automatically adjust the time once a day
ESP32Time.begin(); //< adjusted the time
}
void loop() {
// get the time
time_t t = time(NULL);
struct tm *t_st;
t_st = localtime(&t);
// display the time
log_d("year: %d", 1900 + t_st->tm_year);
log_d("month: %d", 1 + t_st->tm_mon);
log_d("month day: %d", t_st->tm_mday);
log_d("week day: %c%c", "SMTWTFS"[t_st->tm_wday], "uouehra"[t_st->tm_wday]);
log_d("year day: %d", 1 + t_st->tm_yday);
log_d("hour: %d", t_st->tm_hour);
log_d("minute: %d", t_st->tm_min);
log_d("second: %d", t_st->tm_sec);
log_d("ctime: %s", ctime(&t));
// wait
delay(1000);
}
まとめ
ESP32Time.begin()
をするだけなので、すぐに使えます!
なんらかのアプリケーションを作るとき、時刻管理は欠かせないのでとりあえずbeginしときましょう。