Raspberry Pi Pico W に 0.96 インチ I²C 接続 OLED(128 × 64 ドット)をつないで、表示テストをしてみましょう。
この OLED は SSD1306 というコントローラ IC で動いており、I²C アドレスは 0x3C です。
自分でレジスタを叩くこともできますが、今回は初心者でも扱いやすい SSD1306 用ライブラリ を使って手早く動かしてみます。
-
Thonny IDE を起動
Pico を USB でつないだら、Thonny のメニューから
[ツール] → [パッケージを管理...] を選びます。
-
ライブラリをインストール
検索ボックスに ssd1306
と入力し、結果一覧から micropython-ssd1306
を選択して Install。
自動的に Pico 内の lib
フォルダ に ssd1306.py
がコピーされます。
これで準備完了。あとはスクリプトでライブラリをインポートし、表示テストを実行するだけです。
配線図
ソースコード
# Raspberry Pi Pico W + 0.96" SSD1306 OLED (128×64, I²C)
# - SDA = GP16, SCL = GP17 … I2C(0) を使用
#
# 依存ライブラリ:
# ・このファイルと同じ階層、または /lib フォルダに
# MicroPython 公式の ssd1306.py(掲載コード)を配置
from machine import I2C, Pin
from utime import sleep
import ssd1306 # ssd1306.py をインポート
# ────────────────────────────────
# 設定値(変更したい場合だけ書き換えてください)
SDA_PIN = 16 # SDA line (GP16)
SCL_PIN = 17 # SCL line (GP17)
OLED_ADDR = 0x3C # 0x3C または 0x3D
I2C_FREQ = 400_000 # 100_000 〜 400_000
# ────────────────────────────────
# === I²C 初期化 ===
i2c = I2C(
0, # bus 0 (GP16/GP17)
sda=Pin(SDA_PIN),
scl=Pin(SCL_PIN),
freq=I2C_FREQ,
)
# === I²C スキャンでアドレス確認 ===
if OLED_ADDR not in i2c.scan():
raise RuntimeError(
"OLED (addr 0x{:02X}) が見つかりません。配線とアドレスを確認してください。"
.format(OLED_ADDR)
)
# === OLED インスタンス生成 ===
oled = ssd1306.SSD1306_I2C(128, 64, i2c, addr=OLED_ADDR)
# === 初期画面描画 ===
oled.fill(0) # 画面クリア
oled.rect(10, 0, 100, 18, 1) # 枠線
oled.text("Hello World!", 13, 5, 1) # タイトル
oled.show() # 反映
# === カウンタを 1 秒ごとに更新 ===
n = 0
while True:
oled.fill_rect(20, 40, 30, 10, 0) # 前回の数字を消去
oled.text(str(n), 20, 40, 1) # 新しい数字を描画
oled.show() # 反映
n += 1
sleep(1)

処理の流れ
🛠️ I²C バス初期化
I2C(0, sda=GP16, scl=GP17, freq=400 kHz) でバス 0 を 400 kHz に設定。
🔍 デバイススキャン
i2c.scan() で接続済み I²C アドレスを列挙し、0x3C が存在するか確認。
→ 見つからなければ RuntimeError を発生させて処理を中断。
🖥️ OLED ドライバ生成
ssd1306.SSD1306_I2C(128, 64, i2c, addr=0x3C) で 128×64 モノクロ画面を確保。
🧹 画面初期化
oled.fill(0) で全面を黒、oled.rect() でタイトル枠を描き、
oled.text("Hello World!", …) で文字列を配置 → oled.show() で表示。
🔄 メインループ開始
1 秒ごとに以下を繰り返す。
🔲 前回の数値を消去 — oled.fill_rect()
🆕 カウンタ描画 — oled.text(str(n), …)
📤 表示更新 — oled.show()
➕ カウンタ加算 — n += 1
⏱️ ウェイト — sleep(1)
コメント
コメントを投稿