👻

小さなESP32C3と小さな0.91インチOLED

2022/12/11に公開

Lチカの次に多いのではないかと思えるぐらい使われているSSD1306が使われているOLEDに文字表示を試してみた時の備忘録

ESP32はRISC-Vが搭載されているSeeed Studio ESP32C3と0.91 インチ 128x32ドット I2C通信 OLED SSD1306の組合せで制御はMicroPythonです。

接続

  • OLED(SCK) ←→ ESP32C3(SCL)
  • OLED(SDA) ←→ ESP32C3(SDA)

SSD1306ドライバ

SSD1306のドライバは下記のものを使用させていただきました。
https://github.com/stlehmann/micropython-ssd1306

サンプル表示

サイトの記載のサンプルをベースHello Worldの表示をさせてみました。

import machine
i2c = machine.I2C(sda=machine.Pin(6), scl=machine.Pin(7))
from ssd1306 import SSD1306_I2C
oled = SSD1306_I2C(128, 32, i2c)
oled.text('Hello', 0, 0)
oled.text('World', 0, 10)
oled.show()

sdaとsclのピン番号は下記のwikiに記載のあるピンレイアウト参考にしています。
ピンレイアウト

実行してみると警告メッセージが表示

Warning: I2C(-1, ...) is deprecated, use SoftI2C(...) instead

machine.I2Cの引数IDを指定してないデフォルト値(-1)では警告がでるもよう、メッセージ的には非推奨でソフトウェアI2Cを推奨しているようです。
MicroPythonのドキュメントにはハードウェアI2CとソフトウェアI2Cの違いが記載されていました。
https://micropython-docs-ja.readthedocs.io/ja/latest/library/machine.I2C.html?highlight=i2c
引数のIDを明示的に指定することでも警告表示は消せるようでESP32C3の場合は0を指定することで消えました。

text以外のメソッド

サンプルではtext()メソッドでテキスト文字を表示させましたが利用について紹介されている記事を読んでいると罫線や四角を表示させることも出来るようなのでssd1306.pyを確認してみるとそれらしいメソッドの定義がない、定義してあるSSD1306クラスを見るとframebuf.FrameBufferクラスを継承しているようでframebuf.FrameBufferクラスのドキュメント確認すると描画するためのメソッドの説明がありました。
https://micropython-docs-ja.readthedocs.io/ja/latest/library/framebuf.html?highlight=framebuf.FrameBuffer#framebuf.FrameBuffer

簡単だと思っていたOLED表示、実際試してみるのは大事かも。

Discussion