1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

XIAO ESP32C6 の I2C を使って OLED に文字を表示してみよう

1
Posted at

XIAO ESP32C6 の I2C を使って OLED に文字を表示してみよう

OLEDの説明

今回使う OLED(有機EL)ディスプレイは、I2Cという方式で制御する 128×64 ドットの小型画面 です。
中には SSD1306 というコントローラが入っていて、文字や図形を表示できます。
I2Cは GND・VCC・SCL・SDA の 4 本の線で複数の機器をつなげる仕組みです。
このうちの 1 つとして OLED を接続し、文字を表示してみましょう。
使用するディスプレイ(0.96インチ 128×64ドット 有機ELディスプレイ):
https://akizukidenshi.com/catalog/g/g112031/

準備:OLED の GND、VCC、SCL、SDA を接続

回路図

image.png

配線図

image.png

プログラム

まず、「パッケージを管理」で、ssd1306 をインストールしておきます。

# メッセージがスクロールして、ボールが跳ねるサンプル
from machine import Pin, I2C
from ssd1306 import SSD1306_I2C
import time

# ---------------------------------------------------------
#  I2C を使うための初期設定 scl = クロック線、sda = データ線
# ---------------------------------------------------------
i2c = I2C(0, scl=Pin(23), sda=Pin(22))

# ---------------------------------------------------------
#  OLEDディスプレイを 128×64 ドットとして初期化
# ---------------------------------------------------------
oled = SSD1306_I2C(128, 64, i2c)

# ---------------------------------------------------------
#  ボールの初期位置(bx, by)と移動速度(dx, dy) 左上が (0,0)
# ---------------------------------------------------------
bx, by = 10, 10
dx, dy = 2, 2   # 毎フレーム2ドットずつ動く

# ---------------------------------------------------------
#  スクロールさせるメッセージ. 1文字を8ドットとして、全体の幅を計算
# ---------------------------------------------------------
msg = "Hello Pcratch IoT!"
msg_width = len(msg) * 8

# メッセージの初期位置(画面右の外側からスタート)
mx = 128

# ---------------------------------------------------------
#  メインループ(ずっと繰り返す)
# ---------------------------------------------------------
while True:
    # 画面を真っ黒にクリア(毎フレーム描き直すため)
    oled.fill(0)

    # -----------------------------------------------------
    #  ボールを描画(x座標, y座標, 幅, 高さ, 色)
    # -----------------------------------------------------
    oled.fill_rect(bx, by, 6, 6, 1)

    # -----------------------------------------------------
    #  メッセージを描画(文字列, x座標, y座標)
    #  mx を左に動かすことでスクロールして見える
    # -----------------------------------------------------
    oled.text(msg, mx, 50)

    oled.show()	    	# 描画内容をOLEDに反映

    time.sleep(0.05)	# 画面更新間隔(0.05秒 = 20FPS程度)

    # -----------------------------------------------------
    #  ボールの位置を更新(移動)
    # -----------------------------------------------------
    bx += dx
    by += dy

    # -----------------------------------------------------
    #  ボールが画面端に当たったら跳ね返る
    #  128×64 のうち、ボールの大きさ(6px)を引いた範囲で判定
    # -----------------------------------------------------
    if bx <= 0 or bx >= 122:   # 128 - 6 = 122
        dx = -dx               # 進行方向を反転
    if by <= 0 or by >= 58:    # 64 - 6 = 58
        dy = -dy

    # -----------------------------------------------------
    #  メッセージのスクロール更新. 左に2ドットずつ移動
    # -----------------------------------------------------
    mx -= 2

    # メッセージが画面の左側に完全に消えたら右端に戻す
    if mx < -msg_width:
        mx = 128

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?