從從容容使用 LILYGO T5 e-Paper 製作氣象畫框

一目了然的氣象資訊

回想筆者小時候,幾乎每天晚上 7:45 分左右都會開始盯著電視台新聞,等著氣象預報的播報。即便目前智慧型手機普遍,隨手可以透過手機查閱近期的氣象資訊,但對於年長者(手機操作不熟悉)或是兒童(沒有手機)來說,若可以有一個簡單的氣象資訊畫框可以查閱還是相當方便的!因此本篇將透過簡單的幾個步驟製作氣象畫框,可以擺放於家中或辦公室還可以從容優雅地展現個人風格。使用素材清單如下:

物聯網電子紙氣象數位畫框
物聯網電子紙氣象數位畫框

What’s LILYGO T5 e-Paper

LILYGO 生產了許多以 ESP32 為核心的整合型開發版,包含搭載不同的顯示、通訊模組於一體等。T5 e-Paper 則是將ESP32-S3整合了 4.7” 電子紙顯示器(e-paper display, EPD),解析度為 540×960 16 階灰階顯示,並且提供觸控與非觸控兩種版本。引腳圖 pin map 如下,開發板上整合了 PCF8563 RTC 時鐘IC、電池充放電電路與 micro SD 記憶卡等介面,若是非觸控的版本還有約 6 隻引腳可以自行擴充運用。ESP32-S3 模組使用 N16R8 版本,代表其有 16MB Flash 與外部 8MB PSRAM。

T5 e-paper pin map
T5 e-paper pin map

安裝開發板支援與函式庫 Install Boards & Library

為了後續能順利編譯範例程式碼,需要預先安裝 ESP32 開發板與對應的 Library。在 Arduino IDE(以下以2.x版本為例)功能列 → Files → Preferences ,在對話框下方的 “Additional Boards Manager URLs” 中增加 ESP32 開發板支援清單網址 https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json 。

為了較好的相容性,在 ESP32 開發版支援的版本,選擇安裝 2.x.x 版本。

Library 需要安裝 Lilygo-EPD47,內含電子紙驅動函式。

配合範例程式馬,ArduinoJson 需安裝 6.x.x 版本,若已經安裝最新版本 7.x.x 記得在編譯時要退回舊版本。

範例程式碼 Source Code

CircusPi 的 GitHub 有提供 patch 版本的 LilyGo-EPD-4-7-OWM-Weather-Display 專案程式碼,可以下載後簡單修改設定即可用。進行設定前需要取得 OWM 的 API 金鑰,前往 Open Weather Map 網站登入或註冊帳號,接著從右上角個人帳號下拉選單中點選 “My API keys”,於金鑰頁面中右方建立一個新的 API key,並將其複製起來。

取得 Open Weather Map API 金鑰
取得 Open Weather Map API 金鑰

使用 Arduino IDE 開啟範例程式,切換至 owm_credentials.h使用 Arduino IDE 開啟範例程式,切換至 owm_credentials.h 檔案,將 ssid 與 password 變數的值填入 Wi-Fi 名稱密碼,apikey 填入剛剛在 Open Weather Map 取得的 API Key。下方有城市的參數可以填入要顯示預報的城市,如 Taipei, Kaohsiung, Taichung 等,所有城市的清單可以在 OWM 中查找。

Arduino IDE 的功能列 → Tools 選擇對應的開發板與序列埠設定。細項設定如下:

  • Board: ESP32S3 Dev Module
  • USB CDC On Boot: Enable
  • Flash Size: 16MB
  • Partition Scheme: 16MB Flash (3MB APP/9.9 FATFS)
  • PSRAM: OPI PSRAM

完成後進行燒錄。

ESP32S3 對應的設定
ESP32S3 對應的設定

燒錄完成後重新啟動應該會從 Serial Monitor 的 LOG 中觀察到連線 WiFi 網路並且取得氣象資訊等資訊,解析完成氣象資訊後即會更新電子紙的顯示內容。如下圖所示,上方會顯示目前即時天氣狀態,包含溫濕度、氣象狀態、降雨機率、風向、氣壓、能見度等資訊。中間顯示未來3~21小時的氣象預報。下方則是未來三天的氣壓、溫度、濕度、降雨量的預報趨勢圖。預設的設定是對齊時鐘每 15 分鐘會進行更新,也就是開機時更新,之後是每整點0分、15分、30分、45分刷新畫面。在更新資訊後 ESP32 會進入深入睡眠模式,等待時間到時才會被喚醒、重新連線 Wi-Fi、更新氣象資訊等循環。

從OWM撈取的氣象資訊與預報
從OWM撈取的氣象資訊與預報

耗電量觀察 Power Consumption

電子紙在沒有更新畫面時是不耗電的,但 ESP32 需要定期連線 Wi-Fi 更新資訊等,若單靠電池可以維持多久不需要充電?為查明數據筆者準備了 Nordic Power Profiler Kit II 監測電源耗電量,透過其從 Lilygo T5 e-paper 鋰電池 JST 2.0 連接器進行供電,電壓設定為 4.0V(鋰電池電壓範圍通常在3.2~4.2之間)。

使用 PPK2 量測耗電量
使用 PPK2 量測耗電量

ESP32 在休眠時大約只會消耗 230~260uA (如下圖)。

ESP32休眠時耗電量
ESP32休眠時耗電量

在ESP32被喚醒時會執行連線 Wi-Fi、取得氣象資料、更新電子紙顯示等流程,從下圖中可以看到連線 Wi-Fi 瞬間可接近 1A 耗電量,後續會在 200mA~400mA 之間,完成後再次進入休眠。從喚醒的 10 秒區間作計算,平均耗電流為 61.5mA,預設一小時會喚醒4次則 40 秒平均 61.5mA,其餘時間(3560秒)都在休眠平均245uA,則一小時的耗電量會在 0.926mA。若使用 1000mAh 的電池則大約可以連續使用45天,若一併考量電池健康度與安全電量裕度,可以再打個8折估算。

ESP32 喚醒時的耗電量
ESP32 喚醒時的耗電量

畫框 Photo Frame

接下來就是整合手工藝的部分了,準備一個小型相框可以容納 LILYGO T5 電子紙大小約 12 x 6.5 cm 即可,筆者使用的是從 DAISO 大創購入的 12.7 x 8.9 cm 大小的相框。需要留意的是大部分相框會需要再扣除邊框的大小,實際顯示的大小會再略小一點。

使用大創 3.5" x 5" 大小的相框
使用大創 3.5″ x 5″ 大小的相框

LILYGO T5-4.7-S3 E-paper 的電路板有幾個連接器高度較高,筆者是將其對應位置的紙板挖除,使紙板較能貼合電路板,並且也方便將電池引出。

氣象畫框的背後布局
氣象畫框的背後布局

小結 Wrap Up

筆者很喜歡能夠將電子融入生活的專案,就如同本篇使用 ESP32S3 核心的電子紙,運用 open source 的資源,再搭配上些許的手做與小巧思,就是一個具備個人風格特色的數位畫框,實用且可以融入居家與辦公空間。除此之外 LILYGO 官方也有提供其他範例程式與文件,若想進一步研究的開發者也可以多多參考,發展出自己喜歡的專案吧!