一般較常作為開發板顯示的有兩種:一是 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) #清除螢幕
張貼留言