一般較常作為開發板顯示的有兩種:一是 16x2 的 LCD,可參考:Raspberry Pi Pico筆記(5):1602LCD顯示時間及板載溫度,另一種是 OLED 顯示,常見的規格有0.96吋、1.44吋等各種不同尺寸的顯示屏幕,OLED的優點是顯示效果漂亮,且可顯示圖片。本篇將繼續實作如何使用 MicroPython 編寫程式,讓文字、線條及圖片顯示在0.96吋的 SSD1306,解析度大小為 128x64 像素;下一篇則紀錄如何將圖片轉成位元格式,再將圖片位元資料存到程式中的 framebuf ,顯示在 SSD1306 螢幕上。
點選「micropython-ssd1306」,進入下個畫面(如下圖),再按下「安裝」按鈕,安裝的步驟就完成,可以開始使用 SSD1306 函式庫了。
.畫點
在位置 x,y 處繪製一個像素,並使用 c 為繪製像素的顏色,其中1點亮,0熄滅。
從點 x1,y1 到 x2,y2 繪製一條對角線,並使用 c 為繪製像素的顏色。
從點 x,y 畫一條垂直線,高度為 h ,並使用 c 為繪製像素的顏色。
從點 x,y 畫一條水平線,寬度為 w, ,並使用 c 為繪製像素的顏色。
繪製一個從點 x, y 開始的矩形,寬度為 w 和高度為 h ,並使用 c 為繪製像素的顏色。
繪製一個從點 x, y 開始的填充矩形,寬度為 w 和高度為 h ,並使用 c 為繪製像素的顏色。
在 x,y 座標顯示引號中的字串,並使用 c 為顯示的顏色(1為點亮,0為熄滅)。
當 pos 為正時,向右捲動 pos 像素;當 pos 為負時,向左捲動 pos 像素,並使用 c 為顯示的顏色(1為點亮,0為熄滅)。
[安裝SSD1306函式庫]
安裝 SSD1306 函式庫,可直接從 Thonny 進行安裝。請先開啟 Thonny 主程式,在功能表選擇「工具」→ 「管理套件」,在搜尋處輸入「SSD1306」如下圖:點選「micropython-ssd1306」,進入下個畫面(如下圖),再按下「安裝」按鈕,安裝的步驟就完成,可以開始使用 SSD1306 函式庫了。
[材料]
- Raspberry Pi Pico x1
- SSD1306 TFT LCD x1
- 排線 n 條
[接線圖]
| Pi 接腳 | SSD1306 TFT LCD |
|---|---|
| Pin 36(3.3V) | VCC |
| Pin 38(GND) | GND |
| Pin 1(GP0) | SDA |
| Pin 2(GP1) | SCL |
[圖形基本元素]
繪圖的基本原理是由點構成線、線構成面,在繪圖系統中,通常可以畫出點、線及各種圖形,如方形及三角型等,以下分別介紹各繪圖函式。要使用繪圖函式前,須先建立物件,會使用到上述安裝的 SSD1306 函式庫:from ssd1306 import SSD1306_I2C i2c=I2C(0,sda=Pin(0), scl=Pin(1), freq=400000) oled = SSD1306_I2C(128, 64, i2c)物件建立完成後,可以使用以下繪圖指令進行繪圖或畫面捲動:
.畫點
在位置 x,y 處繪製一個像素,並使用 c 為繪製像素的顏色,其中1點亮,0熄滅。
oled.pixel(x, y, c).畫直線
從點 x1,y1 到 x2,y2 繪製一條對角線,並使用 c 為繪製像素的顏色。
oled.line(x1, y1, x2, y2, c).畫垂直線
從點 x,y 畫一條垂直線,高度為 h ,並使用 c 為繪製像素的顏色。
oled.vline(x, y, h, c).畫水平線
從點 x,y 畫一條水平線,寬度為 w, ,並使用 c 為繪製像素的顏色。
oled.hline(x, y, w, c).畫方形
繪製一個從點 x, y 開始的矩形,寬度為 w 和高度為 h ,並使用 c 為繪製像素的顏色。
oled.rect(x, y, w, h, c).畫實心方形
繪製一個從點 x, y 開始的填充矩形,寬度為 w 和高度為 h ,並使用 c 為繪製像素的顏色。
oled.fill_rect(x,y,w,h,c).顯示文字
在 x,y 座標顯示引號中的字串,並使用 c 為顯示的顏色(1為點亮,0為熄滅)。
oled.text("Hello world!", x, y, c)
.捲動整個畫面當 pos 為正時,向右捲動 pos 像素;當 pos 為負時,向左捲動 pos 像素,並使用 c 為顯示的顏色(1為點亮,0為熄滅)。
oled.scroll(pos, c)
[程式]
程式中還有一個使用陣列繪製圖形的方法,先將圖形以陣列方式存在 ICON 變數,再透過繪點的指令 pixel 顯示出來。from machine import Pin, I2C
import utime
from ssd1306 import SSD1306_I2C
i2c = I2C(0,sda=Pin(0),scl=Pin(1),freq=40000)
oled = SSD1306_I2C(128,64,i2c)
oled.fill(0)
aux = 10
#愛心的點距陣列
ICON = [
[ 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 1, 1, 0, 0, 0, 1, 1, 0],
[ 1, 1, 1, 1, 0, 1, 1, 1, 1],
[ 1, 1, 1, 1, 1, 1, 1, 1, 1],
[ 1, 1, 1, 1, 1, 1, 1, 1, 1],
[ 0, 1, 1, 1, 1, 1, 1, 1, 0],
[ 0, 0, 1, 1, 1, 1, 1, 0, 0],
[ 0, 0, 0, 1, 1, 1, 0, 0, 0],
[ 0, 0, 0, 0, 1, 0, 0, 0, 0],
]
while True:
# 畫一個愛心
for y, row in enumerate(ICON):
for x, c in enumerate(row):
oled.pixel(x, y, c)
oled.show() #顯示上面的圖形
oled.hline(1,30,100,1) #在(1,40)畫一長100的水平線
oled.vline(1,30,10, 1) #在(1,40)畫一高10的垂直線
oled.text("Hi Ceiling!!", 0, 20, 1) #在(0,30)顯示 Hello world!
oled.line(1, 40, 100, 60, 1) # 在(1, 50)和(100, 60)兩點畫一條線
oled.show() #顯示上面的圖形
utime.sleep(2) #暫停2秒
oled.fill(0) #清除螢幕
#向左捲動視窗
for i in range(30, -42, -4):
oled.text("Hi Ceiling!!", 0+i, 20, 1)
oled.scroll(i, 0)
oled.show()
utime.sleep(0.1)
oled.fill(0) #清除螢幕
#顯示數字 0~9
for i in range(10):
number = str(i)
oled.text(number,aux,0)
oled.show()
utime.sleep(1)
aux = aux + 10
aux = 10
utime.sleep(2) #暫停2秒
oled.fill(0) #清除螢幕



張貼留言