NTP 時鐘

Description

Description
作者:胡均綸

專案簡介

NTP Protocol 是什麼東西?簡單來說, NTP 是個時間伺服器,在這我不是真的要裝一個 NTP 的 server,我只是要抓它來用 (我是 Client 端,向 NTP server 抓取我要的時間) 而已,簡而言之,我要做的只是去 NTP server 抓取時間,進而顯示到我的 console 上,詳細 NTP Protocol 的介紹我是參考:鳥哥的 Linux 私房菜 – NTP 伺服器

8×8 LED Matrix 成像

LED 面板就是這次 case 的精華片段,時鐘最主要的功能 – 顯示時間 (最後會使用 8×8 的方型點陣)。而我先去了解LED 的成像原理,之後再嘗試各種不同的圖形數字,以及圖形數字間的轉換。

開發板的選擇:NodeMCU ESP8266 as master

之所以要將 master 的這個重責大任由 Arduino UNO 交棒給 NodeMCU ESP8266 其實原因很簡單。

第一,NodeMCU 的記憶體比 Arduino UNO 大多了 (根本小巫見大巫),由於現在要把事情都在 master 做好,slave 只負責吃什麼顯示什麼而已,而光是截至目前的程式碼就快讓 Arduino UNO 吃不消,何況之後還要加上 NTP & RTC 等等的功能,所以換成 NodeMCU 勢必成為必要。

第二,NodeMCU 有 ESP8266 這個 WiFi chip,有連網的功能我才能去抓 NTP server 的資料。

第三,NodeMCU 的速度 (運算能力) 也比 Arduino UNO 高出許多,讓我可以在短時間內執行我需要的功能 (但後面出了大 trouble….誰叫我是 trouble maker….,接下來會分享)。

綜合以上的原因,不選擇使用 Arduino UNO 而用 NodeMCU ESP8266 來替代。

問題與解決:網路斷了,時間不準怎麼辦?

我希望最後做出來的 NTP 時鐘不會因為網路的問題而 crash 掉,因此先去了解 ESP8266 的一個強大功能 – WiFimanager。WiFimanager 強大的地方,在於它有記憶性,比如說我這次連接到了某個 AP (以下稱 A1),到了下次重新連線的時候,因為記憶性的關係,device 會自動連線到 A1,倘若再重新連線時偵測不到原先的 A1 (可能掛了,也可能沒開) ,WiFimanager 自己本身有設計 timeout,過了一小段時間如果沒有偵測到原先記憶中的 AP (即 A1),它會開啟自己的 AP 功能 (ESP8266 的 AP 軟體功能) 我們就可以用 device 去連上這個 AP (連到 ESP8266 內的 server,即連上內網的概念),而跑出來的頁面即是讓 user 可以自己去選擇要讓這個 ESP8266 的 WiFi chip 連線到哪個其他的 AP (絕對不可能會有 A1 了),並輸入 password 重新完成 (對外網的) 連線。

應用:計時器 + 火箭動畫 + 顏色變化

接著,我要做的是先將 Colorduino 作為「計時器」 (畢竟一步一步來),先把我原先寫好的數字 (一個 number 拆成兩次送,一次 16 bytes) 拿來用,產生六個數字,並且進位的 work 都寫好後,開始做我一直很想做的動畫。當時我沒有想到特別好 (應該說比較聰明) 的 solution,直接每隔 1 秒產生不同的圖案並且循序漸進,不過應該有更有效,讓 code 有更好的延展性的做法,當時沒有想太多畢竟需求不是那麼大 (現在看當然是錯誤的觀念,我現在也真的吃足了苦頭,文章後面會提到為什麼)。

對我來說每隔 1 秒顯示不同圖案非常簡單,所以馬上進入到顏色變化的部分。畢竟這組 Colorduino 每塊都能產生 256 * 256 * 256 的 colors,如果只用紅色,一方面對不起發明全彩 LED 的大神,另一方面真的很不美觀,因此我決定將火箭改為黃色。就這樣完成了階段性的任務,而接下來就要實際顯示現在時間,以及真的去抓 NTP server 的資料,定期 update 並成功顯示在 Colorduino 上,這段內容也滿長的,請參考原文-RTC & NTP & master and slave 整合

小結

最後的部分大家有空可以到我的原文章看一看-NTP 時鐘 _最終章,關於程式碼的調整其實有很大的彈性空間,而在debug上我也著實下了不少功夫,希望這個專案的整個流程,能為各位帶來一點啟發,或少走一點冤忘路!

Ryan Hu

Ryan Hu

政大休學生,對於 IOT 軟硬整合相關有極大興趣,鍾愛無人機,目前獨自完成的專案像是瓦力號、GPS 自動語音導覽系統、NTP 網路自動校時時鐘,喜歡流浪。
個人網站:https://makeryan.wordpress.com/
個人信箱:ryanhu0306@gmail.com
Ryan Hu

Latest posts by Ryan Hu (see all)

    Contact

    Contact
    • Category
      Art & Design, Smart Home, Smart Office
    • Tags
      NodeMCU ESP8266, NTP

    Project簡述

    Project簡述
    • 簡述
      在完成自走小車 – 瓦力號後,接下來我選擇的 case 是 NTP 的 LED 電子時鐘,問我為什麼,其實也沒有什麼特別的原因,只自己覺得很酷感覺可以試試看!
    • 作者
      胡均綸

    您的姓名 〈需填寫〉

    您的電子郵件信箱 〈需填寫〉

    主旨

    您的信件內容