電子趣味の部屋

電子系のガジェットやアプリ開発等の趣味の話題を書いてます

M5StickC Plus で時計制作

眠ってたM5StickC Plusを有効活用できないかと思い、時計を作ってみました。

プログラムもそんなに大きくならなかったので、全文掲載します。

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

const char* ssid       = "(Wi-fiアクセスポイントのSSID)";  
const char* password   = "(Wi-fiアクセスポイントのパスワード)";

const char *wd[] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};

// NTPサーバのURL
const char* ntpServer =  "ntp.jst.mfeed.ad.jp";
//  GMT+9(日本時間)
const long  gmtOffset_sec = 9 * 3600;
// サマータイム時差(無し)
const int   daylightOffset_sec = 0;


void setup() {
  M5.begin();
  
  M5.Lcd.fillScreen(TFT_BLACK);
  M5.Lcd.setTextColor(TFT_WHITE, TFT_BLACK);
  M5.Lcd.setRotation(1);

  adjust();

}

void loop() {
  struct tm t;
  if (getLocalTime(&t)) {
    M5.Lcd.setTextSize(5);
    M5.Lcd.setCursor(20, 25);
    M5.Lcd.printf("%02d:%02d", t.tm_hour, t.tm_min);
    M5.Lcd.setTextSize(3);
    M5.Lcd.setCursor(175, 38);
    M5.Lcd.printf(":%02d", t.tm_sec);
    M5.Lcd.setTextSize(3);
    M5.Lcd.setCursor(10, 90);
    M5.Lcd.printf("%04d/%02d/%02d", (1900 + t.tm_year), (t.tm_mon + 1), t.tm_mday);
    M5.Lcd.setTextSize(2);
    M5.Lcd.setCursor(197, 97);
    M5.Lcd.printf("%s", wd[t.tm_wday]);

    if (t.tm_hour == 4 && t.tm_min == 0 && t.tm_sec == 0) {
      adjust();
    }
  }
  
  delay(100);

}

void adjust() {
  WiFi.begin(ssid, password);

  // 500ms*120回なので、1分でタイムアウト
  for (int i = 0; i < 120 && WiFi.status() != WL_CONNECTED; i++) {
    delay(500);
  }
  if (WiFi.status() != WL_CONNECTED) {
    // Wifi接続エラー
  }

  if (WiFi.status() == WL_CONNECTED) {
    configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
    struct tm t;
    if (!getLocalTime(&t)) {
      // NTPサーバ接続エラー
    }
  }
  WiFi.disconnect(true);
  WiFi.mode(WIFI_OFF);
}

M5StickC Plus

M5StickC Plus

  • スイッチサイエンス
Amazon