RTC(Real Time Clock) |
WiFiを使って日付と時刻の取得の記事で取得したデータをRTC(Real Time Clock)に適用します。
/* ******************************************************************************* * M5Stack prototype * date:2022/7/27 * Author Sadajejeje ******************************************************************************* */ #include <M5Core2.h> #include <WiFi.h> #define JST (3600L * 9) const char* ssid = "your_ssid"; const char* password = "your_password"; bool conected = true; RTC_TimeTypeDef rtcTime; RTC_DateTypeDef rtcDate; void setup(){ M5.begin(); //Init M5Core2 M5.Lcd.setTextSize(2); int connectCnt = 0; WiFi.begin(ssid, password); M5.Rtc.begin(); //Initialize the RTC clock. while (WiFi.status() != WL_CONNECTED){ delay(500); M5.Lcd.print('*'); connectCnt++; if(connectCnt >=10){ conected = false; break; } } if(conected == true){ M5.Lcd.print("\n\nIP Address "); M5.Lcd.println(WiFi.localIP()); delay(1000); configTime(JST,0,"ntp.nict.jp", "time.google.com", "ntp.jst.mfeed.ad.jp"); } M5.Lcd.setTextSize(3); } void loop(){ struct tm tm; char buf[32]; if(conected == true){ if(getLocalTime(&tm)){ M5.Lcd.setTextDatum(TC_DATUM); sprintf(buf, "%d/%d/%d\n", tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday); M5.Lcd.drawString(buf, 160, 80, 2); sprintf(buf, "%02d:%02d:%02d\n", tm.tm_hour, tm.tm_min, tm.tm_sec); M5.Lcd.drawString(buf, 160, 140, 2); rtcDate.Year = tm.tm_year + 1900; rtcDate.Month = tm.tm_mon + 1; rtcDate.Date = tm.tm_mday; M5.Rtc.SetDate(&rtcDate); rtcTime.Hours = tm.tm_hour; rtcTime.Minutes = tm.tm_min; rtcTime.Seconds = tm.tm_sec; M5.Rtc.SetTime(&rtcTime); } } else{ M5.Lcd.setTextDatum(TC_DATUM); M5.Rtc.GetDate(&rtcDate); sprintf(buf, "%d/%d/%d\n", rtcDate.Year, rtcDate.Month, rtcDate.Date); M5.Lcd.drawString(buf, 160, 80, 2); M5.Rtc.GetTime(&rtcTime); sprintf(buf, "%02d:%02d:%02d\n", rtcTime.Hours, rtcTime.Minutes, rtcTime.Seconds); M5.Lcd.drawString(buf, 160, 140, 2); } delay(1000); } ssidとpasswordはご自分の機器に合わせてください。 M5.Rtc.SetDate(&rtcDate); M5.Rtc.SetTime(&rtcTime); RTCに日付と時間のデータをセットします。 M5.Rtc.GetDate(&rtcDate); M5.Rtc.GetTime(&rtcTime); RTCからのデータを読みだします。 I2Cだとちょっと面倒ですが、簡単なAPIです。 WiFiが使えるときはNPTからのデータを表示します。 WiFiが使えないときはRTCからのデータを表示します。 RTCは製品により1日で1秒狂ったり、1カ月で1秒しか狂わないなど製品の精度が異なります。 |