こちらのプログラムを参考にしました。
Study:M5Stack Core2 / RTC & touch
プログラム
ntp_adjust/ntp_adjust.ino
// ---------------------------------------------------------------
/*
ntp_adjust.ino
Sep/02/2021
*/
// ---------------------------------------------------------------
#include <M5Core2.h>
#include <time.h>
#include <WiFiMulti.h>
// for WiFi
char ssid[] = "some-ssid";
char password[] = "some-password";
WiFiMulti wifiMulti;
// for Time
const char* ntpServer = "ntp.jst.mfeed.ad.jp";
const long gmtOffset_sec = 9 * 3600;
const int daylightOffset_sec = 0;
RTC_DateTypeDef RTC_DateStruct; // Data
RTC_TimeTypeDef RTC_TimeStruct; // Time
static const char *wd[7] = {"Sun","Mon","Tue","Wed","Thr","Fri","Sat"};
struct tm timeinfo;
String dateStr;
String timeStr;
// ---------------------------------------------------------------
void getTimeFromNTP()
{
// To get Time from NTP server
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
while (!getLocalTime(&timeinfo))
{
delay(1000);
}
}
// ---------------------------------------------------------------
void setNTP2RTC()
{
// timeSet
getTimeFromNTP();
getLocalTime(&timeinfo);
// read RTC
M5.Rtc.GetTime(&RTC_TimeStruct);
M5.Rtc.GetDate(&RTC_DateStruct);
// --- to over write date&time
RTC_DateStruct.Year = timeinfo.tm_year + 1900;
RTC_DateStruct.Month = timeinfo.tm_mon + 1;
RTC_DateStruct.Date = timeinfo.tm_mday;
RTC_DateStruct.WeekDay = timeinfo.tm_wday;
M5.Rtc.SetDate(&RTC_DateStruct);
RTC_TimeStruct.Hours = timeinfo.tm_hour;
RTC_TimeStruct.Minutes = timeinfo.tm_min;
RTC_TimeStruct.Seconds = timeinfo.tm_sec;
M5.Rtc.SetTime(&RTC_TimeStruct);
}
// ---------------------------------------------------------------
void setup()
{
M5.begin();
M5.Lcd.fillScreen(BLACK);
M5.Lcd.setTextColor(WHITE,BLACK);
wifiMulti.addAP(ssid, password);
Serial.println("*** setup *** end ***");
}
// ---------------------------------------------------------------
void loop()
{
M5.Rtc.GetDate(&RTC_DateStruct);
M5.Rtc.GetTime(&RTC_TimeStruct);
M5.Lcd.setTextSize(3);
M5.Lcd.setCursor(10, 60, 1);
M5.Lcd.printf("%04d.%02d.%02d %s\n", RTC_DateStruct.Year, RTC_DateStruct.Month, RTC_DateStruct.Date, wd[RTC_DateStruct.WeekDay]);
M5.Lcd.setTextSize(5);
M5.Lcd.setCursor(30, 140, 1);
M5.Lcd.printf("%02d:%02d:%02d", RTC_TimeStruct.Hours, RTC_TimeStruct.Minutes, RTC_TimeStruct.Seconds);
delay(500);
}
// ---------------------------------------------------------------