Help us understand the problem. What is going on with this article?

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

More than 3 years have 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

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

参考

jakalada
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした