[SPI] 0.96 inch OLED ディスプレイ (ER-OLED0.96-3W / SSD1306)

0.96 inch の OLED (Organic Light Emitting Diode) ディスプレイです。単色 128x96 フルグラフィックです (I2C 接続の記事はこちら)。



購入

Amazon 等で購入できます (購入時価格: ¥450)。

この製品には表示色がホワイトの他に "ブルー" と "イエロー&ブルー" というのがあります。ブルーはお好みなのでいいとして、"イエロー&ブルー" は買っちゃダメです。

画像を見れば解るように、2色任意で表示できる訳じゃありませんし、フルグラフィックなのにイエローとブルーの間に隙間があるので使い所が限られてしまいます。

このディスプレイは SPI / I2C 両接続バージョン となります。I2C 接続専用バージョン もありますので購入時には間違えないようにしてください。何故か SPI / I2C 両接続バージョンの方が安いので、こちらを買えば間違いないんじゃないでしょうかね?

画像では端子が 4 つしかないのに商品説明で SPI と書かれている場合、またはその逆の場合にはどちらが送られてくるかわかりませんのでご注意ください。SPI 接続なら少なくとも 7 ピンはあるはずです。

See Also:


各部詳細

パネルは ER-OLED0.96-3W、OLED コントローラは SSD1306 のようです。入力電圧は 3.3V~5V です。端子はシルク印刷の通りですね。見た感じでは ELECROW 製品のコピーのようです。

このモジュールには最初からピンヘッダが半田付けされていますので、そのままブレッドボードに挿して使えます。

裏面のジャンパを設定する事で SPI 接続 / I2C 接続を切り替えられます。デフォルトは SPI 接続用です。

接続方法 ジャンパ
SPI R3, R4
SPI (3線) R2, R3
I2C R1, R4, R6, R7, R8

ジャンパには 1608 (0603) サイズの 4.7KΩ チップ抵抗 (472) が使われているようです。

See Also:


動作確認

Arduino (UNO) との接続は以下のようになります。

VCC と 3V3 を繋いでいますが、5V でも構いません。

OLED Arduino 説明
GND GND GND
VCC 3V3 / 5V 電源
D0 10 クロック
D1 9 データ
RST 13 リセット
DC 11 データ/コマンド
CS 12 チップセレクト

Arduino と OLED ディスプレイとの接続は SPI (Serial Peripheral Interface) となります。

Adafruit ライブラリを使用

以下から Adafruit のライブラリを入手します。

サンプルスケッチは examples/ssd1306_128x64_spi にある ssd1306_128x64_spi.ino ですが、このままではうまく動きませんので、Adafruit_SSD1306.h を修正します。

//   #define SSD1306_128_64
   #define SSD1306_128_32
//   #define SSD1306_96_16

デフォルトだと 128x32 の OLED になっているので、128x64 の方を有効にします。

   #define SSD1306_128_64
//    #define SSD1306_128_32
//   #define SSD1306_96_16

コンパイルして実行するとデモが表示されます。

上記のやり方は UNO 用のソフトウェア SPI 接続なので、汎用的なハードウェア SPI 接続で使う方法もご紹介します。

  1. ssd1306_128x64_spi.ino をテキストエディタで開きます。
  2. ソフトウェア SPI を指定している所をコメントアウトします。
    // If using software SPI (the default case):
    #define OLED_MOSI   9
    #define OLED_CLK   10
    #define OLED_DC    11
    #define OLED_CS    12
    #define OLED_RESET 13
    // Adafruit_SSD1306 display(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS); // ← コメントアウトする
    
    /* Uncomment this block to use hardware SPI
    #define OLED_DC     6
    #define OLED_CS     7
    #define OLED_RESET  8
    Adafruit_SSD1306 display(OLED_DC, OLED_RESET, OLED_CS);
    */
  3. コメントアウトされているハードウェア SPI を指定している箇所を以下のように書き換えます。
    // If using software SPI (the default case):
    #define OLED_MOSI   9
    #define OLED_CLK   10
    #define OLED_DC    11
    #define OLED_CS    12
    #define OLED_RESET 13
    // Adafruit_SSD1306 display(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS); // ← コメントアウトする
    
    // If using hardware SPI
    #define OLED_DC     6     // 任意のピン
    #define OLED_CS     SS    // SS に変更
    #define OLED_RESET  8     // 任意のピン
    Adafruit_SSD1306 display(OLED_DC, OLED_RESET, OLED_CS);

OLED_DC と OLED_RESET は任意のピンを使えます。

OLED SPI UNO ESP-WROOM-02 ESP-WROOM-32 Blue Pill micro:bit
GND GND GND GND GND GND
VCC 5V 3V3 3V3 3.3 3.3
D0 SCK 10 IO14 IO18 PA5 13
D1 MOSI 9 IO13 IO23 PA7 14
RST (任意のピン)
DC (任意のピン)
CS SS 12 IO15 IO5 PA4 16

u8glib ライブラリを使用

以下から u8glib を入手してもいいのですが...

[スケッチ | ライブラリをインクルード | ライブラリを管理] から u8glib を探してインストールするのが簡単です。

サンプルスケッチの HelloWorld.pde は sys/arduino/HelloWorld/ にありますが、ここからコピーしてきてもいいでしょう。このスケッチでは LD7032 (I2C: 60x32) がデフォルトになっているので、以下の行を // でコメントアウトし、

U8GLIB_LD7032_60x32 u8g(U8G_I2C_OPT_NONE);      // I2C//U8GLIB_LD7032_60x32 u8g(U8G_I2C_OPT_NONE);      // I2C

以下の行を追記します。

U8GLIB_SSD1306_128X64 u8g(10, 9, 12, 11, 13); // SPI

コンパイルして実行するとデモが表示されます。接続方法は Adafruit ライブラリのもの (ソフトウェア SPI) と同じです

ハードウェア SPI で接続した場合には、

U8GLIB_SSD1306_128X64 u8g(SCK, MOSI, CS, DC に接続したピン, RST に接続したピン); // SPI

とすればよいでしょう。

See Also:


余談

Arduino LEONARDODa Vinci 32U を本製品と組み合わせると...?

ICSP 端子に配線するにはオス<->メスのジャンパーワイヤーが必要な事に注意してください。

OLED SPI Leonardo Da Vinci 32U
GND GND 1 GND
VCC 3V3 / 5V 2 5V
D0 SCK SCK SCK
D1 MOSI MOSI MOSI
RST 6 11 D6
DC 4 8 D4
CS SS 12 10 D12

この組み合わせで Arduboy のライブラリが使えます。

但し、Arduboy の OLED が 1.3inch なのに対して本製品は 0.96inch なので若干見にくいです。Arduboy と同じ画面サイズ (1.3inch) で OLED コントローラが SSD1306 のものは入手しづらく割高です。OLED コントローラが SSD1306 でなければ、安価な 1.3inch OLED は存在しますが、Arduboy Library を改変する必要があります。

See Also:


ここにある情報が役に立って、「調べる手間が省けたからオマイに飯でもおごってやるよ」 というハートウォーミングな方がいらっしゃいましたら、下のボタンからどうぞ。

メニュー: