Raspberry Pi和TFT LCD實時天氣預報

2020-08-10 06:21:21

背景知識視訊教學

  • 完整的2019 Raspberry Pi訓練營
  • 物聯網#4:物聯網(物聯網)自動化與Raspberry Pi
  • 使用Raspberry Pi 3的高階家庭自動化

準確的天氣預測對於計劃我們的日常活動很重要。 例如,農民需要資訊來幫助他們計劃農作物的種植和收割。 對我們來說,它可以幫助我們準備出門時帶的東西,例如如果知道會下雨的話,可以帶上雨傘。 天氣預報可以幫助我們做出更明智的日常決策,甚至可以幫助我們擺脫危險。

該應用程式不僅限於天氣預報顯示。 它可以從任何網站上獲取資訊。 遵循本指南可以使您大致瞭解如何使其工作。

硬體

軟體

使用庫

工作方式

Raspberry Pi 引腳圖

RPi的工作方式與Arduino類似,但是兩者之間存在一些差異。 所有的Raspberry Pi開發板都使用Python作爲主要語言,但也支援Ruby和C,而Arduino僅支援C。此外,對於希望進入電子專案的初學者來說,RPi更加昂貴且更加複雜。 但是,由於其更高的處理能力,它一次可以處理多個程式。

TFT液晶顯示器ILI9341

TFT LCD螢幕上的所有畫素均以行和列的格式設定,並且每個畫素都附加到一個非常小的硅電晶體上,該電晶體直接位於玻璃面板上。 這種設定允許給每個畫素充電,並且即使重新整理螢幕以產生新影象也可以保持該電荷。

硬體設定

Raspberry Pi設定

啓用SPI

爲了使TFT LCD能夠正常工作,我們必須通過Raspberry Pi設定啓用SPI。 假設您已經連線到Raspberry Pi,請單擊左下角的raspberry圖示,將滑鼠懸停在「偏好設定」上,然後單擊「 Raspberry Pi設定」。

視窗彈出時,單擊「介面」並確保已啓用SPI。完成後,單擊「確定」。

安裝庫

ThingHTTP設定

要獲取數據,我們必須請求一個API。 假設您已經按照上述說明安裝了請求庫,則下一步是爲網站中的特定數據製作API。 我們將使用ThingSpeak的ThingHTTP應用程式,因此您必須在其網站上註冊https://thingspeak.com/。 如果您已經有一個帳戶,請登錄並單擊「應用程式」,然後單擊「 ThingHTTP」。

這樣做時,應將您定向到ThingHTTP頁面。點選「 New ThingHTTP」建立一個。

載入後,將顯示其設定。更改名稱以便於識別,然後輸入您要從中獲取數據的網站的URL。其餘設定保持預設。

下一步,您需要轉到要從中獲取數據的網站,將滑鼠懸停在要獲取的特定數據上,然後選擇「檢查」。

在右側視窗彈出視窗中右鍵單擊數據,將滑鼠懸停在「複製」上,然後選擇「複製XPath」。

複製XPath之後,返回ThingHTTP設定並將其貼上到「解析字串」框中,然後點選儲存。

儲存後,您可以在頁面右側獲得API鏈接。您稍後將在程式碼中使用它。

對所需的其他數據重複該過程,例如溫度,降水量,溼度等。

程式碼

對於程式碼,您可以在計算機上通過Python IDLE,Notepad ++或任何支援Python的文字編輯軟體或IDE進行處理,然後通過VNC Viewer將其傳輸到Raspberry Pi。 您也可以在RPi本身內部進行編碼,我發現這很容易。

liveweather.py程式碼

</>

要執行程式碼,請開啓終端並使用命令cd <directory>將目錄更改爲檔案所在的目錄,然後執行命令python <file name> .py。

程式碼分解

庫匯入
</>
預初始化
</>

然後,我們分別將DC和RESET引腳分配給RPi板的引腳18和23。 SPI埠和裝置預設情況下應爲0。 之後,我們建立TFT LCD顯示器並初始化顯示器。 已經建立了兩個字型設定,以供以後在TFT LCD上顯示我們的文字。 由於該庫的預設字型只有8個畫素,這非常小,因此我從https://www.dafont.com/下載了最高字型樣式,並將.tff檔案放置在與程式碼相同的目錄中。 如果願意,可以使用預設字型,方法是從程式碼中刪除註釋,或者從上述同一網站下載其他字型。 可以在ImageFont.truetype()的第二個參數中指定字型大小。

繪製旋轉文字函數
</>

由於PIL對旋轉字型沒有很好的原生支援,因此建立了此函數來解決這一問題。 在程式碼中註釋了每行如何貢獻的具體細節。

顯示回圈
</>

這是通過API請求從網站獲取數據的地方。確保request.get()中的URL是要獲取的數據,並將其儲存在變數中。要獲取當前日期和時間,我們可以使用datetime.datetime.now()。

</>

在繪製文字之前,首先我們必須清除顯示內容以重新整理其內容。 呼叫draw_rotated_text()函數將單詞和數據繪製到TFT LCD螢幕上。 只需遵循給定的格式並更改相對於TFT LCD螢幕的座標或位置。 我將其設定爲相隔30-40畫素。 您甚至可以更改文字的旋轉度,字型和顏色。 對於時間顯示格式,我們必須使用time.strftime來獲取表示日期和時間的字串。 %b代表月份,%d代表白天,%H代表小時,%M代表分鐘,%S代表秒。 繪製單詞後,我們然後使用disp.display()顯示它,並設定一個延遲,使其不發送垃圾郵件。

詳情參閱http://viadean.com/rpi_tft_lcd.html