| ESP32 教學 | MicroPython | OLED Clock 網路時鐘 (上) | 601 |

這篇使用小型 OLED 顯示器來實現一個簡單的 OLED Clock 網路時鐘,除 ESP32 開機時可以透過 wifi 來取得目前時間外,且將網路下載下來的 json 資料存到 ESP32 rtc 內部參數內,即時的顯示目前的時間與日期。

小提醒:此 project 需要整合之前提及的多種模組,建議不熟悉基本操作的朋友可以參考下面文章:

1. WorldTimeAPI

如果要透過網路來獲得目前所在時區時間,可以使用的方法很多,micropython 也有個內建 ntp 可以去操作,不過這邊 JIMI哥 推薦大家一個簡單的網路API — WorldTimeAPI (http://worldtimeapi.org/),只要透過 http 的 GET 方法發出 request 後,便會回傳設定地區的時間資料。

進入官網後,在上方的區域會顯示目前瀏覽器的時區與時間,至於如何操作這個網站的 API 呢? 滾動該網頁可以看到下方有 EXAMPLE 可以參考,對於我們今天所設定功能來說,最合適的應該是下面這個:

只要送出 http請求:『 http://worldtimeapi.org/api/timezone/區域/位置』,網站就會回傳一個 json格式的時間資料(也可以是文字檔.txt)。區域跟位置的資料怎麼查?官網也有提供一個支援的List清單,http://worldtimeapi.org/timezones, Taiwan 就是在 Asia / Taipei 這個項目下。

接著來看一下,當瀏覽器送出設定區域的 Http 請求時,回傳的 json 格式內容:(各位朋友可以試著用瀏覽器打入http://worldtimeapi.org/api/timezone/Asia/Taipei,就可以看到伺服器回傳類似下面的內容)

{"abbreviation":"CST",
 "client_ip":"125.230.xx.xx",
 "datetime":"2021-05-04T10:03:38.405757+08:00",
 "day_of_week":2,
 "day_of_year":124,
 "dst":false,
 "dst_from":null,
 "dst_offset":0,
 "dst_until":null,
 "raw_offset":28800,
 "timezone":"Asia/Taipei",
 "unixtime":1620093818,
 "utc_datetime":"2021-05-04T02:03:38.405757+00:00",
 "utc_offset":"+08:00",
 "week_number":18}

key 的項目眾多,跟我們所在時區有關的就是 datetime 的數值,所以我們只要將其字串取出我們所需要的時間資料,放入 ESP32 的 RTC 內,就可以完成時間設定的初始化。

2. ujson 模組

因為此次會需要處理到 json 格式的時間資料,就來聊聊 micropython 內的 ujson 模組,ujson 模組與電腦版的python 很類似, 不過精簡需許多。最常用的就是兩個方法:ujson.loads() 跟 ujson.dumps(),下面分別來講解這兩個方法怎麼用:

  1. ujson.load():就是將下載下來的字串檔案,轉換成 python 字典型態(dict),前提是檔案資料必須是用 json 格式編排。
  2. ujson.dumps():跟 loads() 剛好相反,將字典型態(json格式)轉成字串型態。

下面為簡單的操作範例:

透過 REPL 模式,就可以清楚看到實際 json 格式的資料怎麼使用,不過最常用的還是 ujson.load(),在 micropython urequests http 模組處理伺服器回應的資訊時,會存成 str 型態,所以如果事先知道其為 json格式,後續在抓取必須欄位時,就快速許多。

3. OLED Clock 程式流程

在實際撰寫 micropython 程序前,先來討論一下此程式的架構,我們構思一下可能需要的模組:

  • http 請求(urequests) :用來連線到 worldtimeapi 網站,取得目前時間日期資訊的 json檔,供後續程序進行關鍵資料處理。
  • ujson 模組: 將下載的 json 格式文字檔,轉成適合 python 處理的資料型態。
  • ssd1306 模組: 為 i2c OLED提供文字顯示的驅動程序,並顯示時間日期資訊。
  • 內部 rtc 模組: 利用 worldtimeapi 網站提供的時間資訊進行 ESP32 rtc 時間初始化,並提供目前時間與日期數值讓主程式呼叫取出。
  • timer 模組:使用 ESP32 內建的 timer1 建立起1秒更新一次 OLED資訊的副程式。

完整的程式流程如下:

oled clock flow

4. 小結

這篇先來把這個網路時鐘專案的程式流程與一些設定進行說明,下篇就來講解電路連接和完整程式碼,有需要的朋友就點擊下方連結繼續閱讀吧~

| ESP32 教學 | MicroPython | OLED Clock 網路時鐘 (下) | 602 |

↓↓↓↓↓↓賣場連結↓↓↓↓↓↓

歡迎大家有需要的話,可以多多支持一下我們的蝦皮賣場喔! 😀 

吉米家官方店-創客機器人材料專賣 https://shopee.tw/jimirobot.tw

Follow JIMI哥 Twitter : https://twitter.com/jimirobot  <–得到最新文章通知

發佈留言

Close Menu