眠ってた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);
}


