MicroPythonでSSD1306 OLEDディスプレイを使ってみる

0.96インチのSSD1306 OLEDディスプレイが安く販売されている。以下の物はAliExpressで送料込みで約300円。

1色(白か青)の物もあるが、自分は青・黄2色モジュールをチョイス。

今回はWeMos D1にこの小さなOLEDディスプレイを接続して表示を試してみた。

スポンサーリンク

配線

以前の記事でI2C接続のLCDを配線した場合と全く同じ。
I2Cクロックのディスプレイ基板側シルク印刷がSCLじゃなくてSCKと書いてある。大丈夫か…?

WeMos D1OLED(SSD1306)
D4SDA
D5SCK(SCL?)
3.3VVDD
GNDGND

ドライバのダウンロードと転送

ドライバはMicroPythonの本家GitHubリポジトリにある物を使わせて頂く。

ダウンロードしてampyで転送。

wget https://raw.githubusercontent.com/micropython/micropython/master/drivers/display/ssd1306.py
ampy put ssd1306.py 

ディスプレイの初期化

以下のコードをampy runやctrl-E貼り付けモードで一度実行すればOK。

from machine import Pin, I2C
from ssd1306 import SSD1306_I2C

i2c = I2C(scl=Pin(5), sda=Pin(4))
oled = SSD1306_I2C(128, 64, i2c)

以降はoledオブジェクトのメソッドを実行すれば描画出来る。長めのコードはampy runやctrl-E貼り付けて実行したが、短い時はインタープリタで対話的に実行した。

テキストを出力…なんか変!

とりあえずテキストを3行出力してみる。

oled.text('SSD1306 OLED 1.', 0, 0)
oled.text('SSD1306 OLED 2.', 0, 10)
oled.text('SSD1306 OLED 3.', 0, 20)

oled.show()

実行結果が以下の写真。2行目の表示がなんだかおかしい。

ここでわかったことは、

  • 1色バージョンと2色バージョンの価格が同じ理由(領域ごとに色が分かれている)
  • 色の境界のところが正常に表示されない

ベタ塗りしてみる

fill(0)で表示を全消去出来る。

>>> oled.fill(0)
>>> oled.show()

反対に、fill(1)で表示を全点灯する。黄色と青の境界に空白がある!

>>> oled.fill(1)
>>> oled.show()

横線を引く

線は、

oled.line(開始点x,開始点y,終了点x,終了点y,1)

で引くことが出来る。

16ライン目に線を引く。

>>> oled.line(0,15,127,15,1)

結果はこちら。黄色。

そのすぐ下に重ねて線を引く。

>>> oled.line(0,16,127,16,1)

17ライン目は青。写真がピンぼけでわかりづらいけど、16ライン目と17ライン目の間に空白があったんだね。

テキスト出力位置を調整

テキストは16ラインと17ラインをまたがないよう詰めて表示させれば問題なし。8行表示出来る。

oled.text('SSD1306 OLED 1.', 0, 0)
oled.text('SSD1306 OLED 2.', 0, 8)
oled.text('SSD1306 OLED 3.', 0, 16)
oled.text('SSD1306 OLED 4.', 0, 24)
oled.text('SSD1306 OLED 5.', 0, 32)
oled.text('SSD1306 OLED 6.', 0, 40)
oled.text('SSD1306 OLED 7.', 0, 48)
oled.text('SSD1306 OLED 8.', 0, 56)

oled.show()

消費電流を測定

poweroffメソッドを実行すると、画面を消すことが出来る。

>>> oled.poweroff()

画面を再度表示させるには、poweronソッドを実行。

>>> oled.poweron()

ディスプレイの電流を測定したところ、以下の通りだった。テキスト表示で使う限りは電流は10mA未満だろう。poweroffメソッドで電流をゼロに出来るので、上手く使えば電力がかなり抑えられそう。

操作消費電流
fill(0)実行0.5mA
fill(1)実行15.2mA
テキストを8行表示6.4mA
poweroff()実行0mA

まとめ

SSD1306ディスプレイを試してみた。textメソッドでテキスト表示が簡単に出来るのは良いのだが、カラーに関しては以下の点に注意する必要があることが分かった。

  • 先頭の1〜16ラインは黄色
  • 以降17〜64ラインは青色
  • 16ラインと17ラインの間に空白があって黒い線になってしまう

とはいえ消費電力は比較的小さく、またpoweoffメソッド実行で消費電力0に落とす事が出来る。省電力動作させたい時に重宝するかもしれない。

コメント