Raspberry Pi Picoで、0.96インチのI2C接続OLED(128×64ドット)の表示テストをします。(秋月電子で580円)
このOLEDのコントローラは、SSD1306で、I2Cアドレスは、0x3Cです。
今回は、SSD1306用のライブラリーを利用します。その方法は、メタエレ実験室というサイトの記事を参考にさせていただきました。
まず、Thonny IDEで、ツール→Manage packages for MIcroPython deviceを開きます。
SSD1306で検索し、検索結果から「micropython-ssd1306」をインストールします。Pico内のlibというフォルダにssd1306.pyというファイルが保存されます。
これで、準備完了です。
PicoとOLEDの配線回路図です。SDA=GPIO16,SCL=GPIO17とします。
テストスクリプトです。main.pyとしてPicoにsaveします。
---------------------------------------------------------
from machine import I2C,Pin
from utime import sleep
import ssd1306
from utime import sleep
import ssd1306
i2c=I2C(0,sda=Pin(16),scl=Pin(17),freq=400000)
oled=ssd1306.SSD1306_I2C(128,64,i2c)
oled=ssd1306.SSD1306_I2C(128,64,i2c)
oled.text("Hello World!", 0, 5)
oled.show()
---------------------------------------------------------
ブレッドボードです。「Hello World!」が表示されました。
このライブラリでは、簡単なグラフィックスを描画することができます。
tom's HARDWAREというサイトに説明がありました。
oled.pixel(x,y,c) x,yにdotを表示します。c=1で表示、c=0で消去です。
oled.hline(x,y,w,c) x,yを始点として長さwの水平な線を引きます。
oled.vline(x,y,h,c) x,yを始点として長さwの垂直な線を引きます。
oled.line(x1,y1,x2,y2,c) x1,y1からx2,y2まで線を引きます。
oled.rect(x,y,w,h,c) x,yを始点(左上)として、幅w、高さhの四角形を描きます。
oled.fill_rect (x,y,w,h,c) x,yを始点(左上)として、幅w、高さhの四角形を描き、中を塗りつぶします。
oled.fill(c) 画面全体をc色で塗りつぶします。つまり、c=0で全画面クリア、c=1で全画面白になります。
Hello World!を四角形で囲み、1秒ごとに数字をカウントアップさせるスクリプトを書いて動かしてみました。
スクリプトです。
------------------------------------------------------------------------------------
from machine import I2C,Pin
from utime import sleep
import ssd1306
i2c=I2C(0,sda=Pin(16),scl=Pin(17),freq=400000)
oled=ssd1306.SSD1306_I2C(128,64,i2c)
oled.rect(10,0,100,18,1)
oled.show()
oled.text("Hello World!",13,5)
oled.show()
n=0
while True:
oled.fill_rect(20,40,30,10,0)
oled.show()
oled.text(str(n),20,40)
oled.show()
n=n+1
sleep(1)
from utime import sleep
import ssd1306
i2c=I2C(0,sda=Pin(16),scl=Pin(17),freq=400000)
oled=ssd1306.SSD1306_I2C(128,64,i2c)
oled.rect(10,0,100,18,1)
oled.show()
oled.text("Hello World!",13,5)
oled.show()
n=0
while True:
oled.fill_rect(20,40,30,10,0)
oled.show()
oled.text(str(n),20,40)
oled.show()
n=n+1
sleep(1)
------------------------------------------------------------------------------------
ブレッドボードです。
このライブラリでは、残念ながらフォントの大きさは変えられないようです。
※コメント投稿者のブログIDはブログ作成者のみに通知されます