Creating an NTP Time Clock Using Esp32 and Seven Segment Display

專案總結

這是一個使用 ESP32 開發板製作的 網路校時電子鐘。它透過 WiFi 連接到 NTP (網路時間協定) 伺服器來自動獲取並同步標準時間,然後將時間(小時和分鐘)顯示在一個 TM1637 4位數7段顯示器上。

整個專案是基於 PlatformIO 和 Arduino 框架開發的。

https://github.com/IZUMO-F303/ESP32_TM1632_simple_NTP_clock

成果

實際成果圖


核心功能分析

src/main.cpp 的程式碼來看,這個時鐘實現了以下主要功能:

  1. 自動時間同步 (Time Sync):

    • 啟動時同步:裝置啟動後會立即嘗試連接 WiFi 並從 NTP 伺服器(優先使用 ntp.nict.jp)獲取時間。
    • 定時重新同步:每隔一小時 (syncInterval = 3600000 毫秒) 會自動重新進行一次時間同步,以確保時間的準確性。
    • 節省資源:在成功同步時間後,程式會主動斷開 WiFi 連線 (WiFi.disconnect(true); WiFi.mode(WIFI_OFF);),這是一個很好的實踐,可以降低功耗和網路佔用。
    • 錯誤處理:程式包含基本的超時機制。如果 WiFi 連線或 NTP 同步在10秒內未完成,它會放棄本次同步並在序列埠監控視窗(Serial Monitor)中印出錯誤訊息。
  2. 時間顯示 (Time Display):

    • 以「小時:分鐘」的格式顯示在 TM1637 顯示器上。
    • 小時和分鐘之間的分號 (:) 會被持續點亮 (segment_data[1] |= 0x80;)。
  3. 亮度自動調整 (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 應該是一個筆誤。

  • 如何使用:

    1. 硬體接線:根據 README.md 的說明,將 TM1637 顯示器連接到 ESP32:
      • CLK -> GPIO17
      • DIO -> GPIO16
      • VCC -> 3.3V
      • GND -> GND
    2. 修改 WiFi 憑證:打開 include/wifi_credentials.h 檔案,將 your_ssid 和 your_password 替換成你自己的 WiFi 名稱和密碼。
    3. 編譯與上傳:使用 Visual Studio Code 中的 PlatformIO 擴充功能打開這個專案資料夾,點擊「Upload」按鈕即可。PlatformIO 會自動處理函式庫下載、編譯和上傳。
Built with Hugo
Theme Stack designed by Jimmy