2020年8月13日 星期四

[ESP32-Cam] 讀取網際網路上的時間

 ESP 系列開發板因為可以連上網際網路,所以當專案或裝置需要精確的時間時,可以從網路上獲取目前的時間。


Step1 點擊下拉功能表 [檔案] > [範例] > [ESP] > [Time] > SimpleTime。出現視窗


Step2 請修改程式碼,填入正確的 ssid 和密碼,並上傳程式,成功後記得移除 GPIO0 和 Gnd 腳位上的接線。

Step3 打開「序列埠監控視窗」。出現視窗

您可以看到視窗內有顯示目前的日期和時間。


好的,我們透過網路讀取到時間了,但仔細看了一下,雖然日期是對的,時間卻是怪怪的,這是因為時區不正確。

想要解決時區不正確的問題,必須先瞭解程式碼,以下就針對有關的程式碼來說明。

const char* ntpServer = "pool.ntp.org";  // 讀取時間的伺服器網址

const long  gmtOffset_sec = 3600;  // GMT 時區的偏移量

const int   daylightOffset_sec = 3600;  // 日光節約時間的偏移量


根據以上資料,我們知道這個時間是去一個叫 "pool.ntp.org" 的網站取得的,它運作的方式如下圖


再來,我們搜尋到一個可以顯示 GMT 時間的網站,您可以開啟以下網頁並觀察一下時間

https://24timezones.com/time-zone/gmt#gref


然後,我們回過頭來把時區偏移量設為0,程式碼修改成

const long  gmtOffset_sec = 0;  // GMT 時區的偏移量

再重新上載程式,上載成功後再重新打開「序列埠監控視窗」。此時您看到的畫面應該類似下圖,只是時間不同。

這裡可以觀察到 GMT 網頁上的時間和「序列埠監控視窗」內的時間相差了 1 小時。而我的電腦時間是 13:12:43。

我並不想去理會為什麼相差 1 小時,我在意的是「序列埠監控視窗」內的時間比我的時間慢了 7 小時。而 7 小時等於 60*60*7=25200 秒。


我們回過頭來把時區偏移量設為 25200,程式碼修改成

const long  gmtOffset_sec = 25200;  // GMT 時區的偏移量

再重新上載程式,上載成功後再重新打開「序列埠監控視窗」。此時您可以檢查一下時間,應該是正確了。

在我們能夠掌握時間之後,就可以對 ESP32-Cam 做更多的應用,例如指定某一特定的時間開啟攝影鏡頭做監控...等等。


採購資訊

ESP32 開發指南(書) https://www.ruten.com.tw/item/show?22023657661505

ESP32-Cam 開發板 https://www.ruten.com.tw/item/show?22018501441929

ESP32-Cam 雙軸雲台(基本款)套件 https://www.ruten.com.tw/item/show?22024688065979

ESP32-Cam 雙軸雲台(人體偵測款)套件 https://www.ruten.com.tw/item/show?22024688076465





沒有留言:

張貼留言