0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

M5StickC Plus2 のRTCを同期する

Last updated at Posted at 2024-09-11

M5Unified を使ったRTC同期のソースコードが見つからなかったので書きました。

ソースコード

#include "M5StickCPlus2.h"

#include <WiFi.h>
#include "time.h"
const char* ssid       = "wifiiiii";
const char* password   = "passssss";

void setup()
{
    // put your setup code here, to run once:
    M5.begin();
    M5.Lcd.setRotation(3);
    M5.Lcd.fillScreen(BLACK);
    M5.Lcd.setTextSize(1);
    M5.Lcd.setCursor(40, 0, 2);
    M5.Lcd.println("RTC NTP TEST");
    // 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");
    // Set ntp time to local
    configTime(3600L * 9, 0, "ntp.nict.jp", "ntp.jst.mfeed.ad.jp");

    // 起動ごとに時刻同期するために同期タイミングを一時的に変更
    auto default_interval = sntp_get_sync_interval(); // ミリ秒単位
    sntp_set_system_time(1, 0);                       // 1秒

    // Set RTC
    struct tm timeInfo;
    if (getLocalTime(&timeInfo))
    {
        M5.Rtc.setDateTime(timeInfo);
    }

    sntp_set_system_time(default_interval * 1000, 0); // 同期タイミングを戻す

    // disconnect WiFi
    WiFi.disconnect(true);
    WiFi.mode(WIFI_OFF);
}

void loop()
{
    M5.Lcd.setCursor(0, 30);
    M5.Lcd.printf("Data: %04d-%02d-%02d\n", M5.Rtc.getDate().year, M5.Rtc.getDate().month, M5.Rtc.getDate().date);
    M5.Lcd.printf("Time: %02d : %02d : %02d\n", M5.Rtc.getTime().hours, M5.Rtc.getTime().minutes, M5.Rtc.getTime().seconds);
    delay(500);
}

処理内容の説明

  • setup()
    • WiFiに接続する
    • NTPの同期タイミングを変更する(デフォルトで3時間?)
    • NTPサーバーに接続し、ローカルの時刻を更新する
    • ローカルの時刻をもとにRTCの時刻を更新する
    • NTPの同期タイミングを戻す
  • loop()
    • RTC から取得した日時を、500ミリ秒ごとに表示する

はまりポイント

同期タイミングを変更せずに時刻更新を行うと、Wifiが常時接続されていない&常時起動しておくための装置ではないため、時刻同期が全然行われない。
時刻同期が行われないままgetLoclTime()をすると、M5Stickを起動するたびに、時差分の9時間ずつ時計がずれていく。
そのため起動時には必ず時刻同期を行うようにする。

参考にさせていただいたサイト

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?