不同於標準的Raspberry Pi的全功能用途,Pico及Pico W是沒有作業系統的,當然也就沒有自己的顯示器輸出,因此如果需要不透過電腦顯示一些內容的話,當然最好的方式就是自己接上一些物聯網開發板所使用的微型顯示器,其中SSD1306是最受歡迎的微型顯示器,它使用的是I2C的介面,正好也可以在Pico上使用。這篇文章就來說明如何連接及使用SSD1306。
SSD1306的外觀如下:
它有4條連接線,其中VCC接正電源,GND接地。但是要留意的是,不同的SSD1306有些它們的正負電位置會剛好相反,使用之前一定要特別注意正負電源不要接錯了。Pico有兩組 I2C,理論上可以任選其中一組,在這個例子中,我們把它連接到I2C0,也就是SCL接到實體接腳的第22腳,SDA接到第21腳,如下圖所示:
如同使用DHT11一樣,最重要的仍然是要找到合適的函式庫。Pico W適用的SSD1306程式庫在下面這個網站上:
在上面這個網站中有一個下載ssd1306.py的載點,請直接下載並在Thonny中開啟,再把它儲存到Pico的板子上即可,儲存完畢之後,加上前一篇文章的DHT11程式檔案,目前Pico的儲存內容中看起來像是下面這個樣子:
以下的程式即可讓你輸出如接線圖中顯示的文字內容以及正弦函數圖形:
from machine import Pin, I2C
import ssd1306
import math
i2c = I2C(0, sda=Pin(16), scl=Pin(17))
disp = ssd1306.SSD1306_I2C(128, 64, i2c)
disp.text('NKUST CCET', 0, 0)
disp.text('Min-Huang Ho', 0, 10)
for th in range(360):
x = int(th * 0.25)
y = 44 - int(math.sin(th * (math.pi / 180))*20)
disp.pixel(x, y, 1)
disp.show()
從上述的程式可以看得出來,該顯示器的解析度是128×64,左上角座標是(0, 0),右下角座標是(127, 63)。我們可以使用text(str, x, y)函式在座標(x, y)處顯示文字,使用pixel(x, y, value)在螢幕上畫1個點。透過三角函數的計算,就可以在顯示器上畫上函數圖形。
結合前一篇文章的溫濕度量測,我們可以使用以下的程式碼,讓目前的溫濕度透過SSD1306呈現出來:
from machine import Pin, I2C
import time, math
from dht import DHT11
import ssd1306
pin = Pin(22, Pin.OUT, Pin.PULL_UP)
sensor = DHT11(pin)
i2c = I2C(0, sda=Pin(16), scl=Pin(17))
disp = ssd1306.SSD1306_I2C(128, 64, i2c)
while True:
try:
sensor.measure()
t = (sensor.temperature)
h = (sensor.humidity)
disp.fill(0)
disp.text('NKUST CCET', 0, 0)
disp.text('Min-Huang Ho', 0, 10)
disp.text("{}, {}%".format(t, h), 0, 40)
except:
pass
disp.show()
上述程式的執行結果如下所示: