2025年8月12日火曜日

SSD1306 OLED:I²C接続で表示

 Raspberry Pi Pico W に 0.96 インチ I²C 接続 OLED(128 × 64 ドット)をつないで、表示テストをしてみましょう。

この OLED は SSD1306 というコントローラ IC で動いており、I²C アドレスは 0x3C です。
自分でレジスタを叩くこともできますが、今回は初心者でも扱いやすい SSD1306 用ライブラリ を使って手早く動かしてみます。

  1. Thonny IDE を起動
    Pico を USB でつないだら、Thonny のメニューから
    [ツール] → [パッケージを管理...] を選びます。




  2. ライブラリをインストール
    検索ボックスに 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_000400_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)

0 件のコメント:

コメントを投稿

Google Spread Sheetの利用

  以前に ESP32 で作っていたものを、Raspberry Pi Pico W + MicroPythonで再現してみました。 1.Googleスプレッドシートの設定 1.Google Drive → 右クリック → Google スプレッドシート 2.作成して共有をクリック