概要
Arduinoと複数のOLEDディスプレイを接続し、別々の情報を表示しようと試みた記録です。今回は2つ以上のディスプレイを接続する方法を模索しましたが、結論できませんでした。
I2C通信の特性やハードウェアの制約により実現が難しいと分かりました。本記事では、試行錯誤の内容、遭遇したエラー、そして最終的な解決策をまとめます。
試行内容
目標
- Arduino Nanoに2つの0.96インチOLEDディスプレイを接続。
- 各ディスプレイに異なる数値を表示(例: 1つ目に「111」、2つ目に「222」)。
接続方法
以下のように、2つのOLEDディスプレイを**同じI2Cバス(A4, A5)**に接続しました。
| OLEDピン | Arduinoピン | ディスプレイ1 | ディスプレイ2 |
|---|---|---|---|
| VCC | 3.3V または 5V | VCC | VCC |
| GND | GND | GND | GND |
| SDA | A4 | SDA | SDA |
| SCL | A5 | SCL | SCL |
遭遇したエラーと原因
エラー1: 初期化の失敗
エラーメッセージ:
ディスプレイ1の初期化に失敗しました。接続を確認してください。
原因:
- 2つのディスプレイが同じI2Cアドレス(
0x3C)を使用しているため、競合が発生しました。
エラー2: アドレス変更が不可能
試行:
- ディスプレイのアドレスを変更する方法を調べましたが、使用しているディスプレイには「ADDRピン」や「ジャンパーピン」がなく、ハードウェア的にアドレスを変更できませんでした。
エラー3: ソフトウェアI2Cでの問題
試行:
- 1つのディスプレイをソフトウェアI2C(別のArduinoピンをI2C通信に利用)で接続することを試みました。
- 以下のように、ソフトウェアI2Cを用いるコードを書きました。
#include <SoftWire.h>
SoftWire myWire(D2, D3); // ソフトウェアI2C (SDA=D2, SCL=D3)
Adafruit_SSD1306 display2(SCREEN_WIDTH, SCREEN_HEIGHT, &myWire, OLED_RESET);
エラーメッセージ:
SoftWire.h: No such file or directory
原因:
- 必要なライブラリをインストールしたものの、Adafruit SSD1306ライブラリがソフトウェアI2Cに対応していないバージョンである可能性が高いことが分かりました。
結局どうしたか
最終的に、複数のOLEDディスプレイを接続する構想をあきらめ、1つのディスプレイに複数の要素を表示する方法に切り替えました。
1つのディスプレイで複数の要素を表示する際には、setCursor() を使ってテキストを複数行に配置し、それぞれの要素を更新することで目的を達成しました。以下は実際の例です。
コード例: 1つのディスプレイに複数の要素を表示
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
void setup() {
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
while (1);
}
display.clearDisplay();
}
void loop() {
display.clearDisplay();
// 1行目にX軸の値を表示
display.setCursor(0, 0);
display.print("X: ");
display.println(111);
// 2行目にY軸の値を表示
display.setCursor(0, 16);
display.print("Y: ");
display.println(222);
// 3行目にZ軸の値を表示
display.setCursor(0, 32);
display.print("Z: ");
display.println(333);
display.display();
delay(500);
}
まとめ
今回の試行を通じて、以下のことが分かりました。
- I2Cアドレスの競合が複数ディスプレイ接続の最大の課題。
- アドレス変更ができないハードウェアでは、1つのI2Cバスに複数のOLEDを接続することは不可能。
- ソフトウェアI2Cを使う方法もライブラリやハードウェアの制約で簡単ではない。
最終結論
初めの構想では、要素ごとにディスプレイを分けて表示するつもりでしたが、それをあきらめ、1つのディスプレイに複数の要素を表示する方法に切り替えました。この方法により、無駄なハードウェアを追加することなく、目標を達成することができました。
IT・ガジェット・電子工作の知識をこれひとつで

ここまで読んでいただきありがとうございます。最後に宣伝をさせてください。
PCアプリの操作解説、最新のガジェット情報、そして電子工作の専門書まで。 Kindle Unlimitedなら、あらゆるジャンルのIT・デジタル関連書籍が読み放題です。
「仕事の効率化」から「趣味の深掘り」まで、高価な専門書をわざわざ買わずに、必要な情報をその場で引き出せるのが最大のメリット。 現在は30日間の無料体験や、対象者限定の「3ヶ月499円」プランなどが用意されています。まずはご自身のアカウントでお得なオファーが表示されるかご確認ください。
