Edited at

ArduinoでOLEDディスプレイを試す

More than 1 year has passed since last update.


この記事について

ebayで購入したOLEDディスプレイをArduinoで使用する手順です。

スケッチを作成するためのライブラリは「Adafruit SSD1306」と「Adafruit GFX Library」を使用します。

※「Adafruit SSD1306」は解像度が異なる種々のディスプレイに対応するためにヘッダーファイルを直接編集するのが公式の手順なのですが、次のissueでスケッチ側で制御できるような仕様変更がコメントで提案されています。ヘッダーファイルを直接編集する今の手順は、あとで古い手順になる可能性があるので注意してください。


購入したOLEDディスプレイについて

IMG_1654.jpg

Adafruitのこの商品の互換品です。

主な仕様は次のようになっています。


  • I2C通信

  • ディスプレイコントローラ: SSD1306

  • 解像度: 128x64

  • 電圧: 3.3V-5V

半年くらい前に購入して放置していたら、購入先が消えていました…。

同商品を販売している業者が大量にあるため、販売実績の多い(安全に思える)商品ページを載せておきます。


動作確認環境


  • Arduino IDE: バージョン 16.12

  • Arduino本体: Arduino UNO R3

  • ライブラリ


    • Adafruit SSD1306: バージョン 1.1.0

    • Adafruit GFX-Library: バージョン 1.1.5




使用するもの


  • SSD1306 OLEDディスプレイ

  • Arduino


    • この記事ではArduino UNO R3を使用した

    • ほかのArduinoを使用する場合はここ(英語)を参考にする



  • ブレッドボード

  • ジャンパ線(オス-オス)x4

ほかのArduinoを使用する場合は、Adafruit_SSD1306の互換性の表(英語)を参考にするといいです。


I2Cアドレスの確認

I2Cアドレスの表記.JPG

OLEDディスプレイを背面を見て、I2Cアドレスを確認します。

上の写真のように、0x78に側に接続されているか、0x7A側に接続されているかでI2Cアドレスが次のように異なります。

接続先
I2Cアドレス

0x78側に接続されている
0x3C

0x7A側に接続されている
0x3A

このアドレスによって、この記事の「ライブラリのヘッダーファイルを編集」と「スケッチ例の動作確認」で記述する値が異なります。


配線

OLEDディスプレイの正面側にピン名が表記されています。左から、GND、VCC、SCL、SDAです。

Arduino Uno R3の場合、次のように接続します。

Arduino Uno R3
OLEDディスプレイ

GND
GND

5V
VCC

SCL
SCL

SDA
SDA

配線.JPG

ほかのArduinoを使用する場合、次のようなWebサイトを参考に、Wireライブラリのスケッチ上の定数SDASCLに対応する番号のピンに接続してください。


ライブラリの準備

IDEのメニュー

IDEのメニュー「スケッチ > ライブラリをインクルード > ライブラリを管理…」からインストールします。スクリーンショットはMac OS Xです。


Adafruit_SSD1306のインストール

Adafruit SSD1306のインストール

「ssd1306」で検索すると、「Adafruit SSD1306 by Adafruit」というライブラリがヒットします。項目をクリックして、インストールしてください。


Adafruit-GFX-Libraryのインストール

Adafruit GFX Libraryのインストール

「gfx」で検索すると、「Adafruit GFX Library by Adafruit」というライブラリがヒットします。項目をクリックして、インストールしてください。


ライブラリのヘッダーファイルを編集

ライブラリ「Adafruit SSD1306」に含まれているAdafruit_SSD1306.hファイルを編集します。

50行目当たりが次のようになっていることを確認します。

#define SSD1306_I2C_ADDRESS   0x3D  // 011110+SA0+RW - 0x3C or 0x3D

使用するOLEDディスプレイのI2Cアドレスに合わせて、次のように変更します。

I2Cアドレスが0x3Cの場合:

#define SSD1306_I2C_ADDRESS   0x3C  // 011110+SA0+RW - 0x3C or 0x3D

I2Cアドレスが0x3Dの場合:

#define SSD1306_I2C_ADDRESS   0x3D  // 011110+SA0+RW - 0x3C or 0x3D

70行目あたりが次のような内容になっていることを確認します。

//   #define SSD1306_128_64

#define SSD1306_128_32
// #define SSD1306_96_16

使用するディスプレイの解像度が128x64なので、次のように編集します。

   #define SSD1306_128_64

// #define SSD1306_128_32
// #define SSD1306_96_16


スケッチ例の動作確認

スケッチ例.png

ライブラリ「Adafruit SSD1306」のスケッチ例「ssd1306_128x64_i2c」を開きます。

60行目あたりが次のようになっていることを確認します。

  display.begin(SSD1306_SWITCHCAPVCC, 0x3D);  // initialize with the I2C addr 0x3D (for the 128x64)

使用するOLEDディスプレイのI2Cアドレスに合わせて、次のように変更します。

I2Cアドレスが0x3Cの場合:

  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  // initialize with the I2C addr 0x3D (for the 128x64)

I2Cアドレスが0x3Dの場合:

  display.begin(SSD1306_SWITCHCAPVCC, 0x3D);  // initialize with the I2C addr 0x3D (for the 128x64)

スケッチを書き込み、次のようなロゴが表示されたあとでアニメーションが開始されれば、正常に動作しています。

スケッチ例の実行結果.JPG

単純に線を書いたり、テキストを表示したい場合は、次の記事を参考にしてください。


参考