專案總結
這是一個使用 ESP32 開發板製作的 網路校時電子鐘。它透過 WiFi 連接到 NTP (網路時間協定) 伺服器來自動獲取並同步標準時間,然後將時間(小時和分鐘)顯示在一個 TM1637 4位數7段顯示器上。
整個專案是基於 PlatformIO 和 Arduino 框架開發的。
https://github.com/IZUMO-F303/ESP32_TM1632_simple_NTP_clock
成果

核心功能分析
從 src/main.cpp 的程式碼來看,這個時鐘實現了以下主要功能:
-
自動時間同步 (Time Sync):
- 啟動時同步:裝置啟動後會立即嘗試連接 WiFi 並從 NTP 伺服器(優先使用 ntp.nict.jp)獲取時間。
- 定時重新同步:每隔一小時 (syncInterval = 3600000 毫秒) 會自動重新進行一次時間同步,以確保時間的準確性。
- 節省資源:在成功同步時間後,程式會主動斷開 WiFi 連線 (WiFi.disconnect(true); WiFi.mode(WIFI_OFF);),這是一個很好的實踐,可以降低功耗和網路佔用。
- 錯誤處理:程式包含基本的超時機制。如果 WiFi 連線或 NTP 同步在10秒內未完成,它會放棄本次同步並在序列埠監控視窗(Serial Monitor)中印出錯誤訊息。
-
時間顯示 (Time Display):
- 以「小時:分鐘」的格式顯示在 TM1637 顯示器上。
- 小時和分鐘之間的分號 (:) 會被持續點亮 (segment_data[1] |= 0x80;)。
-
亮度自動調整 (Brightness Adjustment):
- 程式會根據當前時間自動調整顯示器的亮度。
- 白天 (7:00 - 18:59):亮度設定為較亮的 0x0f。
- 夜間 (其他時間):亮度設定為較暗的 0x08。
專案結構分析
這個專案遵循了 PlatformIO 的標準結構:
-
platformio.ini:
- 這是 PlatformIO 的核心設定檔。
- platform = espressif32: 指定了開發平台為 ESP32。
- board = esp32dev: 使用通用的 ESP32 開發板設定。
- framework = arduino: 使用 Arduino 框架進行開發。
- lib_deps = smougenot/TM1637@…: 這是關鍵相依性。它告訴 PlatformIO 這個專案需要 smougenot 開發的 TM1637 函式庫,編譯時會自動下載安裝。
- monitor_speed = 115200: 設定序列埠監控視窗的鮑率為 115200。
-
src/main.cpp:
- 專案的主要程式碼,包含了所有邏輯的實現。
-
include/wifi_credentials.h:
- 這是一個用來存放 WiFi 帳號密碼的標頭檔。main.cpp 透過 #include “wifi_credentials.h” 來讀取這些資訊。這樣做的好處是將敏感資訊與主要程式碼分離,方便修改且更安全。
-
lib/:
- 用於存放專案私有的函式庫,目前是空的。
-
README.md:
- 專案的說明文件(日文),解釋了功能、硬體需求和設定步驟。
-
power7.bat:
- 一個 Windows 批次檔,用於在專案目錄下快速啟動 PowerShell 7。這是一個開發者個人使用的輔助工具,與專案本身功能無關。
-
prompt/:
- 從檔名和內容(prompt1.txt, prompt2.txt)來看,這些檔案很可能是開發過程中給予 AI 或開發者自己的指令或備忘錄。例如,prompt2.txt 中提到「Wifi的IDとパスワードの設定はインクルードファイル に入れてください」(請將WiFi的ID和密碼設定放入include檔案中),這項要求已經在目前的程式碼中實現了。
注意事項與結論
-
硬體型號不一致:專案的根目錄名稱是 ESP32_TM1632_simple_NTP_clock,但 platformio.ini 的相依函式庫和 main.cpp 中使用的都是 TM1637 顯示器。因此,這個專案實際上是為 TM1637 設計的,資料夾名稱中的 TM1632 應該是一個筆誤。
-
如何使用:
- 硬體接線:根據 README.md 的說明,將 TM1637 顯示器連接到 ESP32:
- CLK -> GPIO17
- DIO -> GPIO16
- VCC -> 3.3V
- GND -> GND
- 修改 WiFi 憑證:打開 include/wifi_credentials.h 檔案,將 your_ssid 和 your_password 替換成你自己的 WiFi 名稱和密碼。
- 編譯與上傳:使用 Visual Studio Code 中的 PlatformIO 擴充功能打開這個專案資料夾,點擊「Upload」按鈕即可。PlatformIO 會自動處理函式庫下載、編譯和上傳。
- 硬體接線:根據 README.md 的說明,將 TM1637 顯示器連接到 ESP32: