實驗說明:
使用ESP32和IlI934顯示螢幕來製作天氣時鐘,通過無線網絡從openweathermap.org網站上獲取本地的天氣資料,再將天氣、溫度、濕度、風向、風速、氣壓、月相、日出與日落時間呈現在顯示器上。
材料:
- ESP32-E DevKit
- USB 傳輸線
- IlI9341顯示螢幕
- 杜邦線
接線說明:
獲取openweathermap API Keys:
Step1: 註冊帳號: https://home.openweathermap.org/users/sign_in
Step2: 獲取API Keys
安裝程式庫:
請先將下列7個函式庫依序下載,然後再分別依序安裝。
安裝方式:在 Arduino 整合環境功能表點選 草稿碼 / 匯入程式庫 / 加入.ZIP程式庫…
- https://github.com/Bodmer/TFT_eSPI
- https://github.com/Bodmer/OpenWeather
- https://github.com/Bodmer/JPEGDecoder
- https://github.com/PaulStoffregen/Time
- https://github.com/JChristensen/Timezone
- https://github.com/bblanchon/ArduinoJson
- https://github.com/Bodmer/JSON_Decoder
▼ github 下載方式可參考下圖,點擊Download ZIP:
上傳文件到 ESP32 Filesystem文件系統:
需先將使用者UI介面、圖檔與字型存放在ESP32 SPIFFS內部空間。
Step1: Arduino IDE安裝 ESP32 Filesystem Uploader (可參考【IOT物聯網應用-ESP32】第三十五篇:SPIFFS檔案系統 )
Step2: 開啟OpenWeather範例程式
Step3: 執行Arduino IDE >> 工具 >> ESP32 Sketch Data Upload
程式:
在編譯程式碼之前,有3支程式碼檔案必須修改(NTP_Time.h、All_Settings.hUser_Setup.h),請參考以下程式碼修改設置:
- NTP_Time.h
新增台灣時區如下:
// Zone reference "TW"
TimeChangeRule CST = {"CST", First, Sun, Jan, 0, 480};
Timezone TW(CST, CST);
▼將上面3行程式碼插入NTP_Time.h,如下圖所示:
- All_Settings.h
填入網路名稱與密碼
#define WIFI_SSID "Your_SSID" //將Your_SSID修改為您的網路名稱
#define WIFI_PASSWORD "Your_password" //將Your_password修改為您的網路密碼
修改為您所在的時區代碼,例如台灣時區代碼:TW
#define TIMEZONE TW
註冊https://openweathermap.org/,並取得API Keys,將xxxx修改為您的API Keys
const String api_key = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
經緯度設置為至少4位小數,預測地點設置為台北天母棒球場,您也可以利用google map自行更改。
const String latitude = "25.11363";
const String longitude = "121.53298";
- User_Setup.h
最後,需要修改User_Setup.h(檔案位置:/文件/Arduino/ libraries/TFT_eSPI-master/User_Setup.h)
將以下幾行的註解移除。
#define TFT_MISO 19
#define TFT_MOSI 23
#define TFT_SCLK 18
#define TFT_CS 15 // Chip select control pin
#define TFT_DC 2 // Data Command control pin
#define TFT_RST 4 // Reset pin (could connect to RST pin)
#define TFT_RST -1 // Set TFT_RST to -1 if display RESET is connected to ESP32 board RST
▼修改結果如下:
程式說明:
完成上述程式碼修改後,編譯並上傳程式碼到ESP32,您就可以在 TFT 顯示螢幕上看到天氣、溫度、濕度、風向、風速、氣壓、月相、日出與日落時間全部天氣有關的數據都呈現在顯示器上。