{"id":50566545,"url":"https://github.com/nlink-jp/m5-clock","last_synced_at":"2026-06-04T15:02:03.941Z","repository":{"id":351331594,"uuid":"1185422258","full_name":"nlink-jp/m5-clock","owner":"nlink-jp","description":"NTP-synchronized clock for M5Stack Core2, configured via SD card","archived":false,"fork":false,"pushed_at":"2026-05-04T10:40:40.000Z","size":33,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-04T12:32:35.890Z","etag":null,"topics":["arduino","arduino-sketch","clock","esp32","m5stack","m5stack-core2","ntp"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nlink-jp.png","metadata":{"files":{"readme":"README.ja.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-03-18T15:09:22.000Z","updated_at":"2026-05-04T10:40:44.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/nlink-jp/m5-clock","commit_stats":null,"previous_names":["nlink-jp/m5-clock"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/nlink-jp/m5-clock","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nlink-jp%2Fm5-clock","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nlink-jp%2Fm5-clock/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nlink-jp%2Fm5-clock/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nlink-jp%2Fm5-clock/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nlink-jp","download_url":"https://codeload.github.com/nlink-jp/m5-clock/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nlink-jp%2Fm5-clock/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33910137,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-04T02:00:06.755Z","response_time":64,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["arduino","arduino-sketch","clock","esp32","m5stack","m5stack-core2","ntp"],"created_at":"2026-06-04T15:02:02.804Z","updated_at":"2026-06-04T15:02:03.936Z","avatar_url":"https://github.com/nlink-jp.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# m5-clock\n\nM5Stack Core2 用 NTP 同期デジタル時計。\n\n日付、曜日、時刻（秒付き）を表示。起動時および1時間ごとにWiFi/NTPで時刻同期し、WiFi不通時はRTCでバックアップ。自動輝度調整（ナイトモード）とSDカード設定に対応。\n\n## ハードウェア\n\n- **M5Stack Core2**（ESP32、LCD 320x240、RTC、PSRAM、バッテリ）\n\n## 機能\n\n- 日付（YYYY-MM-DD）、曜日、時刻（HH:MM:SS）表示\n- NTP時刻同期（起動時 + 1時間間隔）\n- WiFi不通時のRTCバックアップ\n- ナイトモード（時間帯による自動輝度調整）\n- バッテリ残量表示\n- 静的IP / DHCP 切替\n- SDカードJSON設定\n- ボタンA: 設定表示、ボタンC: 手動NTP同期\n\n## セットアップ\n\n### Arduino IDE\n\n1. ボードインストール: Board Managerから **M5Stack**（v3.x）\n2. ライブラリインストール:\n   - `M5Unified`\n   - `ArduinoJson`\n3. `m5-clock/m5-clock.ino` を開く\n4. ボード選択: **M5Stack-Core2**\n5. アップロード\n\n### SDカード設定\n\n`sdcard/config.example.json` を SDカードに `/config.json` としてコピーし編集：\n\n```json\n{\n  \"wifi\": {\n    \"ssid\": \"your_ssid\",\n    \"password\": \"your_password\"\n  },\n  \"ntp\": {\n    \"server\": \"pool.ntp.org\",\n    \"timezone\": 9,\n    \"daylight_offset_sec\": 0\n  },\n  \"static_ip\": {\n    \"enabled\": false,\n    \"ip\": \"192.168.1.123\",\n    \"gateway\": \"192.168.1.1\",\n    \"subnet\": \"255.255.255.0\",\n    \"dns1\": \"8.8.8.8\"\n  },\n  \"night_mode\": {\n    \"enabled\": true,\n    \"start_hour\": 22,\n    \"end_hour\": 7,\n    \"brightness\": 60,\n    \"day_brightness\": 200\n  }\n}\n```\n\n| フィールド | デフォルト | 説明 |\n|-----------|----------|------|\n| `wifi.ssid` | (空) | WiFi SSID |\n| `wifi.password` | (空) | WiFiパスワード |\n| `ntp.server` | `pool.ntp.org` | NTPサーバー |\n| `ntp.timezone` | `9` | UTCオフセット（時間） |\n| `ntp.daylight_offset_sec` | `0` | 夏時間オフセット（秒） |\n| `static_ip.enabled` | `false` | DHCPの代わりに静的IPを使用 |\n| `night_mode.enabled` | `true` | 自動輝度調整を有効化 |\n| `night_mode.start_hour` | `22` | ナイトモード開始時刻（24h） |\n| `night_mode.end_hour` | `7` | ナイトモード終了時刻（24h） |\n| `night_mode.brightness` | `60` | 夜間のLCD輝度（0-255） |\n| `night_mode.day_brightness` | `200` | 昼間のLCD輝度（0-255） |\n\nSDカードなしでもデフォルト設定（UTC+9、pool.ntp.org）で動作する。\n\n## アーキテクチャ\n\n```\nm5-clock/\n├── m5-clock/\n│   ├── m5-clock.ino         ← メインスケッチ（setup/loop）\n│   ├── config.h             ← ビルド時定数\n│   ├── config_manager.h     ← SDカードJSON設定読み取り\n│   ├── ntp_sync.h           ← WiFi + NTP同期（内部UTC、表示時にTZ適用）\n│   └── display_manager.h    ← 時計/設定表示（スプライトダブルバッファ）\n└── sdcard/\n    └── config.example.json  ← SDカード設定テンプレート\n```\n\n## 技術ノート\n\n- **時刻処理:** システムクロックも RTC も常に UTC で保持し、表示時にのみタイムゾーンオフセットを適用する。TZ 環境変数は起動時に `UTC0` に固定され、`mktime`/`gmtime_r` は常に UTC として解釈される。\n- **起動経路:** 起動時に RTC からシステムクロックを seed するため、NTP の応答を待たずに正しい時刻表示が立ち上がる。NTP 同期成功時には RTC に UTC を書き戻すので、電源断・再起動でも時刻が保持される。\n- **ノンブロッキング同期:** Wi-Fi 接続から NTP 応答待ちまでを `loop()` 駆動の状態機械として実装しており、同期中も時計表示は 1Hz で更新され続ける（フッターに `NTP syncing..` を表示）。\n- **同期リトライ:** NTP 同期失敗時は指数バックオフ（1分・2分・4分…、上限は通常同期間隔）で再試行する。1時間放置されない。\n- **ナイトモード:** M5UnifiedはCore2のバックライト輝度を正しく制御する。旧M5Core2.hの`setBrightness()`は正常に動作しなかった。\n- **SDカード:** Core2はGPIO4をSD CSピンとして使用。明示的な`SD.begin(4)`が必要。\n\n## v1.x からの移行\n\nv2.0 でレガシー `M5Core2.h` から `M5Unified` に移行：\n- ESP32 ボードパッケージ v3.x が必要\n- レガシー `M5Core2` ライブラリがインストール済みなら削除\n- ライブラリマネージャから `M5Unified` をインストール\n\n## ライセンス\n\n[LICENSE](LICENSE)を参照。\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnlink-jp%2Fm5-clock","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnlink-jp%2Fm5-clock","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnlink-jp%2Fm5-clock/lists"}