Raspberry Pi 常被應用於顯示相關專案,本文將介紹三種常見的顯示裝置:Sense HAT、Alphanumeric LCD HAT 和 OLED 顯示器。Sense HAT 提供便捷的影像顯示和感測器功能,透過 Python 程式碼即可輕鬆控制畫素點與顯示影像。Alphanumeric LCD HAT 則適用於顯示文字資訊,搭配 Displayotron HAT 與其 Python 函式庫,可以顯示主機名稱、IP 位址等系統資訊。最後,OLED 顯示器以其高對比度和低功耗特性,成為顯示圖形和文字的理想選擇,透過 Adafruit 提供的 Python 函式庫和程式碼範例,可以輕鬆在 OLED 顯示器上顯示時間、日期等資訊。
使用 Sense HAT 顯示簡單影像
Sense HAT 是一款為 Raspberry Pi 設計的擴充板,提供了多種感應器和顯示功能。在本文中,我們將探討如何使用 Sense HAT 顯示簡單影像。
載入影像
首先,我們需要載入一張小影像到 Sense HAT 上。這可以使用 hat.load_image()
函式實作:
hat.load_image('small_image.png')
這裡,small_image.png
是一張小影像檔案,需要事先準備好。
旋轉 Sense HAT
接下來,我們可以旋轉 Sense HAT 來顯示不同的影像。這可以使用 hat.set_rotation()
函式實作:
hat.set_rotation(90)
time.sleep(1)
hat.set_rotation(180)
time.sleep(1)
hat.set_rotation(270)
time.sleep(1)
這裡,我們旋轉 Sense HAT 90 度、180 度和 270 度,然後暫停 1 秒鐘以便觀察效果。
清除 Sense HAT
如果需要清除 Sense HAT 上的影像,可以使用 hat.clear()
函式:
hat.clear()
這會清除 Sense HAT 上的所有影像。
顯示簡單影像
最後,我們可以使用 hat.set_pixel()
函式顯示簡單影像。例如,以下程式碼會顯示一條對角線:
for xy in range(0, 8):
hat.set_pixel(xy, xy, red)
hat.set_pixel(xy, 7-xy, red)
這裡,red
是一個顏色常數,代表紅色。
圖表翻譯:
flowchart TD A[載入影像] --> B[旋轉 Sense HAT] B --> C[清除 Sense HAT] C --> D[顯示簡單影像]
這個流程圖顯示了使用 Sense HAT 顯示簡單影像的步驟。
內容解密:
以上程式碼展示瞭如何使用 Sense HAT 顯示簡單影像。首先,載入一張小影像到 Sense HAT 上。然後,旋轉 Sense HAT 來顯示不同的影像。接下來,清除 Sense HAT 上的影像。最後,使用 hat.set_pixel()
函式顯示簡單影像。這些步驟可以幫助您瞭解如何使用 Sense HAT 顯示簡單影像。
顯示文字於Alphanumeric LCD HAT
問題描述
您想要在LCD顯示器上整齊地顯示幾行文字。
解決方案
使用Pimoroni Displayotron HAT附加於您的Raspberry Pi,如圖14-4所示。 圖14-4. Displayotron LCD HAT
此HAT需要啟用I2C和SPI,因此如果您尚未這樣做,請按照食譜9.3和食譜9.5進行操作。
然後,從GitHub下載其配套函式庫的程式碼並安裝它:
# 安裝Displayotron函式庫
sudo apt-get update
sudo apt-get install -y python3-pip
sudo pip3 install dothat
這個命令會詢問您是否要安裝範例和檔案。請注意,整個安裝過程可能需要相當長的時間。
接下來,使用以下程式(ch_14_displayotron_ip.py)來查詢您的Raspberry Pi的主機名稱和IP地址,並將它們與時間一起顯示在LCD上。如果一切正常,背光LED將會是綠色,但如果網路連線失敗,背光將會變成紅色:
import dothat.lcd as lcd
import dothat.backlight as backlight
import time
from datetime import datetime
import subprocess
while True:
lcd.clear()
backlight.rgb(0, 255, 0) # 設定背光為綠色
try:
hostname = subprocess.check_output(['hostname']).split()[0]
ip = subprocess.check_output(['hostname', '-I']).split()[0]
t = '{:%H:%M:%S}'.format(datetime.now()) # 取得當前時間
lcd.write(hostname) # 顯示主機名稱
lcd.set_cursor_position(0, 1) # 移動遊標到第二行
lcd.write(ip) # 顯示IP地址
lcd.set_cursor_position(0, 2) # 移動遊標到第三行
lcd.write(t) # 顯示時間
except Exception as e:
backlight.rgb(255, 0, 0) # 如果出錯,設定背光為紅色
lcd.write("Error: " + str(e)) # 顯示錯誤訊息
time.sleep(1) # 等待1秒後繼續執行
內容解密:
此程式使用dothat
函式庫來控制Displayotron HAT。它首先清除LCD上的內容,然後設定背光為綠色。接下來,它使用subprocess
模組來執行hostname
命令,以取得主機名稱和IP地址。然後,它使用datetime
模組來取得當前時間,並將這些資訊顯示在LCD上。如果出錯,背光將會變成紅色,並顯示錯誤訊息。
圖表翻譯:
flowchart TD A[開始] --> B[清除LCD內容] B --> C[設定背光為綠色] C --> D[取得主機名稱和IP地址] D --> E[顯示主機名稱、IP地址和時間] E --> F[等待1秒] F --> A style A fill:#f9f,stroke:#333,stroke-width:4px style B fill:#f9f,stroke:#333,stroke-width:4px style C fill:#f9f,stroke:#333,stroke-width:4px style D fill:#f9f,stroke:#333,stroke-width:4px style E fill:#f9f,stroke:#333,stroke-width:4px style F fill:#f9f,stroke:#333,stroke-width:4px
此圖表顯示了程式的流程:清除LCD內容、設定背光為綠色、取得主機名稱和IP地址、顯示這些資訊、等待1秒後繼續執行。
使用OLED顯示器
問題描述
您想要將圖形OLED(Organic LED)顯示器連線到您的Raspberry Pi。
解決方案
使用根據SSD1306驅動晶片的OLED顯示器,透過I2C介面進行通訊。
所需材料
- 四個母對母跳線
- 128×64畫素的I2C OLED顯示器
連線描述
- 顯示器的VCC連線到Raspberry Pi GPIO介面的5V
- 顯示器的GND連線到Raspberry Pi GPIO介面的GND
- 顯示器的SCL連線到Raspberry Pi GPIO介面的SCL
- 顯示器的SDA連線到Raspberry Pi GPIO介面的SDA
安裝驅動程式
pip install pillow
範例程式碼
from PIL import Image, ImageDraw, ImageFont
import Adafruit_SSD1306
# 初始化OLED顯示器
disp = Adafruit_SSD1306.SSD1306_128_64(rst=None)
# 清除顯示器
disp.clear()
disp.display()
# 設定字型
font = ImageFont.load_default()
# 建立圖片
image = Image.new('1', (disp.width, disp.height))
draw = ImageDraw.Draw(image)
# 繪製文字
draw.text((0, 0), 'Hello, World!', font=font, fill=255)
# 顯示圖片
disp.image(image)
disp.display()
內容解密:
上述程式碼使用Pillow函式庫建立了一個圖片,並使用Adafruit_SSD1306函式庫控制OLED顯示器。首先,初始化OLED顯示器,然後清除顯示器。接下來,設定字型,建立一個圖片,並繪製文字到圖片上。最後,顯示圖片到OLED顯示器上。
圖表翻譯:
graph LR A[初始化OLED顯示器] --> B[清除顯示器] B --> C[設定字型] C --> D[建立圖片] D --> E[繪製文字] E --> F[顯示圖片]
圖表說明:
上述流程圖描述了OLED顯示器的初始化、清除、設定字型、建立圖片、繪製文字和顯示圖片的過程。每一步驟都對應到程式碼中的特定部分,展示瞭如何使用OLED顯示器顯示圖片和文字。
Raspberry Pi OLED 顯示器設定與時鐘顯示程式
硬體連線
為了連線 OLED 顯示器至 Raspberry Pi,請按照以下步驟進行連線:
- 將顯示器的 GND 接腳連線至 Raspberry Pi 的 GPIO 聯結器上的 GND。
- 將顯示器的 SDA 接腳連線至 Raspberry Pi 的 GPIO 2 (SDA)。
- 將顯示器的 SCL 接腳連線至 Raspberry Pi 的 GPIO 3 (SCL)。
軟體設定
在開始使用 OLED 顯示器之前,您需要設定 Raspberry Pi 的 I2C 功能。請參考 Recipe 9.3 來完成 I2C 的設定。
安裝 Adafruit OLED 顯示器函式庫
Adafruit 提供了一個 Python 函式庫來控制 OLED 顯示器。您可以使用以下命令來安裝這個函式庫:
$ cd Adafruit_Python_SSD1306
$ sudo python3 setup.py install
此函式庫需要 Python Image Library (PIL) 的支援,您可以使用以下命令來安裝 PIL:
$ sudo pip3 install pillow
時鐘顯示程式
以下是使用 OLED 顯示器顯示時鐘的範例程式 (ch_14_oled_clock.py
):
import Adafruit_SSD1306
from PIL import Image, ImageDraw, ImageFont
import time
from datetime import datetime
# 設定顯示器
disp = Adafruit_SSD1306.SSD1306_128_64(rst=None, i2c_address=0x3C)
# 載入字型
small_font = ImageFont.truetype('FreeSans.ttf', 12)
large_font = ImageFont.truetype('FreeSans.ttf', 33)
# 初始化顯示器
disp.begin()
disp.clear()
disp.display()
# 建立一個影像來繪製
width = disp.width
height = disp.height
image = Image.new('1', (width, height))
draw = ImageDraw.Draw(image)
# 顯示訊息的函式
def display_message(top_line, line_2):
draw.rectangle((0,0,width,height), outline=0, fill=0)
draw.text((0, 0), top_line, font=large_font, fill=255)
draw.text((0, 50), line_2, font=small_font, fill=255)
執行時鐘程式
您可以使用以下命令來執行時鐘程式:
$ python3 ch_14_oled_clock.py
這個程式會在 OLED 顯示器上顯示當前的時間和日期。
內容解密:
Adafruit_SSD1306
函式庫提供了控制 OLED 顯示器的功能。Image
和ImageDraw
類別用於建立和繪製影像。ImageFont
類別用於載入字型。disp.begin()
初始化顯示器。disp.clear()
清除顯示器的內容。disp.display()
更新顯示器的內容。display_message
函式用於顯示訊息在顯示器上。
圖表翻譯:
flowchart TD A[初始化顯示器] --> B[載入字型] B --> C[建立影像] C --> D[顯示訊息] D --> E[更新顯示器]
這個流程圖描述了時鐘程式的執行流程。首先,初始化顯示器,然後載入字型,接著建立影像,然後顯示訊息,最後更新顯示器的內容。
使用 Raspberry Pi 控制 OLED 顯示器和 RGB LED 燈條
OLED 顯示器
要控制 OLED 顯示器,首先需要安裝適當的函式庫,例如 Adafruit_SSD1306
。然後,可以使用以下程式碼初始化顯示器:
import datetime
import time
# 初始化顯示器
disp = Adafruit_SSD1306.SSD1306_128_64(rst=None, i2c_address=0x3C)
def display_message(time_message, date_message):
# 清除顯示器
disp.clear()
# 將時間和日期繪製到顯示器上
disp.text(time_message, 0, 0, font_size=24)
disp.text(date_message, 0, 20, font_size=18)
# 更新顯示器
disp.display()
while True:
now = datetime.datetime.now()
date_message = '{:%d %B %Y}'.format(now)
time_message = '{:%H:%M:%S}'.format(now)
display_message(time_message, date_message)
time.sleep(0.1)
這個程式碼會顯示現在的時間和日期在 OLED 顯示器上。
RGB LED 燈條
要控制 RGB LED 燈條,需要使用 WS2812
函式庫。首先,需要連線 LED 燈條到 Raspberry Pi 的 GPIO 引腳。然後,可以使用以下程式碼控制 LED 燈條:
import time
import board
import neopixel
# 初始化 LED 燈條
pixels = neopixel.NeoPixel(board.D18, 10)
while True:
# 設定 LED 燈條的顏色
pixels.fill((255, 0, 0)) # 紅色
time.sleep(1)
pixels.fill((0, 255, 0)) # 綠色
time.sleep(1)
pixels.fill((0, 0, 255)) # 藍色
time.sleep(1)
這個程式碼會將 LED 燈條的顏色改變為紅色、綠色和藍色。
討論
OLED 顯示器和 RGB LED 燈條都是很有用的元件,可以用於各種應用。OLED 顯示器可以顯示文字和影像,而 RGB LED 燈條可以用於創造各種顏色的效果。然而,需要注意的是,LED 燈條需要外部電源供應,以避免損壞 Raspberry Pi。
參考
- Adafruit 的 OLED 顯示器教程: https://learn.adafruit.com/
- WS2812 RGB LED 燈條教程: https://learn.adafruit.com/
從使用者經驗視角來看,如何在資源有限的嵌入式系統中有效運用顯示裝置,是提升互動性的關鍵。本文探討了Sense HAT、Alphanumeric LCD HAT和OLED顯示器在Raspberry Pi上的應用,涵蓋了影像顯示、文字輸出和時鐘設計等實務案例。分析顯示,儘管這些顯示方案都能實作資訊呈現,但各有其技術限制。Sense HAT的8x8 LED矩陣解析度較低,僅適用於簡單影像和圖示;LCD HAT的文字顯示清晰,但圖形功能有限;OLED則兼具圖形和文字顯示能力,但成本相對較高。技術團隊需要根據專案需求和預算,權衡顯示效果、功耗和成本等因素進行技術選型。同時,需注意OLED的燒屏現象,以及LED燈條的供電穩定性等潛在風險。展望未來,隨著微型顯示技術的發展,更高解析度、更低功耗的顯示方案將進一步豐富嵌入式系統的互動體驗。玄貓認為,針對不同應用場景,選擇合適的顯示方案並進行最佳化,才能最大化使用者價值。