Wemos Lolin ESP32 OLED で、MicroPython から OLED 出力をする
前回の記事で、ESP32 に MicroPython を導入することができました。
これで ESP32 上で Python REPL を動かせるようになりました。
今回は、せっかくついている OLED に文字や図形を出力してみたいと思います。
それにあたって、便利のために MicroPython 用の IDE も導入することにしました。
uPyCraft (IDE) の導入
uPyCraft は DFRobot 社が無償で提供している、MicroPython 用の IDE です。
IDE とはいっても、Python のコーディングには PyCharm を使っているので、uPyCraft はファイル転送用に使います。
OLED に出力する
Wemos Lolin ESP32 OLED にのっている OLED は、SSD1306 というモジュールのようです。
ありがたいことに MicroPython では、SSD1306 のドライバーがすでに用意されています。
このドライバーを導入すれば、非常に簡単に OLED 出力をすることができます。
ドライバーの導入
MicroPython の Github から、ssd1306.py をダウンロードします。
これを uPyCraft を使って、ESP32 にダウンロードすれば導入完了です。
ダウンロードしたいファイルを開いて、Tools -> Download すればダウンロードできます。
うまくいくと、左側の device ディレクトリにファイルが追加されます。
ドライバーを使って OLED に出力する
I2C か SPI を使って OLED に出力することができます。
ひとまず I2C を使ってみることにしました。
I2C を使う場合は、SCL と SDA を指定する必要があります。
Wemos Lolin ESP32 OLED では、それぞれ以下のように接続されています。
- SCL: GPIO 4
- SDA: GPIO 5
これを ssd1306 ドライバーに教えてあげましょう。
import ssd1306 import machine i2c = machine.I2C(scl=machine.Pin(4), sda=machine.Pin(5)) oled = ssd1306.SSD1306_I2C(width=128, height=64, i2c=i2c)
上で作った oled インスタンスを介して、文字などを OLED 出力します。
ssd1306.py では、MicroPython の framebuf クラスを使って文字出力などを実現しています。
そのため framebuf のメソッドをそのまま使うことができます。
framebuf — Frame buffer manipulation — MicroPython 1.9.3 documentation
なお framebuf の引数で、色を指定する c がありますが、この OLED は 0 か 1 以上しか判定しないようです。
0 で消去、1 で描画というイメージです。
- 文字出力
oled.text("Hello", 0, 0) oled.show()
- 直線をひく
oled.line(0, 0, 128, 64, 1) oled.show()
- 四角をかく
oled.rect(10, 10, 108, 44, 1) oled.show()
- 塗りつぶす
oled.fill(1)
oled.show()
まとめ
今回は OLED に文字出力ができるようになりました。
次回はより IoT っぽく (?)、BME280 温湿度センサーモジュールから値を取得して、OLED 出力してみたいと思います。