◆M5Stack TAB5 ArduinoIDE M5GFX RTC RX8130環境でニキシー管時計もどきと
 パタパタ時計もどきを表示してみました。
 最初WiFi経由のNTPで時間を取得使用としましたが、ArduinoIDEではまだWiFiがサポート
 されていなくてRTCからの時間取得で時計を表示しました。

 *ニキシー管時計もどき
 tab5_nixie
 *パタパタ時計もどき
 tab5_flip

 ◆動作状況
 
 
 *ニキシー管時計もどきについては、下記ブログ内記事も参照して下さい。

 *パタパタ時計もどきについては、下記ブログ内記事も参照して下さい。
 ・数種のLCD付ESP32ボードで「パタパタ時計もどき」を表示させてみた


1.開発環境 2025/05/22時点
  ①Windows11 X64 Pro 24H2 
  ②Arduino IDE 2.3.6
  ➂ESP32ボードバージョンV3.2.0

2.概要
 ①LCDの描画は、M5GFXライブラリで出来ました。
 ②TAB5搭載RTCのライブラリは、ArtronShop_RX8130CEを使いました。
 (ライブラリマネージャーで検索してインストールしました。)
 ➂ニキシー管時計のイメージデータは、以前から使っていたものを使用しました。

3.スケッチについて
 ①RTCに時刻をセットするスケッチ「set_time.ino」
  (1) RTCにセットしたい時刻に、スケッチを修正します。(書き込む30秒後の時刻)
  (2) スケッチをESP32P4に書き込み、セット時刻まで待ち「Enter」押下します。
   *30秒操作が無ければRTCに書き込まずに(4)へ進みます。
  (3) するとRTCにセットされ「loop」で読み込まれます。
  (4) 時刻が有っていれば終了。狂っていれば①に戻ります。

//set_time.ino
//2025/05/23 By JK1VCK ニキシー管&パタパタ時計 RTC RX8130CE対応版
//blog URL:https://gijin77.blog.jp/archives/44667829.html

//ボード:"ESP32P4 Dev Module"
//USB CDC On Boot: "Enabled"
//Flash Size: "16MB (128Mb)"
//Partition Scheme: "16M Flash (3MB APP/9.9MB FATFS)"
//PSRAM: "Enabled"
//USB Mode: "Hardware CDC and JTAG"

#include <Arduino.h>
#include <ArtronShop_RX8130CE.h>
#include <Wire.h>
#include <time.h>

ArtronShop_RX8130CE rtc(&Wire);

// 曜日を文字列に変換
const char* wday_str(int wday) {
  const char* wd[] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
  if (wday >= 0 && wday <= 6) return wd[wday];
  return "???";
}

void setup() {
  Serial.begin(115200);
  Wire.begin(31,32);

  while (!rtc.begin()) {
    Serial.println("RX8130CE init error !");
    delay(1000);
  }
  Serial.println("Press any key in 5 seconds to set RTC...");
  unsigned long start = millis();
  while (millis() - start < 30000) {
    if (Serial.available()) {
      Serial.read(); // consume
  // 必要に応じて初期設定(例:RTCに時刻をセット)

      struct tm t;
      t.tm_year = 2025 - 1900;
      t.tm_mon = 4; // 5月(0起点)
      t.tm_mday = 22;
      t.tm_hour = 16;
      t.tm_min = 44;
      t.tm_sec = 0;

      time_t tt = mktime(&t); // 曜日も自動で計算される
      localtime_r(&tt, &t);   // tm_wday にも反映される

      rtc.setTime(t);
      break;
    }
  }
}

void loop() {
  struct tm t;
  if (rtc.getTime(&t)) {
    Serial.printf(
      "Datetime: %02d:%02d:%02d %d/%d/%d (%s)\n",
      t.tm_hour, t.tm_min, t.tm_sec,
      t.tm_mday, t.tm_mon + 1, t.tm_year + 1900,
      wday_str(t.tm_wday)
    );
  } else {
    Serial.println("Get time from RTC fail !");
  }
  delay(1000);
}
 
 ②スケッチ内でニキシー管/パタパタ時計を選択できるようにしました。
  *下記の三つのファイルは、サイズが大きいためzipファイルでダウンロード
  (1)tab5_nixie_flip_clock_V3.ino   *ニキシー管/パタパタ時計スケッチ
  (2)img_nixie_tube.h      *ニキシー管時計のイメージファイル
  (3)img_flip.h          *パタパタ時計のイメージファイル

  (保障無しの自己責任で)  tab5_nixie_flip_clock_V3.zip

 ➂ニキシー管/パタパタ時計の選択は、下記の部分を修正してコンパイル&
  書き込みます。
 
 tab5_nixie_flip_clock_V3.ino
 23://************************************************************
 24:int flip_flg=1;   //パタパタ時計=1 ニキシー管=0
 25:uint16_t d_color=WHITE; //コロン等カラー
 26:#define GFX_BL 22 //バックライト制御用GPIO番号
 27://************************************************************

 ④2025/5/31追記
  又は、loopの最後の部分「disp_colon(0)」の後112行に下記を追記すれば10分毎に
  ニキシー管/パタパタ時計を交互に表示出来ます。

   disp_colon(0);//コロン消灯
    if (((n_minute%10)==0)&&(n_second==0)) {//10分毎に反転
      tft.fillScreen(BLACK);
      bday=bh1=bh0=bm1=bm0=bs1=bs0=99;
      flip_flg=!flip_flg;
      if (flip_flg) d_color=WHITE; else d_color=ORANGE;
    }

 ⑤IDEの設定(下記を選択して書き込みます。)

 //ボード:"ESP32P4 Dev Module"
 //ポート: "COM13"

 //USB CDC On Boot: "Enabled"
 //CPU Frequency: "360MHz"
 //Core Debug Level: "None"
 //USB DFU On Boot: "Disabled"
 //Erase All Flash Before Sketch Upload: "Disabled"
 //Flash Frequency: "80MHz"
 //Flash Mode: "QIO"
 //Flash Size: "16MB (128Mb)"
 //JTAG Adapter: "Disabled"
 //USB Firmware MSC On Boot: "Disabled"
 //Partition Scheme: "16M Flash (3MB APP/9.9MB FATFS)"
 //PSRAM: "Enabled"
 //Upload Mode: "UARTO / Hardware CDC"
 //Upload Speed: "921600"
 //USB Mode: "Hardware CDC and JTAG"

 TAB5_IDE_設定


4.このあと、TAB5のデモに戻すには下記を参照して戻す事が出来ます。
 TAB5工場出荷時のデモに戻す方法