ESP32のMicroPythonでディスプレイモジュールを使う方法

この記事では、ESP32とMicroPythonを使ってディスプレイモジュールに文字、図形を表示する方法を解説します。

この記事で学べること

  • ESP32とディスプレイモジュールの接続方法
  • MicroPythonのコード例
  • ディスプレイの表示方法

ステップごとの解説

  1. 必要な部品を準備する
    今回も前回、MicroPythonをインストールしたM5STACK社のM5StampS3を使います。
    M5StampS3は、Amazonスイッチサイエンス社マルツエレック社などで購入することができます。
  2. M5StampS3にMicroPythonをインストールする
    前回の記事を参考にMicroPythonをインストールします。
  3. ディスプレイモジュールを準備する
    今回はディスプレイモジュールとして、有機LED(OLED)を用いたI2C制御の128×64グラフィックディスプレイモジュールを使います。モジュールで使われている制御チップSSD1306はArduinoやRaspberryPi等でライブラリが多くある定番ICです。MicroPythonのライブラリもあるので、今回はライブラリを使います。SSD1306のインタフェースはI2Cを実装しているので、M5StampS3とはI2Cインタフェース接続となります。SSD1306のデータシートはここにあります。
0.96インチ 128×64ドット有機ELディスプレイ(OLED) 白色
  1. M5StampS3のI2Cインタフェース
    M5StampS3のI2CインタフェースであるSDAとSCLは下図をみると、GPIO13がSDA、GPIO15がSCLであることがわかります。
  1. M5StampS3とディスプレイモジュールとの接続
    ディスプレイモジュールのSDAとM5StampS3のSDA(GPIO13)、ディスプレイモジュールのSCLとM5StampS3のSCL(GPIO15)を接続します。
  1. ディスプレイモジュールとM5StampS3をブレッドボード上で接続する
    下表と写真を参考に接続します。
    ジャンパーワイヤは、秋月電子やAmazonで入手できます。

部品

ピン

ブレッドボードマトリックス番号

M5StampS3

G1

22 – I

G3

23 – I

G5

24 – I

G7

25 – I

G9

26 – I

GND

27 – I

5V

28 – I

G13

29 – I

G15

30 – I

3V3

25 – E

G43

26 – E

G44

27 – E

EN

28 – E

G0

29 – E

GND

30 – E

ディスプレイモジュール

GND

10 – H

VCC

9 – H

SCL

8 – H

SDA

7 – H

ジャンパーワイヤ

ブレッドボードマトリックス番号

ジャンパーワイヤ1

28 – L === 5V

ジャンパーワイヤ2

27 – L === GND

ジャンパーワイヤ3

30 – J === 8 – J

ジャンパーワイヤ4

29 – K === 7 – K

ジャンパーワイヤ5

9 – L === 5V

ジャンパーワイヤ6

10 – L === GND

  1. M5StampS3をPCに接続する
    M5StampS3とPCをUSBケーブルで接続します。接続できているか確認します。
ls -l /dev/tty.usbmodem*
crw-rw-rw-  1 root  wheel  0x9000006  8 24 16:37 /dev/tty.usbmodem11401
  1. VSCodeで以前、作ったプロジェクトを選択する
    VSCodeを起動して、以前、作ったプロジェクトを選択します。
  1. エディタで新しいファイルを作成する
    左側のエクスプローラにて右クリックして、「新しいファイル」を選択します。ファイル名を入力する欄が表示されるので、適当に名前を入力します。今回は、「display.py」としました。
  1. ディスプレイモジュールのドライバをインストールする
    ディスプレイモジュール(SSD1306)には簡単に使えるようにドライバが公開されているので、インストールします。
    モジュールはここにあるので、ssd1306.pyをダウンロードします。
    ダウンロードしたら、ssd1306.pyをプロジェクトフォルダに保存します。保存したら、ssd1306.pyを選択して、右クリックから、「Upload file to Pico」をクリックすると、ssd1306.pyがM5StampS3内に保存されます。
  1. 下記コードをエディターで記入する
    「display.py」を選択すると、エディター画面が開くので、下記コードを記入して保存します。
from machine import Pin, I2C
import ssd1306

# using default address 0x3C
i2c = I2C(sda=Pin(13), scl=Pin(15))
display = ssd1306.SSD1306_I2C(128, 64, i2c)

display.text('Hello, World!', 0, 0, 1)
display.show()
  1. 「display.py」を実行する
    左のエクスプローラにて、「display.py」を選択して、右クリックから、「Run current file on Pico」をクリックすると、ディスプレイモジュールに、「Hello, World!』が表示されます。
  1. SSD1306の基本関数
    基本関数は以下のとおりです。
display.poweroff()     # ディスプレイの電源オフ、ピクセルはメモリに残存
display.poweron()      # ディスプレイの電源オン、ピクセルを再描画
display.contrast(0)    # 暗くする
display.contrast(255)  # 明るくする
display.invert(1)      # 反転
display.invert(0)      # 通常表示
display.rotate(True)   # 180度回転
display.rotate(False)  # 0度回転
display.show()         # FrameBuffer の内容をディスプレイメモリに書き出す
display.fill(0)                         # スクリーン全体を colour=0 で埋める
display.pixel(0, 10)                    # x=0, y=10 のピクセルを取得
display.pixel(0, 10, 1)                 # x=0, y=10 のピクセルに colour=1 を設定
display.hline(0, 8, 4, 1)               # x=0, y=8, width=4, colour=1 で水平線を描画
display.vline(0, 8, 4, 1)               # x=0, y=8, height=4, colour=1 で垂直線を描画
display.line(0, 0, 127, 63, 1)          # 0,0 から 127,63 に線を描画
display.rect(10, 10, 107, 43, 1)        # 10,10 と 117,53 の間、colour=1 で長方形を描画
display.fill_rect(10, 10, 107, 43, 1)   # 10,10 と 117,53 の間、colour=1 で塗り潰した長方形を描画
display.text('Hello World', 0, 0, 1)    # x=0, y=0, colour=1 でテキストを描画
display.scroll(20, 0)                   # 20 ピクセルだけ右にスクロール
  1. 描画の方法
    MicroPython のロゴを描画し、テキストを印字します。
from machine import Pin, I2C
import ssd1306

# using default address 0x3C
i2c = I2C(sda=Pin(13), scl=Pin(15))
display = ssd1306.SSD1306_I2C(128, 64, i2c)

display.fill(0)
display.fill_rect(0, 0, 32, 32, 1)
display.fill_rect(2, 2, 28, 28, 0)
display.vline(9, 8, 22, 1)
display.vline(16, 2, 22, 1)
display.vline(23, 8, 22, 1)
display.fill_rect(26, 24, 2, 4, 1)
display.text('MicroPython', 40, 0, 1)
display.text('SSD1306', 40, 12, 1)
display.text('OLED 128x64', 40, 24, 1)
display.show()

まとめ

ESP32とMicroPythonを使えば、シンプルなコードでディスプレイに表示をすることができます。応用すればIoTデバイスに簡単に組み込めます。

類似投稿